[免费]基于Python的气象天气预报数据可视化分析系统(Flask+echarts+爬虫) 【论文+源码+SQL脚本】

发布于:2025-09-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

大家好,我是python222_小锋老师,看到一个不错的基于Python的Flask学生信息管理系统,分享下哈。

项目视频演示

【免费】基于Python的气象天气预报数据可视化分析系统(Flask+echarts+爬虫) Python毕业设计_哔哩哔哩_bilibili

项目介绍

随着气候变化的加剧,准确和时效的气象数据成为了日常出行的关键信息。本论文介绍了基于大数据技术的天气数据分析系统的设计与实现。该系统获取和风天气网获取实时天气数据,并经过清洗后存储在MySQL数据库中。利用ECharts技术实现数据可视化,展示了基本的天气信息和综合全国的天气数据。此外,系统。另外,系统具备用户登录、注册以及数据管理功能,用于管理和修改用户数据。总体而言,本系统实现了天气数据的自动获取、处理和可视化分析,同时提供了用户管理和数据管理功能。该系统不仅具有实用价值,也为未来气象数据研究提供了有价值的数据来源。

系统展示

部分代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="">
  <meta name="author" content="">
  <title>登录</title>
  <!-- Bootstrap core CSS-->
  <link href="/static/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
  <!-- Custom styles for this template-->
  <link href="/static/css/sb-admin.css" rel="stylesheet">
  <style>
    body {
      background-image: url('/static/img/loginBackground.jpg');
      background-size: cover;
    }
  </style>
</head>

<body class="bg-dark">
  <div class="container">
    <div class="row justify-content-center align-items-center" style="height: 100vh;">
      <div class="col-md-6">
        <div class="card card-login mx-auto">
          <div class="card-header">登录</div>
          <div class="card-body">
            <!-- 错误信息提示 -->
            {% if error_message %}
            <div class="alert alert-danger" role="alert">
              {{ error_message }}
            </div>
            {% endif %}
            <form class="user" method="POST" action="/login">
              <div class="form-group">
                <label for="exampleInputEmail1">邮箱</label>
                <input class="form-control" name="email" id="exampleInputEmail1" type="email" placeholder="Enter email">
              </div>
              <div class="form-group">
                <label for="exampleInputPassword1">密码</label>
                <input class="form-control" name="password" id="exampleInputPassword1" type="password" placeholder="Password">
              </div>
              <button class="btn btn-primary btn-block" type="submit">登录</button>
            </form>
            <div class="text-center">
              <a class="d-block small mt-3" href="/register">注册新用户</a>
              
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <!-- Bootstrap core JavaScript-->
  <script src="/static/vendor/jquery/jquery.min.js"></script>
  <script src="/static/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
  <!-- Core plugin JavaScript-->
  <script src="/static/vendor/jquery-easing/jquery.easing.min.js"></script>
</body>

</html>
import json

from flask import Flask, render_template, request, redirect, session, jsonify

from home.bar import highest_wind_humidity
from home.biaoqian import count_weather
from home.line import highest_lowest_temperature
from lishi.search import search_weather
from map.utils import city_tem
from search.line import line
from search.table import table
from userUtils.query import query

app = Flask(__name__)

# 设置密钥
app.secret_key = 'your_secret_key'


@app.route('/')
def every():
    return render_template('login.html')


