后台

发布时间 2023-04-03 21:27:11作者: 1printf
import pymysql
from flask import Flask, render_template
from flask import Flask, jsonify
from flask import Flask, send_from_directory
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
# 创建flask应用,__name__ 表示当前模块的名称。
# 连接 MySQL 数据库,注意修改数据库连接信息
# conn = pymysql.connect(host='localhost', user='root', password='123456', db='topic', charset='utf8mb4')
# 存储和处理特殊字符 如表情,应该使用 UTF-8MB4 而不是默认的 UTF-8
# @app.route('/home')
# 打开程序根目录=打开index。html=首页。  用户访问应用程序的根路径 / 时,Flask 会调用名为 index() 的函数来处理该请求。
# def home():

# 浏览器的同源策略(Same Origin Policy)
# 前端应用程序运行在 http://127.0.0.1:5500 域名下,而后台应用程序运行在 http://127.0.0.1:5000 域名下,因此浏览器会阻止前端应用程序发起跨域请求。
# 前端应用程序通常是在本地开发服务器中运行的,而后台应用程序通常是在 Flask、Django 或其他 Web 框架中运行的。这些 Web 框架通常会默认使用 5000 端口来监听 HTTP 请求。
# CORS(app)#允许所有跨域
CORS(app, resources={r"/*": {"origins": "http://127.0.0.1:5500"}})  
# 只允许本地
# CORS(app, resources={r"/*": {"origins": "http://localhost:5500"}})  
# 用localhost就访问不了127.0.0.1。虽然 localhost 和 127.0.0.1 是同一个 IP,但却被视为不同的域名
# 创建数据库连接 # 返回字典类型的游标,方便操作
conn = pymysql.connect(host='localhost',user='root',password='123456',database='topic',charset='utf8mb4',  
    cursorclass=pymysql.cursors.DictCursor )
# 检查连接是否成功
if conn:
    print('数据库连接成功!')
else:
    print('数据库连接失败!')

@app.route('/')
def index():
    print(conn)
    # 从数据库中读取数据
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM weibo')
    data = cursor.fetchall()
    # print(data)
    # #  获取查询结果
    cursor.close()
    # # 将数据传递给前台模板
    # return data[0]
    return render_template('index.html', data=data)
# from flask import abort
# @app.route('/')
# def index():
#     try:
#         cursor = conn.cursor()
#         cursor.execute('SELECT * FROM weibo')
#         data = cursor.fetchall()
#         cursor.close()
#         return render_template('index.html', data=data)
#     except Exception as e:
#         abort(500, f"An error occurred: {str(e)}")

# app = Flask(__name__)
# <script src="{{ url_for('static', filename='index.js') }}"></script>报错解决方法
# @app.route('/static/<path:path>')
# def serve_static(path):
#     return send_from_directory('static', path, mimetype='text/javascript')
# 手写的数据传送前端
# @app.route('/data')
# # @app.route('/http://127.0.0.1:5500/data')
# def get_data():
#     # 从数据库或其他数据源获取数据
#     data = [{'rid': 19, '用户名称': '生椰拿小林', '微博等级': '普通用户', '微博内容': '#疫情#\n难得,食堂拆除挡板了', '微博转发量': 0, '微博评论量': 0, '微博点赞': 0, '发布时间': '3-28 18:11', '搜索关键词': '#疫情#', '话题名称': '#疫情#', '话题讨论数': '今日阅读1.2万', '话题阅读数': '今日讨论244'},
#             {'rid': 19, '用户名称': '生椰拿小林', '微博等级': '普通用户', '微博内容': '#疫情#\n难得,食堂拆除挡板了', '微博转发量': 0, '微博评论量': 0, '微博点赞': 0, '发布时间': '3-28 18:11', '搜索关键词': '#疫情#', '话题名称': '#疫情#', '话题讨论数': '今日阅读1.2万', '话题阅读数': '今日讨论244'}]              
#     return jsonify(data)  # 返回JSON格式的响应  

# def data():
#     return jsonify({'message': 'Hello, World!'})
# 如后台转json文件正确的话,/data会显示json
if __name__ == '__main__':
    # app.run()
    # app.run(port=5500)  #后端改为5500
    app.run(debug=True)
    # print(f"Flask app is running on http://127.0.0.1:{app.config['PORT']}")
    # 如果当前脚本为主程序,则会执行此语句,启动应用程序并监听本地的默认端口 5000。
    # 没有这个判断语句,那么无论这个脚本是被其他程序导入还是直接执行,都会执行 app.run() 函数,这可能会导致一些问题。

# @app.route('/data')
# def get_data():
#     data = {'foo': 'bar'}
#     return jsonify(data)

# import pandas as pd
# from sqlalchemy import create_engine
# # 爬取微博数据的代码,已省略
# # 将 xls 中的数据写入到 MySQL 数据库中
# df = pd.read_excel('table.xls')
# engine = create_engine('mysql+pymysql://root:password@localhost:3306/database')
# df.to_sql(name='weibo', con=engine, if_exists='replace', index=False)