📅  最后修改于: 2023-12-03 15:39:28.123000             🧑  作者: Mango
在Django REST Framework中,我们可以使用serializers
来序列化和反序列化数据。但是,有些情况下我们需要保存文件,比如用户头像或者文档、音视频等文件。那么该如何在序列化程序中处理文件上传的字段呢?
首先,我们需要定义一个序列化器,其中包含一个文件上传字段。可以使用DRF自带的FileField
,也可以使用第三方包drf-extra-fields
的Base64ImageField
或Base64FileField
。
使用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()
接下来,我们需要在视图中处理文件上传。可以使用DRF自带的FileUploadParser
,也可以使用第三方包django-rest-framework-fileupload
的MultipartJsonParser
。这里我们以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
来告诉服务器上传的是文件。
最后,我们需要在路由中配置视图。
from django.urls import path
from myapp.views import MyView
urlpatterns = [
path('my-view/', MyView.as_view()),
]
在本文中,我们介绍了如何在序列化程序中处理文件上传的字段。需要注意的是,在视图中需要使用合适的解析器来解析请求体,同时需要添加合适的请求头来告诉服务器上传的是文件。