@app.route("/login", methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        request.form = dict(request.form)

        email = request.form.get('email')
        password = request.form.get('password')

        user = query('SELECT * FROM users WHERE email = %s AND password = %s', [email, password], 'select_one')

        if user:
            session['email'] = email
            return redirect('/home', 301)

        else:
            error_message = '账号或密码错误'
            return render_template('login.html', error_message=error_message)

    else:
        return render_template('login.html')


@app.route("/register", methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        request.form = dict(request.form)
        username = request.form.get('username')
        email = request.form.get('email')
        password = request.form.get('password')
        password_checked = request.form.get('passwordChecked')

        if password != password_checked:
            error_message = '两次密码不符'
            return render_template('register.html', error_message=error_message)

        email_exists = query('SELECT * FROM users WHERE email = %s', [email], 'select_one')
        if email_exists:
            error_message = '该邮箱已被注册'
            return render_template('register.html', error_message=error_message)

        user_exists = query('SELECT * FROM users WHERE username = %s', [username], 'select_one')
        if user_exists:
            error_message = '用户名已被注册'
            return render_template('register.html', error_message=error_message)

        query('INSERT INTO users (username, email, password) VALUES (%s, %s, %s)', [username, email, password])

        session['email'] = email
        return redirect('/login', 301)

    else:
        return render_template('register.html')


@app.route("/home")
def home():
    # 获取用户信息
    email = session.get('email')
    # 四个标签
    sunny, cloudy, rainy, snowy = count_weather()
    # 折线图
    highest_temperatures, lowest_temperatures = highest_lowest_temperature()

    # 饼图和环形图
    highest_wind, highest_humidity = highest_wind_humidity()

    return render_template('home.html',
                           email=email,
                           # 标签
                           sunny=sunny,
                           cloudy=cloudy,
                           rainy=rainy,
                           snowy=snowy,

                           # 折线图
                           highest_temperatures=highest_temperatures,
                           lowest_temperatures=lowest_temperatures,

                           # 饼图和环形图
                           highest_wind=highest_wind,
                           highest_humidity=highest_humidity
                           )


# 天气地图路由
@app.route('/map')
def map():
    # 获取用户信息
    email = session.get('email')
    temperature = city_tem()
    temperature = json.dumps(temperature)  # 将温度数据转换为 JSON 格式
    return render_template('map.html',
                           email=email,
                           temperatureData=temperature
                           )


@app.route('/search', methods=['POST', 'GET'])
def search():
    email = session.get('email')
    try:
        if request.method == 'POST':
            # 接收参数
            city = request.form.get('city')

            # 调用 line 函数获取四个不同的天气指标数据
            line_result = line(city)

            # 调用 table 函数获取天气数据表格
            table_result = table(city)

            # 将四个指标数据分别赋值给不同的变量
            highest, lowest, visibility, humidity = line_result

            # 将结果组织成字典
            search_result = {
                'highest': highest,
                'lowest': lowest,
                'visibility': visibility,
                'humidity': humidity,
                'table_result': table_result  # 将新查询的结果添加到字典中
            }
            # print("查询结果:", search_result)
            return jsonify(search_result)
        return render_template('search.html', email=email)
    except Exception as e:
        error_message = "存在错误: {}".format(str(e))
        return jsonify({"error": error_message}), 500


@app.route('/lishi', methods=['POST', 'GET'])
def lishi():
    email = session.get('email')
    try:
        if request.method == 'POST':
            city = request.form.get('city')
            date = request.form.get('date')  # 接收日期参数
            search_result = search_weather(city, date)
            # print("查询结果:", search_result)
            return jsonify(search_result)
        return render_template('lishi.html', email=email)
    except Exception as e:
        error_message = "存在错误: {}".format(str(e))
        return jsonify({"error": error_message}), 500


# 用户管理路由
@app.route('/user', methods=['POST', 'GET'])
def user():
    email = session.get('email')
    return render_template('user.html', email=email)


@app.route('/get_user_info', methods=['POST', 'GET'])
def get_user_info():
    email = session.get('email')
    try:
        if request.method == 'GET':
            user = query('SELECT * FROM users WHERE email = %s', [email], 'select_one')
            username = user[0][1]
            useremail = user[0][2]
            usermima = user[0][3]
            print("查询结果:", user)
            # 构建返回的JSON对象
            return jsonify({
                "nickname": username,
                "email": useremail,
                "mima": usermima,
            })
    except Exception as e:
        error_message = "存在错误: {}".format(str(e))
        return jsonify({"error": error_message}), 500



@app.route('/update_user_info', methods=['POST', 'GET'])
def update_user_info():
    email = session.get('email')
    try:
        if request.method == 'POST':
            # 获取表单数据
            nickname = request.form.get('nickname')
            mima = request.form.get('mima')

            # 构建更新语句
            update_statement = '''
                UPDATE users
                SET username = %s, password = %s
                WHERE email = %s
            '''

            # 执行更新操作
            # 假设query函数可以接受一个操作类型参数,这里使用'update'
            update_result = query(update_statement, [nickname, mima, email], 'update')
            print(update_result)
            # 如果更新成功,返回成功消息
            return jsonify({
                "message": "用户信息更新成功"
            }), 200

        # GET请求的处理逻辑
        return render_template('update_user_info.html', email=email)
    except Exception as e:
        error_message = "存在错误: {}".format(str(e))
        return jsonify({"error": error_message}), 500


if __name__ == '__main__':
    app.run(debug=True)

源码下载

链接:https://pan.baidu.com/s/1362nYkB-3k5gnf4BVo1gNg
提取码:1234


网站公告

今日签到

点亮在社区的每一天
去签到