Python: @app.route 使用详解

在 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)

八、常见错误排查

  1. 404 错误(路由未找到)

    • 检查路由装饰器的 URL 路径是否拼写正确

    • 确认应用实例名称是否一致(如 app = Flask(__name__)

  2. 405 错误(方法不允许)

    • 检查 methods 参数是否包含所需方法

  3. 动态参数匹配失败

    • 确保参数类型声明正确(如 <int:id> 需要传入数字)


最佳实践建议

  1. 使用蓝图 (Blueprint) 组织大型项目的路由

  2. 对动态路由参数进行验证

  3. 为 API 路由统一添加前缀(如 /api/v1/...

  4. 通过 before_request 实现全局路由预处理

完整 Flask 路由文档:Quickstart — Flask Documentation (3.1.x)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

meisongqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值