Flask使用教程
一、基本运行
1.简单运行
from flask import Flask
# app 就是你的网站本体。
app = Flask(__name__)
# 配置路由
@app.route('/')
def index():
return "Hello,畅畅!"
if __name__ == '__main__':
app.run(debug=True)
然后可以直接运行该程序
2.返回html页面
- 在根目录创建
templates文件夹 - 导入render库并返回html文件
from flask import Flask
from flask import render_template #导入render库
app = Flask(__name__)
# 配置路由
@app.route('/')
def index():
# 默认在tamplates文件夹下寻找
return render_template('changchang.html')
if __name__ == '__main__':
app.run(debug=True)
3.接收GET请求
导入request,并调用其args属性
from flask import Flask
from flask import render_template #导入render库
from flask import request
app = Flask(__name__)
# 配置路由
#methods:允许GET和POST请求传入
@app.route('/', methods=['GET', 'POST'])
def index():
# 接收url路径传的参数
# print( request.args ) # ImmutableMultiDict([('name', 'changchang')])
name = request.args.get('name', None)
# 默认在tamplates文件夹下寻找
return render_template('changchang.html')
if __name__ == '__main__':
app.run(debug=True)
访问url路径
http://127.0.0.1:5000/?name=changchang
注:
request.args会返回一个ImmutableMultiDict([('name', 'changchang')])对象,是一个字典对象。可以用get方法来获取值
4.接收POST请求
#接收form表单提交的数据
@app.route('/formtest', methods=['POST'])
def form_test():
data = request.form.get('data', None)
print(f"Received POST data: {data}")
return f"POST data received: {data}"
# 接收json数据
@app.route('/jsontest', methods=['POST'])
def json_test():
data = request.json #这里的data是对应的字典
print(data)
return data
二、蓝图:路由分配
- 创建一个子路由文件
book.py
# book.py
from flask import Blueprint
bookbp = Blueprint("book",__name__)
# 注册为一个子路由的根路径
@bookbp.route('/')
def book_index():
return "这是book子路由的首页"
- 在主程序中导入该子路由
from flask import Flask
from flask import render_template
from flask import request
# 导入蓝图(子路由),可以导入多个
from book import bookbp
app = Flask(__name__)
# 注册蓝图(子路由)
app.register_blueprint(bookbp, url_prefix='/book') # 给子路由设置一个前缀,可以通过/book访问book子路由
@app.route('/', methods=['GET', 'POST'])
def index():
name = request.args.get('name', None)
print(f"Received name: {name}")
return render_template('changchang.html')
if __name__ == '__main__':
app.run(debug=True)
- 访问子路由的根路径
http://127.0.0.1:5000/book/
三、ORM:操作MySQL数据库
1.安装MySQL驱动
pip install flask_sqlalchemy
# 还需要安装mysqldb或pymysql
# pip install flask-mysqldb
pip install pymysql
2.在主程序中连接MySQL
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 配置 MySQL 连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:你的密码@localhost:3306/flask_db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
参数说明
| 项目 | 含义 |
|---|---|
root |
MySQL 用户名 |
你的密码 |
MySQL 密码 |
localhost |
本机 |
3306 |
MySQL 默认端口 |
flask_db |
数据库名称(需要你提前创建) |
3.创建数据库与数据表
3.1 创建数据库
CREATE DATABASE flask_db;
3.2 在Flask中定义数据表(Model)
在主程序中添加:
class User(db.Model):
__tablename__ = 'users' # 表名
id = db.Column(db.Integer, primary_key=True) # 主键
name = db.Column(db.String(50), nullable=False) # 姓名
age = db.Column(db.Integer, nullable=False) # 年龄
# 创建表(只需执行一次)
with app.app_context():
db.create_all()
运行后会在MySQL中创建表:
users
├── id
├── name
└── age
4.实现增删改查
4.1 增加数据
接口:POST /add
@app.route('/add', methods=['POST'])
def add_user():
name = request.json.get('name')
age = request.json.get('age')
user = User(name=name, age=age)
db.session.add(user)
db.session.commit()
return jsonify({"message": "用户添加成功"})
测试(用 curl 或 Postman):
curl -X POST http://127.0.0.1:5000/add -H "Content-Type: application/json" -d "{\"name\":\"畅畅\",\"age\":20}"
4.2 查询数据
查询全部用户
接口:GET /users
@app.route('/users', methods=['GET'])
def get_users():
users = User.query.all()
data = [{"id": u.id, "name": u.name, "age": u.age} for u in users]
return jsonify(data)
查询单个用户
接口:GET /user/<id>
@app.route('/user/<int:uid>', methods=['GET'])
def get_user(uid):
user = User.query.get(uid)
if not user:
return jsonify({"error": "用户不存在"}), 404
return jsonify({"id": user.id, "name": user.name, "age": user.age})
修改数据
接口:PUT /update/<id>
@app.route('/update/<int:uid>', methods=['PUT'])
def update_user(uid):
user = User.query.get(uid)
if not user:
return jsonify({"error": "用户不存在"}), 404
user.name = request.json.get('name', user.name)
user.age = request.json.get('age', user.age)
db.session.commit()
return jsonify({"message": "用户更新成功"})
删除数据
接口:DELETE /delete/<id>
@app.route('/delete/<int:uid>', methods=['DELETE'])
def delete_user(uid):
user = User.query.get(uid)
if not user:
return jsonify({"error": "用户不存在"}), 404
db.session.delete(user)
db.session.commit()
return jsonify({"message": "用户已删除"})

浙公网安备 33010602011771号