python - Django重定向返回200但页面没有改变
问题描述
我在 Django 中有一个表单,我使用如下代码提交:
XHR.open("POST", "/route/to/post/view");
XHR.send(formData);
它的路线看起来像这样:
def my_view(request):
if request.method == "GET":
context = {"object": Perso.objects.all()}
return render(request, "myview.html", context)
elif request.method == "POST":
print("post request is", request.POST)
print("redirecting...")
return redirect("/route/to/another-view")
我知道这可以正常工作,因为当我按下 POST 按钮页面时会打印以下输出:
post request is <QueryDict: {'csrfmiddlewaretoken': ['6pdzvTNVO8d1KhS9w3IevFGD7w3bprBRQtUaO1TuXDS4RIkTP44IlFdYwJQB7czx'], 'vaccinator': ['tilley evan']}>
redirecting...
[12/Apr/2021 15:42:34] "POST /route/to/post/view HTTP/1.1" 302 0
[12/Apr/2021 15:42:34] "GET /route/to/another-view HTTP/1.1" 200 3546
在 Chrome 中,我可以看到发出了成功的 GET 请求,但由于某种原因,页面本身并没有改变。
这里有什么建议吗?
解决方案
当请求被重定向时,它实际上是 XHR 请求,而不是浏览器。那时,浏览器本身没有请求,只有 javascript。我建议您/route/to/post/view
返回一个 URL(例如在 JSON 中),然后window.location
在 JS 中使用来重定向浏览器。
解释得不好,我知道,我只是想不出更好的方法来区分“浏览器”和“js”部分。
推荐阅读
- r - 在 Complex Upset 中通过设置颜色手动着色点
- winrt-xaml - 无法创建“Syncfusion.UI.Xaml.Schedule.ScheduleAppointmentEditor”类型的实例
- spring - Spring @AliasFor 不适用于 @Profile 注释
- swiftui - 如何在 swiftUI 中推送详细信息页面并删除所有以前的导航链接?
- flutter - Flutter:如何在 textformfield 中加下划线
- javascript - 如何在 NightmareJS 上解析 defi 项目?
- android - 在低于 Android O 的设备上,如何以编程方式检测气泡或浮动通知是否打开?
- asp.net-core - 如何通过 ASP.NET 在 FOREACH 中使用表单
- c++ - Raspbian Bullseye (11) 错误中的原子链接
- javascript - iPadOS 15 Safari on.('touchend') 问题