您的位置:

处理flask出现报错FormDataRoutingRedirect(request)

  发布时间:2023-02-18 12:42:56
这个问题可以通过在重定向函数中使用参数 `code=307` 或者 `code=308` 来解决。使用例子当然有,这是一个使用 Flask 和 Jinja 模板系统的简单示例,使用重定向函数 保留原本的请求方式另外可以使用 ajax 请求,不需要重定向上述代码中,使用重定向函数将用户重定向到 /success 路由,并使用 code=参数来保留原本的请求方式。

报错的原因

`FormDataRoutingRedirect` 是一个 Flask 的内置异常类,当程序尝试重定向到一个表单数据路由(即使用 GET 方法请求的路由)时会抛出。这通常是因为程序在使用 POST 方法提交表单数据时,使用了重定向函数(如 `redirect()`)将用户重定向到一个 GET 请求路由上。

这个问题可以通过在重定向函数中使用参数 `code=307` 或者 `code=308` 来解决。这样会保留原本的请求方式,继续使用 POST。

如果确实要使用GET路由,那么需要把表单提交转化成GET请求。

如何解决

解决这个问题最简单的方法是在重定向函数中使用参数 `code=307` 或 `code=308` 。这样会保留原本的请求方式,继续使用 POST。

例如:


from flask import redirect, url_for

@app.route('/submit', methods=['POST'])
def submit():
    # Do something with the form data
    return redirect(url_for('success'), code=307)

另一种解决方案是,在表单提交后使用 JavaScript 刷新页面,而不是使用重定向函数。这样就可以保留当前的请求方式。


如果确实要使用 GET 请求路由,那么需要把表单提交转化成 GET 请求。可以在表单提交时使用 JavaScript 来更改请求方式。


这些都是解决方案,应该根据实际项目的需求来选择最合适的。

使用例子

当然有,这是一个使用 Flask 和 Jinja 模板系统的简单示例,使用重定向函数(redirect) 保留原本的请求方式。


from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/submit', methods=['POST'])
def submit():
    # Get the form data from the request
    form_data = request.form

    # Do something with the form data

    # Redirect to success page
    return redirect(url_for('success'), code=307)

@app.route('/success')
def success():
    return 'Form submitted successfully!'

if __name__ == '__main__':
    app.run(debug=True)

template/index.html


另外可以使用 ajax 请求,不需要重定向


上述代码中,使用重定向函数将用户重定向到 /success 路由,并使用 code=307 参数来保留原本的请求方式。

而ajax请求就不需要重定向了,因为它是异步提交。