Dom*_*nic 6 django serialization file-upload django-rest-framework
我正在尝试让文件上传系统在 Django Rest Framework 中工作。
我要上传的文件是 .gpx 文件,它们是自定义 xml 文件。我不想将文件存储在数据库中,而是想从中提取信息,然后将其输入到我的模型中。
我有一个函数,它接受一个临时文件,然后提取信息,然后根据需要创建模型元素。我要做的是在文件上传并传递给这个函数之前对文件执行一些检查。
我该怎么做?
文件上传目前在文档中完成(见下文),这是一个通用的 APIView 和一个放置命令。这非常有效,我只想知道在上传之前检查此文件的有效性的最佳方法是什么。
视图.py
class FileUploadView(views.APIView):
parser_classes = (FileUploadParser, )
def put(self, request, filename, format=None):
up_file = request.data['file']
SaveGPXtoModel(up_file, request.user)
return Response(status=204)
Run Code Online (Sandbox Code Playgroud)
API 应该进行这些检查还是应该假设文件已经过验证?
在 Django 中,这些检查将由表单处理,我应该使用序列化程序来进行这些检查吗?
如果序列化程序是要走的路,那么有一个文件作为输入和各种数据点作为输出是否重要?
Duf*_*f59 10
您可以首先为您的文件编写序列化程序,它不必链接到模型:
class FileSerializer(serializers.Serializer):
file = serializers.FileField()
Run Code Online (Sandbox Code Playgroud)
但fileField不做任何具体检查。根据您需要检查的内容,添加自定义验证器并使用:
class FileSerializer(serializers.Serializer):
file = serializers.FileField(validators=[validate_file])
Run Code Online (Sandbox Code Playgroud)
有一个很好的例子,说明如何在此处编写基于类的文件验证器
然后在您的视图中使用您的序列化程序:
class FileUploadView(APIView):
parser_classes = (MultiPartParser, )
def post(self, request):
serializer = FileSerializer(data=request.data)
if not serializer.is_valid():
return Response(
data=serializer.errors,
status=status.HTTP_400_BAD_REQUEST
)
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11161 次 |
| 最近记录: |