Ответ 1
Удаление содержимого содержимого из заголовков разрешает это.
Я пытаюсь загрузить изображение в django rest с помощью multipart/form-data
в запросе PUT
и Pillow:
class ABC(APIView):
parser_classes = (MultiPartParser,)
def put(self, request):
a = Image()
a.image_url = request.data["image"]
a.save()
class Image(models.Model):
image_url = models.ImageField(upload_to='static/bills', blank=True)
Я делаю запрос, который является запросом PUT и multipart/form-data. Я получаю код ответа 400 с сообщением:
{
"detail": "Multipart form parse error - Invalid boundary in multipart: None"
}
Как-то это сломалось только сейчас. Он работал нормально, когда я написал его в первый раз. С тех пор я добавил несколько настроек для запросов CORS, например:
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = (
'x-requested-with',
'content-type',
'accept',
'origin',
'authorization',
'x-csrftoken',
'token',
'x-device-id',
'x-device-type',
'x-push-id',
'dataserviceversion',
'maxdataserviceversion'
)
CORS_ALLOW_METHODS = (
'GET',
'POST',
'PUT',
'PATCH',
'DELETE',
'OPTIONS'
)
Любые идеи?
ОПЦИИ Запрос ответа:
Access-Control-Allow-Headers → x-requested-with, content-type, accept, origin, authorization, x-csrftoken, token, x-device-id, x-device-type, x-push-id, dataserviceversion, maxdataserviceversion
Access-Control-Allow-Methods → GET, POST, PUT, PATCH, DELETE, OPTIONS
Access-Control-Allow-Origin → *
Access-Control-Max-Age → 86400
Allow → GET, POST, DELETE, HEAD, OPTIONS
Content-Type → application/json
Date → Fri, 21 Aug 2015 06:23:28 GMT
Server → WSGIServer/0.1 Python/2.7.6
Vary → Accept
X-Frame-Options → SAMEORIGIN
Удаление содержимого содержимого из заголовков разрешает это.
Как правило, вы хотите использовать как FormParser, так и MultiPartParser вместе, чтобы полностью поддерживать данные формы HTML.
В вашей ошибке сообщается, что граница для вашего multipart/form-data
содержимого вашего запроса недействительна - в частности, это None
. Это, по дизайну, возвращает код ответа 400
( "Плохой запрос" ). Ошибка возникает здесь, в коде django.
Чтобы ввести ветвь с тегом boundary
, равным None
, означает, что параметр boundary
не указан в заголовке content-type
вашего запроса.
boundary
должен быть указан при использовании multipart/form-data
в content-type
, как указано в RFC2046 (ссылка на RFC2388) - в частности, раздел 5.1.1
Поле Content-Type для многочастных объектов требует одного параметра, "Граница".
Вы говорите, что это сработало раньше, поэтому вы должны проверить код, который вы используете для выполнения запроса, - что-то должно было измениться, чтобы означать, что boundary
не указано в content-type
.
NB Я предполагаю, что запрос генерируется кодом, поскольку <form method="put">
является недопустимым HTML, и поэтому запрос, сгенерированный браузером что HTML будет GET
, а не PUT
.