使用Django rest框架上传多个文件而不使用表单

时间:2018-09-18 15:26:18

标签: django django-forms django-rest-framework django-views

我正在尝试从邮递员中将多个文件发布到我的django应用程序中。我没有使用Forms,并且我的应用程序没有UI方面。这是我的视图类。

class FileUploader(APIView):
    '''
    Rest API for FileUploader
    '''
    permission_classes = (AllowAny,)
    parser_classes = (MultiPartParser, )

    @csrf_exempt
    def post(self, request):
        retval = Response(request.data, status=status.HTTP_201_CREATED)
        logger.info('New post with the following data: {}'.format(request.data))

这样,“ TypeError: init ()缺少3个必需的位置参数:'META','input_data'和'upload_handlers'” 如果我使用FormView,则Post具有三个键,两个代表文件,最后一个是字符串。在调试期间,我的请求没有字段Data,并且FILES为空,并且POST没有任何信息。任何指针将不胜感激。如果有帮助,我可以上传更多。

这不是重复的,因为他能够上载多个文件,而我没有上载任何文件。我正在努力弄清楚如何在请求中查找文件,并且由于它们不存在如何设置视图(而不是序列化)以接收多个文件。

enter image description here

2 个答案:

答案 0 :(得分:1)

将视图类写为

from rest_framework.views import APIView
from rest_framework.response import Response


class FileUploader(APIView):
    '''
    Rest API for FileUploader
    '''

    permission_classes = (AllowAny,)

    def post(self, request, *args, **kwargs):
        files_list = request.FILES
        data = request.data
        return Response(data={"files": "{} files uploaded".format(len(files_list)),
                              "data": "{} data included".format(len(data))})

并使用POSTMAN中的 form-data 发送 Screenshot

答案 1 :(得分:0)

将上面的代码更改为如下所示,并在请求中包含标头'Content-Type': 'multipart/form-data'

class FileUploader(APIView):
    '''
    Rest API for FileUploader
    '''
    permission_classes = (AllowAny,)
    parser_classes = (MultiPartParser, )

    @csrf_exempt
    def post(self, request, *args, **kwargs):
        print(request.data)
        return Response({"message": "success"})