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)