gpt4 book ai didi

python - 在 Django 中发出 POST 请求后无法进行简单的重定向(使用 HttpResponseRedirect)

转载 作者:太空宇宙 更新时间:2023-11-04 09:29:48 25 4
gpt4 key购买 nike

我试图在 Django 中的 POST 请求后返回一个 HTTP 响应,它似乎不起作用。我在下面使用 HttpResponseRedirect 对此进行了说明。

当执行下面的代码时,我看到了“hello”消息,但它没有重定向。如果我将 'return HttpResponseRedirect('/account/')' 行移到底部,那么它会在加载页面时进行重定向,因此该行在其他情况下会起作用。

if request.POST:
print('hello')
return HttpResponseRedirect('/thank-you/')
else:
return render(request, 'account.html')

最佳答案

您通过比较 request.method [Django-doc] 检查该方法使用您想要的方法,所以这里 request.method == 'POST'request.POST [Django-doc]是一个包含POST请求参数的QueryDict,但不是每个POST请求都有POST参数。如果这样的 POST 请求没有参数,则 if request.POST 将失败。

因此您可以使用:

if <b>request.method == 'POST'</b>:
print('hello')
return HttpResponseRedirect('/thank-you/')
else:
return render(request, 'account.html')

话虽如此,您可能想使用 redirect(..) [Django-doc]反而。 redirect(..) 是一种快捷方式,您可以在其中指定 View 的名称。如果您稍后更改 View 的路径,那么这仍然有效,因此:

from django.shortcuts import <b>redirect</b>

if request.method == 'POST':
print('hello')
return <b>redirect('name-of-view')</b>
else:
return render(request, 'account.html')

redirect(..) 将执行“反向查找”并将其生成的路径包装到 HttpResponseRedirect(..) 对象中。所以本质上它是完全一样的,但这种技术更“稳定”,因为如前所述,如果你改变你的 urls.py,反向查找仍然会成功。

关于python - 在 Django 中发出 POST 请求后无法进行简单的重定向(使用 HttpResponseRedirect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56164972/

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