Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法在Django中的POST请求后执行简单重定向(使用HttpResponseRedirect)_Python_Django - Fatal编程技术网

Python 无法在Django中的POST请求后执行简单重定向(使用HttpResponseRedirect)

Python 无法在Django中的POST请求后执行简单重定向(使用HttpResponseRedirect),python,django,Python,Django,我试图在Django中的POST请求之后返回HTTP响应,它似乎不起作用。我在下面使用HttpResponseRedirect说明了这一点 当执行下面的代码时,我看到“hello”消息,但它不会重定向。如果我将“return-HttpResponseRedirect”/account/行移到底部,那么它在加载页面时会重定向,因此该行在其他情况下不会工作 if request.POST: print('hello') return HttpResponseRedirect('/th

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

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

if request.POST:
    print('hello')
    return HttpResponseRedirect('/thank-you/')
else:
    return render(request, 'account.html')
你需要检查一下方法

from django.shortcuts import redirect

if request.method == 'POST':
        print('hello')
        return redirect('/thank-you/')
    else:
        return render(request, 'account.html')
感谢@Willem Van Onsem指出,帖子需要是字符串而不是常量

你需要检查一下方法

from django.shortcuts import redirect

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

感谢@Willem Van Onsem指出POST需要是一个字符串而不是一个常量

您可以通过与所需的方法进行比较来检查该方法,因此这里request.method==“POST”。是一个QueryDict,它包含POST请求中的参数,但不是每个POST请求都有POST参数。如果此类POST请求没有参数,则If request.POST将失败

因此,您可以使用:

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

重定向。。将执行反向查找并将其生成的路径包装为HttpResponseRedirect。。对象因此本质上是完全相同的,但是这种技术更稳定,因为正如所说的,如果您更改URL.py,反向查找仍然会成功。

您通过与所需的方法进行比较来检查该方法,因此这里request.method==“POST”。是一个QueryDict,它包含POST请求中的参数,但不是每个POST请求都有POST参数。如果此类POST请求没有参数,则If request.POST将失败

因此,您可以使用:

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


重定向。。将执行反向查找并将其生成的路径包装为HttpResponseRedirect。。对象所以本质上是完全相同的,但这种技术更稳定,因为如前所述,如果您更改URL.py,反向查找仍然会成功。

我得到相同的结果,即:-没有重定向-当发出POST请求时,我在控制台中看到“Hi”打印,否则我不会——我在控制台中得到“get/thanky-you/HTTP/1.1200”,这使它看起来像是在尝试重定向,但实际上什么也没有发生browser@Exprator:我认为问题在于您使用POST作为标识符,而不是字符串文字。结果相同,尝试了两种解决方案。在控制台中,它似乎说它正在重定向,但我在浏览器中什么也没有得到,停留在同一页上。您是否有一个url,您正试图重定向到该名称?是的,如果我不是通过POST请求启动重定向,视图将重定向到该url。我得到相同的结果,即:-没有重定向-当发出POST请求时,我在控制台中看到“Hi”,否则我不会-我在控制台中看到“get/thank-you/HTTP/1.1200”,这使它看起来像是在尝试重定向,但实际上在控制台中什么也没有发生browser@Exprator:我认为问题在于你使用POST作为标识符,不是字符串文字。结果相同,尝试了两种解决方案。在控制台中,它似乎说它正在重定向,但我在浏览器中什么也没有得到,停留在同一页上。您是否有一个url与您试图重定向到的名称相同?是,如果我不是通过POST请求启动重定向,视图将重定向到该URL。不幸的是,我使用“重定向”并检查该方法是否为POST,而不是检查POST数据,得到了相同的结果。@blitz:你能在if语句之前打印request.method吗,看起来你一开始并没有提出POST请求。您的日志是否显示POST或GET或PUT、补丁、删除等?@blitz:您确定触发了正确的视图吗。在你发布的代码中,没有打印“hi”,所以也许你触发了一个不同的视图。嗨,Willem,我确实可以打印这个方法,我得到:POST hello在控制台中我把hello放在前面只是为了测试这个方法是否是POST,它只在我发出POST请求时打印hello,所以我认为检查是正确的good@blitz:您没有忘记返回Http中的返回。。。或者返回重定向..?不幸的是,我使用“重定向”并检查方法是否为POST而不是检查POST数据时得到了相同的结果。@blitz:您可以在if语句之前打印request.method吗?看起来您一开始并没有发出POST请求。您的日志是否显示POST或GET或PUT、补丁、删除等?@blitz:您确定触发了正确的视图吗。在你发布的代码中,没有打印“hi”,所以也许你触发了一个不同的视图。嗨,Willem,我确实可以打印这个方法,我得到:POST hello在控制台中我把hello放在前面只是为了测试这个方法是否是POST,它只在我发出POST请求时打印hello,所以我认为检查是正确的good@blitz:您没有忘记返回Http中的返回。。。还是返回重定向。。?