Django,"render" returns POST 请求而不是 POST 请求后的 GET
Django, "render" returns a POST request and not GET after a POST request
我有我的看法
def my_wishlist(request):
user = request.user
user_products = WishlistProductPrices.objects.filter(user=user).all()
### Create filters ###
filter = get_user_filter_fields_wishlist(user_products)
filter = filter(request.GET,queryset = user_products)
if request.method == "POST":
post_form = MyForm(request.POST)
if post_form.is_valid():
#do stuff
form = MyForm()
context = {
"form":form,
"filter":filter
}
return render(request, "myapp/add_wishlist.html",context=context) #Returns POST, seems like
else:
#invalid post_form
context = {
"form":post_form,
"filter":filter
}
return render(request, "myapp/add_wishlist.html",context=context)
else: #Get request
form = MyForm()
context = {
"form":form,
"filter":filter
}
return render(request, "myapp/add_wishlist.html",context=context)
它就像一个魅力,但在用户提交内容并按 F5 后弹出“你想重新发送信息吗”。
我觉得很奇怪,因为我假设页面底部的 render(request,"mypp/add_wishlist.html)
广告会 return GET 请求?
render
只是呈现模板,并将其包装在 HttpResponse
和 returns 中作为对 HTTP 请求的响应,无论该请求是什么。
这意味着如果表单有效,并且您返回响应,那么刷新通常会发出相同的 HTTP 请求。因此,这意味着下订单的人可以通过刷新网页来下第二个订单。
作为 成功 请求的结果(因此在表单有效的情况下),将实施 Post/Redirect/Get architectural pattern [wiki]。在这种情况下,它不会呈现模板,而是 returns 重定向响应(状态代码为 302 的响应),因此要求浏览器向传递的 url 发出 GET 请求。
您可以使用 redirect(…)
function [Django-doc] 进行此类重定向。
我有我的看法
def my_wishlist(request):
user = request.user
user_products = WishlistProductPrices.objects.filter(user=user).all()
### Create filters ###
filter = get_user_filter_fields_wishlist(user_products)
filter = filter(request.GET,queryset = user_products)
if request.method == "POST":
post_form = MyForm(request.POST)
if post_form.is_valid():
#do stuff
form = MyForm()
context = {
"form":form,
"filter":filter
}
return render(request, "myapp/add_wishlist.html",context=context) #Returns POST, seems like
else:
#invalid post_form
context = {
"form":post_form,
"filter":filter
}
return render(request, "myapp/add_wishlist.html",context=context)
else: #Get request
form = MyForm()
context = {
"form":form,
"filter":filter
}
return render(request, "myapp/add_wishlist.html",context=context)
它就像一个魅力,但在用户提交内容并按 F5 后弹出“你想重新发送信息吗”。
我觉得很奇怪,因为我假设页面底部的 render(request,"mypp/add_wishlist.html)
广告会 return GET 请求?
render
只是呈现模板,并将其包装在 HttpResponse
和 returns 中作为对 HTTP 请求的响应,无论该请求是什么。
这意味着如果表单有效,并且您返回响应,那么刷新通常会发出相同的 HTTP 请求。因此,这意味着下订单的人可以通过刷新网页来下第二个订单。
作为 成功 请求的结果(因此在表单有效的情况下),将实施 Post/Redirect/Get architectural pattern [wiki]。在这种情况下,它不会呈现模板,而是 returns 重定向响应(状态代码为 302 的响应),因此要求浏览器向传递的 url 发出 GET 请求。
您可以使用 redirect(…)
function [Django-doc] 进行此类重定向。