ssk*_*ssk 3 python django django-serializer django-rest-framework
我\xe2\x80\x99一直在开发一个需要文件上传的Django项目。我在使用 django-rest-framework 的应用程序设计中使用 API 方法。我创建了模型、APIView 和序列化器,但不幸的是,每次请求通过序列化器时,upload.data 都会返回 {\'file\': None}。如果我只使用 request.FILES[\'file\'] 它返回文件没有问题,但我想使用序列化数据。我在前端使用 dropzone js 上传文件。下面是我的代码。
\n\n超文本标记语言
\n\n{% extends \'base_profile.html\' %}\n{% load static %}\n{% block title %}File Import{% endblock %}\n{% block pagetitle %}File Import{% endblock %}\n{% block content %}\n<div class="widget">\n <div class="widget-heading clearfix">\n <h3 class="widget-title pull-left list-inline">CSV </h3>\n <button type="button" class="btn btn-primary pull-right"><i class="ti-upload mr-5"></i> Upload</button>\n </div>\n <div class="widget-body">\n <form id="type-dz" class="dropzone">{% csrf_token %}</form>\n </div>\n</div>\n\n{% endblock %}\n{% block js %}\n<script type="text/javascript">\n $("#type-dz").dropzone({\n url: "{% url \'api_import:file\' %}",\n paramName: "file",\n acceptedFiles: ".csv",\n maxFilesize: 2,\n maxThumbnailFilesize: .5,\n dictDefaultMessage: "<i class=\'icon-dz fa fa-file-text-o\'></i>Drop files here to upload"\n});\n</script>\n{% endblock %}\nRun Code Online (Sandbox Code Playgroud)\n\nurls.py
\n\nurlpatterns = [\n url(r\'^api/import/\', include(\'api.import_api.urls\', namespace="api_import")),\n]\nRun Code Online (Sandbox Code Playgroud)\n\napi/urls.py
\n\nurlpatterns = [\n url(r\'^file/\', FileImport.as_view(), name=\'file\'),\n]\nRun Code Online (Sandbox Code Playgroud)\n\n视图.py
\n\nclass FileImport(APIView):\n parser_classes = (MultiPartParser, FormParser,)\n serializer = ImportSerializer\n\n def post(self, request, format=None):\n upload = self.serializer(data=request.FILES)\n\n if upload.is_valid():\n file = FileUpload(file=upload.data[\'file\'], uploaded_by=request.user.profile)\n file.save()\n return Response({\'success\': \'Imported successfully\'})\n else:\n return Response(upload.errors, status=400)\nRun Code Online (Sandbox Code Playgroud)\n\n序列化器.py
\n\nclass ImportSerializer(serializers.Serializer):\n file = serializers.FileField()\nRun Code Online (Sandbox Code Playgroud)\n\n模型.py
\n\nclass FileUpload(models.Model):\n file = models.FileField(upload_to=\'files/%Y/%m/%d\')\n date_uploaded = models.DateTimeField(auto_now=True)\n uploaded_by = models.ForeignKey(\'UserProfile\', blank=True, null=True)\nRun Code Online (Sandbox Code Playgroud)\n
了解您如何上传文件会很有帮助。如果您使用 multipart/form-data 请求并正确提供“file”的 json,最有可能的是该文件由于某种原因未能通过验证。
如果可以的话,从可浏览的 api 进行测试也可能会有所帮助(因为这可以保证您的请求没有任何问题)。
编辑:
问题是validated_data应该使用该字段而不是 data调用后的字段is_valid()。
| 归档时间: |
|
| 查看次数: |
5263 次 |
| 最近记录: |