如何使用Django的HttpResponse方法在头文件中使用重定向位置属性

时间:2014-12-14 10:19:29

标签: python django

我正在使用oauthlib,我遇到了以下步骤

headers, body, status = grant.create_authorization_response(request, token)

当我打印标题,正文,状态,然后获取以下内容

headers = {u'Location': u'http://127.0.0.1:9998/grant_permission?code=RdWhPtXohTv3q47DNrpP
1vSL7IFmvU'} 

body = None 

status = 302

如何将这三个变量传递给Django的HttpResponse方法,请告诉我

我尝试了以下内容,但没有重定向

response = HttpResponse(content=body)
response.status_code = status
for k, v in headers.items():
    print k," = ",v
    response[k] = v

return response

2 个答案:

答案 0 :(得分:0)

要设置响应主体,必须在对象初始化时指定它,并将其作为构造方法的第一个参数传递。

用于设置标头和响应状态代码,来自Django documentation

  

HttpResponse.status_code:响应的HTTP状态代码

即,您将状态代码设置为对象属性。

  

要在回复中设置或删除标题字段,请将其视为a   字典

如果您需要重定向到其他网址,请使用对象HttpResponseRedirect指定对象构造函数中的网址。

答案 1 :(得分:0)

Location应位于标题中,而不是响应正文中。以下应该有效。

from django import HttpResponse

headers, body, status = grant.create_authorization_response(request, token)
response = HttpResponse(status=status)
response['Location'] = headers['location']
return response

但是,在Django中,您通常会使用HttpResponseRedirect重定向。这将负责设置标头,并返回状态代码为302(临时重定向)的响应。

from django.http import HttpResponseRedirect

headers, body, status = grant.create_authorization_response(request, token)
location = headers['Location']
return HttpResponseRedirect(location)