Запрос пустых данных с помощью formData - Django Rest Framework
Я пытаюсь сохранить строки, плавающие символы и изображение через POST
запрос, сделанный к бэкенду Django Rest Framework:
# My view:
class CreatePost(APIView):
# tried with and without parser:
# parser_classes = [FormParser, MultiPartParser]
def post(self, request):
serializer = PostSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
serializer.save(user_id=request.user.pk)
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
# My serializer:
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ("x", "y")
И мой JS фронтенд:
const postBody = new FormData();
postBody.append('x', 'someValue');
postBody.append('y', 'someValue');
fetch('/api/v1/post', {
method: 'post',
body: postBody,
credentials: 'same-origin',
headers: {
'X-CSRFToken': getCookie('csrftoken'),
'Content-Type': 'multipart/form-data'
}
}
Однако, отправка как 'Content-Type': 'multipart/form-data'
не показывает никаких значений в request.data
в моем бэкенде. Отправка как application/json
работает, но не работает, когда одно из полей является изображением.
Как я могу обработать и текст, и изображение с помощью form-data
?
Я пробовал использовать парсеры (FormParser
и MultiPartParser
) без успеха.
Как сказано в https://docs.djangoproject.com/en/3.2/topics/http/file-uploads/#basic-file-uploads :
Обратите внимание, что request.FILES будет содержать данные только в том случае, если метод запроса был POST, по крайней мере одно поле файла было действительно размещено, и у разместившего запрос есть атрибут enctype="multipart/form-data". В противном случае request.FILES будет пустым.
Для файла в drf, FileUploadParser
может помочь. doc в https://www.django-rest-framework.org/api-guide/parsers/#fileuploadparser