如果没有提交 flask 表单数据,则重定向到 404

redirect to 404 if flask form data has not been submitted

我的索引页上有一个烧瓶表格。我还有一个单独的页面,如果用户通过表单提交数据,它只会说“谢谢”,用户将在点击表单上的提交后被重定向到这里。

此重定向页面的 url 始终可以通过在浏览器中键入 /thanks 来访问。如果表单不包含任何数据,我想阻止对此 url 的访问或重定向到 404 页面(我创建的)。我想知道如何实现这一点?

这是我的索引页面路由代码。加载表格时可用:

@app.route('/', methods=['GET', 'POST'])
def index():
    email = None
    postcode = None
    form = InputForm()
    # validate form
    if form.validate_on_submit():
        email = form.email.data
        postcode = form.postcode.data
        form.email.data = ''
        form.postcode.data = ''
        return redirect(url_for('thanks'))
    return render_template(
        "index.html",
        email = email,
        postcode = postcode,
        form = form
        )

提交表单后,这是我的重定向路由代码。如果表单没有提交,或者表单中的数据是None.

,这是我要阻止的路由
@app.route('/thanks')
def thanks():
    return 'Thanks for submitting data via the form!'

这是我的 404 路线 - 供参考。

@app.errorhandler(404)
def page_not_found(e):
    return render_template("404.html"), 404

1.One 快速而肮脏的方法是在处理提交时设置一个全局变量。你在 thanks 内检查这个变量,如果不存在,你会引发 404 错误,比如

    wasRedirected = False

    @app.route('/', methods=['GET', 'POST'])
    def index():
       global wasRedirected
 
       if form.validate_on_submit():
          wasRedirected = True
          .........
          return redirect(url_for('thanks'))
    

    @app.route('/thanks')
    def thanks():
        global wasRedirected
        # If wasRedirected is true, it means it was set during a form submit
        if wasRedirected:
            wasRedirected = False
            return 'Thanks for submitting data via the form!'
        else:
           # raise your 404 error
  1. 您还可以查看 request.referrer 以查看它是否适用于此处(即查看您进行重定向时的引荐来源网址是否与您直接访问路由时的引荐来源网址不同)。