You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中相似路由/页面如何消除代码重复?

优化重复的Flask货币页面代码

嘿,我看到你现在为每个货币都写了几乎一模一样的视图函数,这不仅冗余,后续要改逻辑或者加新货币的时候,得重复改好几处,很容易出错!咱们用Flask的动态路由就能完美解决这个问题,只需要一个视图函数就能处理所有货币页面,具体做法如下:

1. 改用动态路由接收货币参数

把原来多个独立的路由,改成一个带参数的动态路由,同时可以保留根路由默认跳转到某个常用货币(比如美元):

from flask import redirect, url_for

# 根路由默认跳转到美元页面
@app.route('/', methods=['POST', 'GET'])
def index():
    return redirect(url_for('currency_page', currency='dollar'))

# 动态路由,接收货币名称参数
@app.route('/<currency>', methods=['POST', 'GET'])
def currency_page(currency):
    # 先验证货币是否是我们支持的类型,避免非法请求
    supported_currencies = ['dollar', 'euro', 'yen']  # 可以根据需要扩展
    if currency not in supported_currencies:
        # 这里可以返回404页面,或者重定向到默认货币页面
        return redirect(url_for('currency_page', currency='dollar'))
    
    form = MyTextForm()
    if form.validate_on_submit():
        values = app.process(request.form["values"])
        labels = get_data()
        # 把传入的currency参数传给模板
        return render_template('currency.html', currency=currency, labels=labels, values=values)
    
    # 如果没有提交表单,直接渲染页面
    return render_template('currency.html', currency=currency)

2. 关键优化点解析

  • 动态路由参数:<currency>会自动把URL里的对应部分作为参数传给视图函数,比如访问/euro时,currency参数就是'euro'
  • 参数验证:通过supported_currencies列表过滤非法请求,避免用户输入不存在的货币导致错误
  • 统一逻辑:所有货币页面的表单处理、模板渲染逻辑都集中在一个函数里,后续修改只需要改这一处

3. 模板适配(如果需要)

你的模板currency.html已经在使用currency变量了,所以不需要额外修改,它会自动根据传入的参数展示对应货币的内容。

这样改完之后,不管你要加多少种新货币,只需要在supported_currencies里加个名称,再确保模板能处理这个值就行,完全不用再写新的视图函数啦!

内容的提问来源于stack exchange,提问作者Alicja Głowacka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:42:33