2016-12-16 59 views
0

客户端UI可以发送单个文件或多个文件。 当我的后端接收到它时,我想检查它是单个还是多个文件。 如果它是单身,我只是直接通过它(这是工作已经)。 但是,如果它是多个文件,我想先压缩它,然后传递它。在Django Rest Framework中,后台如何检查文件上传是否为多个?

我不知道Django Rest Framework在哪里进行验证。 我想无论是在串行以及在浏览

class CTDWorkSerializer(serializers.ModelSerializer): 


    class Meta: 
    model = CTDWork 
    fields = ('wo_id', 'owner', 'created', 
      'purpose', 'work_type', 
      'reviewer', 'status', 'upload', 'download') 
    read_only_fields = ('download',) 

    def update(self, validated_data): 
    print "foo" 
    return validated_data 

和:

class CTDWorkDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = CTDWork.objects.all() 
    serializer_class = CTDWorkSerializer 
    permission_classes = (permissions.IsAuthenticated, IsCurrentUserOrAdmin) 
    parser_classes = (FormParser, MultiPartParser,) 

    def perform_update(self,serializer,format=None): 
    print "bar" 

我想在视图中使用request.FILES.getlist(“文件”),但服务器始终在它能打印我的日志之前拒绝请求。 任何想法,为什么发生? Django何时何地验证并拒绝http请求?由于

+0

尝试重写你的观点的'后()'(或者你使用任何HTTP动词)方法,看看你的序列化有' self.context ['request']'available – Tony

+0

Tony,如何覆盖我的视图的put()? – ipr

回答

0

啊感谢托尼,我可以压倒一切的打印出来放在

class CTDWorkDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = CTDWork.objects.all() 
    serializer_class = CTDWorkSerializer 
    permission_classes = (permissions.IsAuthenticated, IsCurrentUserOrAdmin) 
    parser_classes = (FormParser, MultiPartParser,) 

    def put(self, request, *args, **kwargs): 
    print request.data.get('upload') 

    return self.update(request, *args, **kwargs) 
+0

当前,当我试图打印request.data时,它将上传的文件显示为“unicode”:u'upload':[u'[object FileList]'], – ipr