Удаляет ли декоратор Django csrf_exempt все данные POST? - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть представление Django, которое возвращает список объектов или позволяет вам создать его, если вы POST ...

@csrf_exempt
def quantities(request):
    if request.method == "POST":
        kwargs = {**request.POST}
        print(request.POST)
        quantity = Quantity.objects.create(**kwargs)
        return JsonResponse({"quantity": f"/quantities/{quantity.id}/"})
    return JsonResponse([], safe=False)

Если он получает запрос GET, он возвращает список величин (кодне показан), который работает нормально, и если он получает запрос POST, он использует данные POST для создания нового количества.(Я знаю, что DRF делает все это для вас, но для моего первого API я хотел попробовать сделать это вручную - вы просто лучше это понимаете.)

В любом случае в моем тесте я использую запросы для проверкиэто работает ...

response = requests.post(
 self.live_server_url + f"/quantities/", data={
  "name": "Height", "units": "m", "description": "Human Height"
 }
)

Это не работает - он не передает никаких данных.Это print утверждение в представлении выше просто печатает <QueryDict: {}>.По какой-то причине данные POST, которые я вставил в запрос, ушли из запроса к тому времени, когда он прошел через все промежуточное программное обеспечение и добрался до представления.

Единственное, о чем я могу думать, это то, что @csrf_exempt Декоратор удаляет данные POST, хотя я не могу себе представить, почему.Я посмотрел на его исходный код, и, похоже, он этого не делает, но я не могу проверить, потому что удаление декоратора означает, что представление просто возвращает ответ 403.

Куда идут мои данные POST

1 Ответ

0 голосов
/ 29 декабря 2018

Получается, что по какой-то причине тот факт, что мой запрос имел заголовок "Content-Type": "application/json", заставлял Django не создавать словарь POST из тела запроса.Я понятия не имею, почему, но удаление этого заголовка устранило проблему.

...