2016-11-08 5 views
3

В моем проекте Django мне нужно получить/разместить некоторые данные на стороннем url в моем представлении и перенаправить на веб-страницу, которую он предоставляет. Например, я могу просто сделать что-то вродеconvert request.models.Response to Django HttpResponse

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) 

Однако я хочу использовать этот сторонний апи в свернутом 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 (результат) не является правильным способом преобразования экземпляра request.models.Response в HttpResponse ... Макет плохой, и некоторые другие проблемы с кодировкой и т. Д. Есть ли правильный способ конвертировать запросы соответственно onse to Django HttpResponse?


Обновления:

HttpResponse (результат) работал, но некоторые CSS страницы были потеряны. Это может быть связано с использованием запросов.

+0

Посмотрите на [mcve] (http://stackoverflow.com/help/mcve) пожалуйста. – Olian04

+0

Спасибо @ Olian04 за совет. (Поскольку это был первый раз, когда я использовал stackoverflow, чтобы задать вопрос). Однако заполненный код был слишком длинным и не совсем о самом вопросе - преобразование из ответа запросов на HttpResponse .. –

ответ

5

Это должна работать:

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 
0

Это может помочь вам:

requests.models.Response класс, который имеет метод JSon() (в соответствии с documentation), что десериализует ответ JSON в объект Python с использованием json.loads(). Попробуйте распечатать следующие данные, и вы можете получить доступ ко всему, что ищете.

print yourResponse.json()