将requests.models.Response转换为Django HttpResponse

Ell*_*SUN 6 python django response httpresponse python-requests

在我的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)
Run Code Online (Sandbox Code Playgroud)

但是我想将这个第三方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)
Run Code Online (Sandbox Code Playgroud)

和api代码:

def api(self, service, data):
    ''' some logics here '''
    import requests
    response = requests.get(url, data=data)
    return response
Run Code Online (Sandbox Code Playgroud)

但似乎HttpResponse(结果)不是将requests.models.Response实例转换为HttpResponse的正确方法...布局不好,还有一些更多的编码问题等...是否有正确的方法将请求响应转换为Django HttpResponse?


更新:

HttpResponse(结果)工作,但页面的一些CSS丢失了.这可能与使用请求有关.

小智 14

这应该有效:

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
Run Code Online (Sandbox Code Playgroud)