那里是我的新手。场景:提交表单后,我试图重定向到某个路由。所以我为此使用了烧瓶重定向以及代码参数。
@topics_bp.route('/create_topic/',methods =['GET','POST'] )
def create_topic():
if request.method == 'GET':
#send the form for create topic!
formData = TopicForm()
return render_template('create-topic.html',form = formData)
if request.method == 'POST':
# check the post method and redirect
return redirect(url_for('topic.topics'),code=201)
基本上,我想为创建的记录返回HTTP代码201,然后重定向到预期的路由。但是,如果我这样做,它只会返回一个重定向页面。每次需要手动单击时。
是否有任何解决方法可返回201代码并自动重定向?提前致谢!
我想为创建的记录返回HTTP代码201,然后重定向到预期的路由。
这不是您可以使用HTTP执行的操作。重定向本身就是特定的HTTP 30x状态代码:
在HTTP中,重定向是由服务器发送对请求的特殊重定向响应触发的。重定向响应的状态码以开头
3
,Location
标头中包含要重定向到的URL。
您返回201状态代码,或者返回HTTP重定向状态代码之一。你们不能两者都做。
该flask.redirect()
函数生成一个有效的30x响应(带有必需的Location
标头),并且该函数的文档说明了支持哪些重定向状态代码:
支持的代码为301、302、303、305、307和308。不支持300,因为它不是真正的重定向;而由于它是带定义的If-Modified-Since标头的请求的响应,因此不支持304。
但是,该函数不会强制执行此操作;状态代码未通过验证。
您需要在此处区分浏览器和其他客户端。201创建的响应通常是您从REST API返回给客户端的东西,该客户端期望在可编程级别进行简单的JSON或XML交互。另一方面,重定向通常在表示层的前端中使用。
如果您要编码基于HTML的前端,则只需返回重定向。人类不读取响应代码,而是读取呈现的HTML页面。他们不在乎,也不需要知道用于使浏览器执行正确操作的确切HTTP代码。鉴于您的路线还包含一个表格,几乎可以肯定,您将为人类而不是为程序化客户建立一个站点。
如果要构建REST API,则返回201响应,并记录API客户端必须基于Location
您包含的标头或响应主体中的内容进行新请求。但是,HTML浏览器不会跟随Location
201响应的标头。
然后redirect()
,即使允许您将其201
用作状态代码,我也不会使用该功能,因为它始终会生成一个(简单的)HTML正文,其中包含您在浏览器中看到的有关自动重定向的文本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句