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
相关产品推荐
相关产品推荐

