我有一些看起来很相似的子页面: 它们几乎相同,但每种都呈现不同的货币:
@app.route('/', methods=['POST', 'GET'])
@app.route('/dollar', methods=['POST', 'GET'])
def dollar_page():
form = MyTextForm()
if form.validate_on_submit():
values = app.process(request.form["values"])
labels = get_data()
return render_template('currency.html', currency="dollar", labels=labels, values=values)
@app.route('/euro', methods=['POST', 'GET'])
def euro_page():
form = MyTextForm()
sentiment = ""
if form.validate_on_submit():
values = app.process(request.form["values"])
labels = get_data()
return render_template('currency.html', currency="euro", labels=labels, values=values)
@app.route('/pound', methods=['POST', 'GET'])
def pound_page():
... etc ...
在Flask应用程序中摆脱这种重复的最佳方法是什么?有什么模式吗?谢谢!
答案 0 :(得分:2)
在路线中创建一个变量以接收货币类型。 route变量作为参数传递给view函数。 /
路由没有变量,因此在这种情况下提供默认值。
import functools
def verify_currency(f):
@functools.wraps(f)
def wrapper(currency_type):
if currency_type not in ['dollars', 'euros']: #can add more currencies to list later
return flask.render_template("error.html") #or redirect
return f(currency_type)
return wrapper
@app.route('/', methods=['POST', 'GET'], defaults={'currency': 'euro'})
@app.route('/currency/<currency>', methods=['POST', 'GET'])
@verify_currency
def dollar_page(currency):
form = MyTextForm()
values = labels = None
if form.validate_on_submit():
values = app.process(request.form["values"])
labels = get_data()
return render_template('currency.html', currency=currency, labels=labels, values=values)