Django не возвращает ответ на запрос - PullRequest
0 голосов
/ 12 октября 2018

Я использую этот код для создания API, который возвращает запрос по почте, чтобы я мог протестировать и изменить их в соответствии с моими потребностями.

Я попробовал два кода, выполнив поиск по SO.

from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json


@csrf_exempt
def some_view(request, username):
    json_data = json.dumps(request)
    return JsonResponse(json_data, safe=False)

Этот код выдаст мне ошибку is not JSON serializable.

Если я применил к нему атрибут списка.Как и

from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json


@csrf_exempt
def some_view(request, username):
    json_data = json.dumps(list(request))
    return HttpResponse(json_data)

, он не выдал ошибку, но вернул пустой вывод. []

Редактировать: если я попытался вернуть request.POST.Я получил пустой массив.

Я тестирую этот API через POSTMAN.

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

request - это объект HttpRequest, а не необработанное тело запроса.Вам нужно получить доступ к этому с request.body.Возможно, вы также захотите использовать JsonResponse вместо HttpResponse, если хотите вернуть JSON через объект Python:

request_data = json.loads(request.body.decode('utf-8'))   # This assumes your request body is JSON
json_data = json.dumps(request_data)
return JsonResponse(json_data)

(я предполагаю, что вы сделаете немного больше, чем просто возвращаяоригинальный запрос позже).

0 голосов
/ 12 октября 2018

Если вы хотите прочитать Request атрибуты объекта, вы можете использовать request.__dict__.
Это вернет вам serailizable объект что-то вроде

{
    'FILES': < MultiValueDict: {} > ,
    'COOKIES': {},
    '_post_parse_error': False,
    'resolver_match': None,
    'GET': < QueryDict: {} > ,
    'META': {},
    'path_info': u '',
    'path': u '',
    'POST': < QueryDict: {} > ,
    'method': None
}

Возможно, вам придется перебрать и прочитать __dict__ атрибуты вложенных объектов, такие как 'GET': <QueryDict: {}>, 'POST': <QueryDict: {}>.

0 голосов
/ 12 октября 2018

Я думаю, что вы должны попытаться заменить

json_data = json.dumps(request)

на

json_data = json.dumps(request.body)

Здесь вы пытаетесь сериализовать весь объект HTTP-запроса, что, я думаю, не то, что выхочу сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...