gpt4 book ai didi

django - 序列化上传的文件数据Django Rest Framework

转载 作者:行者123 更新时间:2023-12-03 15:57:59 26 4
gpt4 key购买 nike

我正在尝试使文件上传系统在Django Rest Framework中运行。

我要上传的文件是.gpx文件,它们是自定义xml文件。我不想将文件存储在数据库中,而是想从文件中提取信息,然后将其输入到我的模型中。

我有一个函数,需要一个临时文件,然后提取信息,然后根据需要创建模型元素。我想要做的是在文件上传并传递给此功能之前对其进行一些检查。

我应该怎么做?

目前,文件上传已按照文档(参见下文)中的说明完成,该文档使用通用APIView和put命令。这非常完美,我只想知道最好的方法是在上传之前检查此文件的有效性。

views.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)

API应该执行这些检查,还是应该假设文件已经通过验证?

在Django中,这些检查将由表单处理,我应该使用序列化程序来进行这些检查吗?

如果要使用串行器,那么有一个文件作为输入,而有多个数据点作为输出,这有关系吗?

最佳答案

您可以从为文件编写序列化器开始,而不必将其链接到模型:

class FileSerializer(serializers.Serializer):
file = serializers.FileField()

但是 fileField不做任何特定的检查。根据您需要检查的内容,添加一个自定义验证器并使用:
class FileSerializer(serializers.Serializer):
file = serializers.FileField(validators=[validate_file])

有一个很好的示例,说明如何编写基于类的文件验证器 here

然后在您的 View 中使用序列化器:
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
)
...

关于django - 序列化上传的文件数据Django Rest Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44904299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com