在 Flask 中,@app.route
是定义路由的核心装饰器,用于将 URL 路径与 Python 函数绑定。以下是完整的用法指南:
一、基本语法
python
复制
@app.route(rule, methods=['GET'], **options) def view_function(): return response
-
rule:URL 路径规则(字符串)
-
methods:允许的 HTTP 方法(默认 GET)
-
options:其他参数(如
strict_slashes
)
二、基本用法示例
1. 简单路由
python
复制
@app.route('/') def home(): return "欢迎来到首页!" # 返回文本 @app.route('/about') def about(): return render_template('about.html') # 返回模板
2. 带参数的路由
python
复制
# 动态 URL 参数(默认类型为字符串) @app.route('/user/<username>') def show_user(username): return f"用户:{username}" # 指定参数类型(支持:string, int, float, path, uuid) @app.route('/post/<int:post_id>') def show_post(post_id): return f"文章ID:{post_id}"
三、支持 HTTP 方法
python
复制
@app.route('/submit', methods=['GET', 'POST']) def submit(): if request.method == 'POST': return handle_post_request() else: return show_submit_form()
四、返回不同类型响应
1. 返回 JSON
python
复制
@app.route('/api/data') def get_data(): data = {'name': 'John', 'age': 30} return jsonify(data) # 自动设置 Content-Type 为 application/json
2. 返回文件
python
复制
@app.route('/download') def download_file(): return send_file('report.pdf') # 需要 from flask import send_file
3. 重定向
python
复制
@app.route('/old-page') def old_page(): return redirect(url_for('new_page')) # 重定向到新路由 @app.route('/new-page') def new_page(): return "这是新页面"
五、结合请求对象
python
复制
from flask import request @app.route('/search') def search(): keyword = request.args.get('q', '') # 获取 GET 参数 return f"搜索关键词:{keyword}" @app.route('/login', methods=['POST']) def login(): username = request.form.get('username') password = request.form.get('password') # 处理登录逻辑...
六、高级用法
1. URL 构建 (url_for
)
python
复制
@app.route('/user/<username>') def profile(username): return f"用户主页:{username}" # 在模板或代码中生成 URL print(url_for('profile', username='Alice')) # 输出:/user/Alice
2. 自定义响应状态码
python
复制
@app.route('/error') def custom_error(): return "页面不存在", 404 # 返回状态码 + 响应体
3. 响应头控制
python
复制
@app.route('/special') def special_response(): headers = {'X-Custom-Header': 'SecretValue'} return "特殊响应", 200, headers
七、结合你的项目示例
根据你之前的系统需求,典型路由可能包括:
python
复制
# 数据可视化大屏 @app.route('/dashboard') def dashboard(): return render_template('dashboard.html') # 数据接口 @app.route('/api/sales') def sales_data(): data = db.query_sales_data() return jsonify(data) # 带过滤条件的路由 @app.route('/category/<cate_name>') def category_filter(cate_name): results = db.query_by_category(cate_name) return render_template('category.html', data=results)
八、常见错误排查
-
404 错误(路由未找到)
-
检查路由装饰器的 URL 路径是否拼写正确
-
确认应用实例名称是否一致(如
app = Flask(__name__)
)
-
-
405 错误(方法不允许)
-
检查
methods
参数是否包含所需方法
-
-
动态参数匹配失败
-
确保参数类型声明正确(如
<int:id>
需要传入数字)
-
最佳实践建议
-
使用蓝图 (
Blueprint
) 组织大型项目的路由 -
对动态路由参数进行验证
-
为 API 路由统一添加前缀(如
/api/v1/...
) -
通过
before_request
实现全局路由预处理
完整 Flask 路由文档:Quickstart — Flask Documentation (3.1.x)