如何在Django中将POST请求更改为Get?

时间:2013-02-11 10:54:58

标签: django django-views

假设我有一个将接受POST请求的视图。验证检查通过后,我需要使用GET方法将请求重定向到另一个HTML /视图:

def view1(request):
    if request.POST:
       form = TempForm(request.POST)
       if form.is_valid():
           return redirect(request, 'view2')

def view2(request):
    if request.POST:
       #POST stuff here
    else:
       #GET stuff here

我的问题是在form.is_valid()之后,重定向请求将作为POST方法传递。我的最终目标是使用GET方法重定向view2。

我可以在Django中做这样的事吗?

2 个答案:

答案 0 :(得分:2)

您可以使用HttpResponseRedirect类重定向到您喜欢的任何网址。由于它是重定向,因此请求将是GET请求(使用http重定向无法进行POST - 这是对http协议的限制)。

如果您需要添加GET参数,您可以自己创建GET字符串 -

get_string = "?"
get_strint += "my_param=" + my_variable + "&"
get_string += "my_other_param=" + my_other_variable
return HttpResponseRedirect('/my_url/' + get_string)

答案 1 :(得分:0)

用户代理(浏览器)决定是通过POST还是GET重定向。如果重定向,大多数浏览器将从POST切换到GET。我知道你可以重定向并保持POST的唯一方法是你明确地这样做,比如使用curl -X POST。

http://en.wikipedia.org/wiki/Post/Redirect/Get