在我的Django项目中,在我看来,我需要获取/发布一些数据到第三方url,然后重定向到它提供的网页。例如,我可以简单地做一些类似的事情
class TestView(TemplateView):
def get(self, request, *args, **kwargs):
data = {
'order_id': 88888,
'subject': 'haha',
'rn_check': 'F',
'app_pay': 'T',
}
url = 'http://some-third-party-api-url?order_id=88888&subject=haha&...'
return HttpResponseRedirect(url)但是,我想使用这个第三方api作为一个包装好的SDK,如
class TestView(TemplateView):
def get(self, request, *args, **kwargs):
from sucre.alipay_sdk.base import Alipay
from sucre.alipay_sdk import alipay_config
from django.http import HttpResponse
alipay = Alipay(alipay_config)
data = {
'order_id': 88888,
'subject': 'haha',
'rn_check': 'F',
'app_pay': 'T',
}
'''alipay api is wrapped in a sdk'''
'''and return a requests.models.Response instance'''
result = alipay.api('pay', data)
return HttpResponse(result)以及api代码:
def api(self, service, data):
''' some logics here '''
import requests
response = requests.get(url, data=data)
return response但是似乎HttpResponse(结果)并不是将requests.models.Response实例转换为HttpResponse的正确方法.布局不好,还有一些编码问题,etc...Is有正确的方法将请求响应转换为Django HttpResponse吗?
更新:
HttpResponse(结果)有效,但是页面中的一些css丢失了。这可能与使用请求有关。
发布于 2016-11-09 21:35:42
这应该是可行的:
from django.http import HttpResponse
import requests
requests_response = requests.get('/some-url/')
django_response = HttpResponse(
content=requests_response.content,
status=requests_response.status_code,
content_type=requests_response.headers['Content-Type']
)
return django_response发布于 2021-03-24 22:56:38
补充一下的答案:当我尝试解决方案时:
for k, v in requests_response.headers.items():
django_response[k] = v我从django获得了一个错误: AssertionError:逐跳头不允许
我不知道这是否是最好的解决方案,但我“修正”了它通过删除违规的标题。
from wsgiref.util import is_hop_by_hop
for k, v in requests_response.headers.items():
if not is_hop_by_hop(k):
django_response[k] = v发布于 2016-11-08 09:51:36
这可能对你有帮助:
requests.models.Response类,它有json()方法(根据文档),它使用json.loads()将JSON响应反序列化为json.loads对象。尝试打印跟随,你可以访问任何你想要的东西。
print yourResponse.json()https://stackoverflow.com/questions/40483149
复制相似问题