Почему Django request.POST всегда пуст, используя запросы PATCH или PUT? [Дубликат]

Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:

Вы пытаетесь использовать ссылочную переменную, значение которой Nothing / null. Если для ссылочной переменной значение Nothing / null, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.

Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную Nothing / null, или вы вызывали функцию, которая установите для этой переменной значение Nothing / null.

47
задан Cyril N. 14 February 2011 в 17:50
поделиться

5 ответов

Я использую django v1.5. И я в основном использую QueryDict для решения проблемы:

from django.http import QueryDict
put = QueryDict(request.body)
description = put.get('description')

и в *. Coffee

$.ajax
      url: "/policy/#{policyId}/description/"
      type: "PUT"
      data:
        description: value
      success: (data) ->
        alert data.body
      fail: (data) ->
        alert "fail"

Вы можете пойти здесь , чтобы найти дополнительную информацию , И я надеюсь, что это может вам помочь. Удачи:)

78
ответ дан Ni Xiaoni 25 August 2018 в 00:55
поделиться

Я предполагаю, что вы спрашиваете, есть ли у вас такой метод:

def restaction(request, id):
    if request.method == "PUT":
        someparam = request.PUT["somekey"]

Ответ - нет, вы не можете. Django не создает такие словари для запросов PUT, OPTIONS и DELETE, объясняя это здесь .

Чтобы обобщить это для вас, концепция REST заключается в том, что данные, которые вы обмениваете, могут быть намного сложнее, чем простая карта ключей к значениям. Например, PUTting изображение или использование json. Рамка не может знать, как много способов отправить данные, поэтому она делает очевидную вещь - давайте обработаем этот бит. См. Также ответ на этот вопрос , где указан один и тот же ответ.

Теперь, где вы находите данные? Ну, согласно документам , django 1.2 показывает request.raw_post_data. Как хэдз-ап, похоже, что django 1.3 будет поддерживать request.read(), т. Е. Файловую семантику.

38
ответ дан Community 25 August 2018 в 00:55
поделиться

Была проблема, что я не мог решить, как разбирать multipart / form-data из request. QueryDict(request.body) не помог мне.

Итак, я нашел решение для меня. Я начал использовать это:

from django.http.multipartparser import MultiPartParser

Вы можете получить данные из request, например:

MultiPartParser(request.META, request, request.upload_handlers).parse()
2
ответ дан Eugene Kovalev 25 August 2018 в 00:55
поделиться

Ответ Нинефигера верен. Есть, однако, обходные пути для этого.

Если вы пишете API стиля REST для проекта Django, я настоятельно рекомендую вам использовать tastypie . Вы сэкономите массу времени и гарантируете более структурированную форму для вашего API. Вы также можете посмотреть, как это делает tastypie (доступ к данным PUT и DELETE).

12
ответ дан jameshfisher 25 August 2018 в 00:55
поделиться

Вы можете увидеть пример получения QueryDict для метода PUT в коде django-piston (см. метод coerce_put_post)

5
ответ дан Tom Christie 25 August 2018 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: