You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

386 lines
16 KiB

from flask import Flask, render_template, request, redirect, session,jsonify
from werkzeug.security import generate_password_hash
from userUtils.query import query
from home.biaoqian import count_weather
from home.line import highest_lowest_temperature
from home.bar import highest_wind_humidity, highest_wind_weather
from search.line import line, line2
from search.table import table
from lishi.search import search_weather
from map.utils import city_tem
import json
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_info = query('SELECT username, email, password FROM users WHERE email = %s', [email], 'select_one')
user = query('SELECT * FROM users WHERE email = %s AND password = %s', [email, password], 'select_one')
if user:
session['username'] = user_info['username'] # 存储用户名
session['email'] = user_info['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')
data = request.args.get('data', default='温度') # 如果没有指定县市,默认为'池 州 市'
temperature = city_tem(data)
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_result = line(city)
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('/lishi2', methods=['POST', 'GET'])
def lishi2():
email = session.get('email')
highest_wind, highest_humidity = highest_wind_weather()
try:
if request.method == 'POST':
city = request.form.get('city')
data = request.form.get('data')
line_result = line2(city, data)
table_result = table(city)
highest, lowest = line_result
search_result = {
'highest': highest,
'lowest': lowest,
'table_result': table_result # 将新查询的结果添加到字典中
}
# 饼图和环形图
print("查询结果:", search_result)
return jsonify(search_result)
return render_template('lishi2.html',
email=email,
highest_wind=highest_wind,
highest_humidity=highest_humidity
)
except Exception as e:
error_message = "存在错误: {}".format(str(e))
return jsonify({"error": error_message}), 500
# 用户信息获取路由
@app.route('/get_user_info')
def get_user_info():
username = session.get('username')
if username:
user_info = query('SELECT username, email, password, cities FROM users WHERE username = %s', [username],
'select_one')
if user_info:
# 确保 cities 为列表格式
user_info['cities'] = json.loads(user_info['cities']) if user_info['cities'] else []
return jsonify({
'username': user_info['username'],
'email': user_info['email'],
'password': '********', # 隐藏实际密码
'cities': user_info['cities']
})
return jsonify({}), 404
@app.route('/update_username', methods=['POST'])
def update_username():
new_username = request.json.get('newUsername')
if new_username:
username = session.get('username')
if username:
query('UPDATE users SET username = %s WHERE username = %s', [new_username, username])
session['username'] = new_username
return jsonify({'message': '用户名更新成功'})
return jsonify({'message': '用户名更新失败'}), 400
@app.route('/update_email', methods=['POST'])
def update_email():
new_email = request.json.get('newEmail')
if new_email:
username = session.get('username')
if username:
query('UPDATE users SET email = %s WHERE username = %s', [new_email, username])
return jsonify({'message': '邮箱更新成功'})
return jsonify({'message': '邮箱更新失败'}), 400
@app.route('/update_password', methods=['POST'])
def update_password():
new_password = request.json.get('newPassword')
if new_password:
username = session.get('username')
if username:
hashed_password = generate_password_hash(new_password)
query('UPDATE users SET password = %s WHERE username = %s', [hashed_password, username])
return jsonify({'message': '密码更新成功'})
return jsonify({'message': '密码更新失败'}), 400
@app.route('/user')
def user():
username = session.get('username')
return render_template('user.html',username=username)
VALID_CITIES = ["北京", "海淀", "朝阳", "顺义", "怀柔", "通州", "昌平", "延庆", "丰台",
"石景山", "大兴", "房山", "密云", "门头沟", "平谷", "上海", "闵行",
"宝山", "嘉定", "南汇", "金山", "青浦", "松江", "奉贤", "崇明",
"徐家汇", "浦东", "天津", "武清", "宝坻", "东丽", "西青", "北辰", "宁河",
"汉沽", "静海", "津南", "塘沽", "大港", "蓟县", "重庆", "永川", "合川",
"南川", "江津", "万盛", "渝北", "北碚", "巴南", "长寿", "黔江", "万州",
"涪陵", "开县", "城口", "云阳", "巫溪", "奉节", "巫山", "潼南", "垫江",
"梁平", "忠县", "石柱", "大足", "荣昌", "铜梁", "璧山", "丰都", "武隆",
"彭水", "綦江", "酉阳", "秀山", "哈尔滨", "齐齐哈尔", "牡丹江", "佳木斯",
"绥化", "黑河", "大兴安岭", "伊春", "大庆", "七台河", "鸡西", "鹤岗",
"双鸭山", "长春", "吉林", "延边", "四平", "通化", "白城", "辽源", "松原",
"白山", "沈阳", "大连", "鞍山", "抚顺", "本溪", "丹东", "锦州", "营口",
"阜新", "辽阳", "铁岭", "盘锦", "葫芦岛", "呼和浩特", "包头", "乌海",
"乌兰察布", "通辽", "赤峰", "鄂尔多斯", "巴彦淖尔", "锡林郭勒", "呼伦贝尔",
"兴安盟", "阿拉善盟", "石家庄", "保定", "张家口", "承德", "唐山", "廊坊",
"沧州", "衡水", "邢台", "邯郸", "秦皇岛", "太原", "大同", "阳泉", "晋中",
"长治", "晋城", "临汾", "运城", "朔州", "忻州", "吕梁", "西安", "咸阳",
"延安", "榆林", "渭南", "商洛", "安康", "汉中", "宝鸡", "铜川", "杨凌",
"济南", "青岛", "淄博", "德州", "烟台", "潍坊", "济宁", "泰安", "临沂",
"菏泽", "滨州", "东营", "威海", "枣庄", "日照", "莱芜", "聊城", "乌鲁木齐",
"克拉玛依", "石河子", "昌吉", "吐鲁番", "巴州", "阿拉尔", "阿克苏", "喀什",
"伊犁", "塔城", "哈密", "和田", "阿勒泰", "克州", "博州", "拉萨", "日喀则",
"山南", "林芝", "昌都", "那曲", "阿里", "西宁", "海东", "黄南", "海南",
"果洛", "玉树", "海西", "海北", "格尔木", "兰州", "定西", "平凉", "庆阳",
"武威", "金昌", "张掖", "酒泉", "天水", "陇南", "临夏", "甘南", "白银",
"嘉峪关", "银川", "石嘴山", "吴忠", "固原", "中卫", "郑州", "安阳", "新乡",
"许昌", "平顶山", "信阳", "南阳", "开封", "洛阳", "商丘", "焦作", "鹤壁",
"濮阳", "周口", "漯河", "驻马店", "三门峡", "济源", "南京", "无锡", "镇江",
"苏州", "南通", "扬州", "盐城", "徐州", "淮安", "连云港", "常州", "泰州",
"宿迁", "武汉", "襄阳", "鄂州", "孝感", "黄冈", "黄石", "咸宁", "荆州",
"宜昌", "恩施", "十堰", "神农架", "随州", "荆门", "天门", "仙桃", "潜江",
"杭州", "湖州", "嘉兴", "宁波", "绍兴", "台州", "温州", "丽水", "金华",
"衢州", "舟山", "合肥", "蚌埠", "芜湖", "淮南", "马鞍山", "安庆", "宿州",
"阜阳", "亳州", "黄山", "滁州", "淮北", "铜陵", "宣城", "六安", "巢湖",
"池州", "福州", "厦门", "宁德", "莆田", "泉州", "漳州", "龙岩", "三明",
"南平", "南昌", "九江", "上饶", "抚州", "宜春", "吉安", "赣州", "景德镇",
"萍乡", "新余", "鹰潭", "长沙", "湘潭", "株洲", "衡阳", "郴州", "常德",
"益阳", "娄底", "邵阳", "岳阳", "张家界", "怀化", "永州", "湘西", "贵阳",
"遵义", "安顺", "黔南", "黔东南", "铜仁", "毕节", "六盘水", "黔西南",
"成都", "攀枝花", "自贡", "绵阳", "南充", "达州", "遂宁", "广安", "巴中",
"泸州", "宜宾", "内江", "资阳", "乐山", "眉山", "凉山", "雅安", "甘孜",
"阿坝", "德阳", "广元", "广州", "韶关", "惠州", "梅州", "汕头", "深圳",
"珠海", "佛山", "肇庆", "湛江", "江门", "河源", "清远", "云浮", "潮州",
"东莞", "中山", "阳江", "揭阳", "茂名", "汕尾", "昆明", "大理", "红河",
"曲靖", "保山", "文山", "玉溪", "楚雄", "普洱", "昭通", "临沧", "怒江",
"迪庆", "丽江", "德宏", "西双版纳", "南宁", "崇左", "柳州", "来宾", "桂林",
"梧州", "贺州", "贵港", "玉林", "百色", "钦州", "河池", "北海", "防城港",
"香港", "澳门", "台北", "高雄", "台中", "海口", "三亚", "三沙"
]
@app.route('/add_city', methods=['POST'])
def add_city():
username = session.get('username')
if not username:
return jsonify({'message': '用户未登录'}), 401
new_city = request.json.get('newCity')
if not new_city:
return jsonify({'message': '城市名称不能为空'}), 400
# 检查城市名称是否有效
if new_city not in VALID_CITIES:
return jsonify({'message': '无效的城市名称'}), 400
user_info = query('SELECT cities FROM users WHERE username = %s', [username], 'select_one')
if user_info and 'cities' in user_info:
cities = json.loads(user_info['cities']) if user_info['cities'] else []
else:
cities = []
if new_city not in cities:
cities.append(new_city)
query('UPDATE users SET cities = %s WHERE username = %s', [json.dumps(cities), username])
return jsonify({'message': '城市添加成功', 'cities': cities})
@app.route('/remove_city', methods=['POST'])
def remove_city():
username = session.get('username')
if not username:
return jsonify({'message': '用户未登录'}), 401
cities_to_remove = request.json.get('citiesToRemove')
if not cities_to_remove:
return jsonify({'message': '没有提供城市名称'}), 400
user_info = query('SELECT cities FROM users WHERE username = %s', [username], 'select_one')
if user_info and 'cities' in user_info:
cities = json.loads(user_info['cities']) if user_info['cities'] else []
else:
cities = []
cities = [city for city in cities if city not in cities_to_remove]
query('UPDATE users SET cities = %s WHERE username = %s', [json.dumps(cities), username])
return jsonify({'message': '删除成功', 'cities': cities})
if __name__ == '__main__':
app.run(debug=True)