📌  相关文章
📜  序列化程序中的文件上传字段 – Django REST 框架(1)

📅  最后修改于: 2023-12-03 15:39:28.123000             🧑  作者: Mango

序列化程序中的文件上传字段 - Django REST 框架

在Django REST Framework中,我们可以使用serializers来序列化和反序列化数据。但是,有些情况下我们需要保存文件,比如用户头像或者文档、音视频等文件。那么该如何在序列化程序中处理文件上传的字段呢?

1. 定义序列化器

首先,我们需要定义一个序列化器,其中包含一个文件上传字段。可以使用DRF自带的FileField,也可以使用第三方包drf-extra-fieldsBase64ImageFieldBase64FileField

使用DRF自带的FileField

from rest_framework import serializers

class MySerializer(serializers.Serializer):
    name = serializers.CharField()
    file = serializers.FileField()

使用drf-extra-fields的Base64ImageField和Base64FileField

from drf_extra_fields import fields

class MySerializer(serializers.Serializer):
    name = serializers.CharField()
    image = fields.Base64ImageField()
    file = fields.Base64FileField()
2. 视图处理文件上传

接下来,我们需要在视图中处理文件上传。可以使用DRF自带的FileUploadParser,也可以使用第三方包django-rest-framework-fileuploadMultipartJsonParser。这里我们以MultipartJsonParser为例。

from rest_framework.views import APIView
from drf_extra_fields import parsers

class MyView(APIView):
    parser_classes = (parsers.MultipartJsonParser,)

    def post(self, request):
        serializer = MySerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

以上代码中,我们使用了MultipartJsonParser来解析请求体。需要注意的是,我们还需要在请求头中添加Content-Type: multipart/form-data来告诉服务器上传的是文件。

3. 配置路由

最后,我们需要在路由中配置视图。

from django.urls import path
from myapp.views import MyView

urlpatterns = [
    path('my-view/', MyView.as_view()),
]
总结

在本文中,我们介绍了如何在序列化程序中处理文件上传的字段。需要注意的是,在视图中需要使用合适的解析器来解析请求体,同时需要添加合适的请求头来告诉服务器上传的是文件。