Flask是一个轻量级的Python Web框架,它被称为"微框架",因为它保持核心简单但可扩展。
最简单的Flask应用结构如下:
from flask import Flask
# 创建Flask应用实例
app = Flask(__name__)
# 路由装饰器和视图函数
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
路由是 Web 应用中的一个核心概念,它决定了不同的 URL 请求应该由哪个函数来处理。@app.route 是 Flask 中的路由装饰器,用来将 URL 路径和处理函数关联起来。
@app.route('/路径')
def 处理函数():
return 响应内容
@app.route('/')
def home():
return '这是主页'
@app.route('/about')
def about():
return '这是关于页面'
# 路径参数
@app.route('/user/' )
def show_user(username):
return f'用户名是:{username}'
# 多个参数
@app.route('/post//' )
def show_post(year, month):
return f'显示{year}年{month}月的文章'
# 只接受POST请求
@app.route('/login', methods=['POST'])
def login():
return '处理登录请求'
# 同时接受多种请求方法
@app.route('/user', methods=['GET', 'POST'])
def user():
if request.method == 'POST':
return '创建新用户'
else:
return '获取用户信息'
注意事项
Flask支持不同的HTTP请求方法:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return '处理登录请求'
else:
return '显示登录表单'
处理来自客户端的数据:
from flask import request
@app.route('/submit', methods=['POST'])
def submit():
# 获取表单数据
username = request.form.get('username')
password = request.form.get('password')
return f'接收到数据:用户名={username}'
返回不同类型的响应:
from flask import jsonify
@app.route('/api/data')
def get_data():
data = {
'name': '张三',
'age': 25
}
return jsonify(data) # 返回JSON响应
让我们看一个更完整的示例,一个简单的用户管理系统:
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app) # 启用跨域支持
# 模拟数据库
users = {}
# 注册用户
@app.route('/api/users', methods=['POST'])
def register_user():
try:
data = request.json
username = data.get('username')
password = data.get('password')
if username in users:
return jsonify({
"error": "用户已存在",
"message": "该用户名已被注册"
}), 400
users[username] = {
"password": password,
"create_time": time.strftime("%Y-%m-%d %H:%M:%S")
}
return jsonify({
"message": "注册成功",
"data": {
"username": username,
"create_time": users[username]["create_time"]
}
})
except Exception as e:
return jsonify({
"error": str(e),
"message": "注册失败"
}), 500
# 获取用户信息
@app.route('/api/users/' , methods=['GET'])
def get_user(username):
if username not in users:
return jsonify({
"error": "用户不存在",
"message": "未找到该用户"
}), 404
return jsonify({
"message": "获取成功",
"data": {
"username": username,
"create_time": users[username]["create_time"]
}
})
if __name__ == '__main__':
app.run(debug=True)
@app.errorhandler(404)
def not_found(error):
return jsonify({
"error": "不存在",
"message": "请求的资源不存在"
}), 404
中间件(Middleware)是在请求到达视图函数之前或响应返回客户端之前执行的一段代码。它可以修改请求或响应,执行额外的操作(如身份验证、日志记录等)。
flask的中间件类型
from flask import Flask, request, g
import time
import logging
app = Flask(__name__)
# 1. before_request(请求前中间件)
@app.before_request
def before_request():
# 记录请求开始时间
g.start_time = time.time()
# 记录请求信息
logging.info(f"收到新请求:{request.path}")
# 2. after_request(请求后中间件)
@app.after_request
def after_request(response):
# 计算请求处理时间
duration = time.time() - g.start_time
# 添加响应头
response.headers['X-Request-Duration'] = str(duration)
return response
# 3. teardown_request(请求结束后,即使发生异常也会执行)
@app.teardown_request
def teardown_request(exception):
if exception:
logging.error(f"请求处理发生错误: {str(exception)}")