我正在使用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
答案 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)