2013-02-11 37 views
0

假设我有一个将采取POST请求的视图。验证检查合格后,我要请求到另一个HTML /视图重定向用GET方法的请求:如何更改Post中的http请求以获取Django?

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做这种事吗?

+0

重定向不会是一个POST:http://stackoverflow.com/a/47735/396300 – 2013-02-11 11:03:50

+0

但我得到了这个序列: [11 /二月/ 2013 3点05分51秒] “GET/core/login_retrieval/HTTP/1.1”200 2123 [11/Feb/2013 03:05:53]“POST/core/login/HTTP/1.1”200 2429 我使用了错误的重定向功能吗? – 2013-02-11 11:07:26

+0

我认为你需要用变量创建一个url – catherine 2013-02-11 11:08:20

回答

2

您可以使用HttpResponseRedirect类重定向到您喜欢的任何URL。由于它是重定向,请求将是一个GET请求(POST不可能通过http重定向 - 这是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) 
0

的用户代理(浏览器),如果它被用POST重定向或GET决定。如果重定向,大多数浏览器将从POST切换到GET。我知道你可以重定向并保留在POST中的唯一方法是,如果你明确地执行它,例如使用curl -X POST。

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