gpt4 book ai didi

python - 如何从 Flask 中的辅助函数重定向?

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:13 25 4
gpt4 key购买 nike

在许多表单上我们都有一个取消按钮。为了让事情保持干燥,似乎需要一个辅助函数。函数 if_form_cancel() 将检查是否单击了取消按钮,然后相应地重定向(目标传递给函数)。但是,当我们使用辅助函数时,重定向会被忽略(它在线运行得很好)。

View .py

from helper.py import if_form_cancel
...

def index():
return render_template('index.html')

def edit():
...
form = EditForm(obj=user, csrf_enabled=False)
if request.method == 'POST':
if_form_cancel(url_for('.index'))
if form.validate():
...
return redirect(url_for('.index'))
return render_template('edit.html')

助手.py

from flask import request, redirect, flash

def if_form_cancel(destination='/'):
try:
if request.form['cancel']:
flash(u'Operation canceled at user request')
return redirect(destination)
except KeyError:
pass

编辑.html

....
<input type="submit" name="submit" value="Submit" />
<input type="submit" name="cancel" value="Cancel" />
....

如果单击取消按钮的结果:调用辅助函数,闪烁正确的消息,但不会发生重定向。是否可以从这样的辅助函数重定向?如果是这样怎么办?我们做错了什么?

最佳答案

您没有在 edit 函数中返回 if_form_cancel 的结果。但是您只想在用户取消时返回。异常在这里会很好用,看起来 werkzeug 有这样的异常。

看看这是否可行(未经测试)。

from werkzeug.routing import RequestRedirect

def if_form_cancel(destination='/'):
try:
if request.form['cancel']:
flash(u'Operation canceled at user request')
raise RequestRedirect(destination)
except KeyError:
pass

或者,您可以让 form_cancel 助手检查表单并在用户取消时返回 True,然后在 View 本身中进行重定向。

def edit():
...
form = EditForm(obj=user, csrf_enabled=False)
if request.method == 'POST':
if form_cancel():
return redirect(url_for('.index'))
if form.validate():
...
return redirect(url_for('.index'))
return render_template('edit.html')

另外,考虑使用 validate_on_submit 而不是手动检查 POST。

https://flask-wtf.readthedocs.org/en/latest/quickstart.html#validating-forms

关于python - 如何从 Flask 中的辅助函数重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20003604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com