Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django rest框架中打开上传的文件?_Django_Django Rest Framework - Fatal编程技术网

如何在django rest框架中打开上传的文件?

如何在django rest框架中打开上传的文件?,django,django-rest-framework,Django,Django Rest Framework,我试图在django rest框架上编写一个库应用程序。 我有两种模型:文件和书籍: class File(models.Model): file = models.FileField(upload_to="books//%Y/%m/") class Book(models.Model): filename = models.CharField(max_length=100) title = models.CharField(max_length=200)

我试图在django rest框架上编写一个库应用程序。 我有两种模型:文件和书籍:

class File(models.Model):
file = models.FileField(upload_to="books//%Y/%m/")


class Book(models.Model):
    filename = models.CharField(max_length=100)
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    year = models.IntegerField()
    path = models.TextField()
    isbn = models.CharField(max_length=100)
    tags = models.TextField(max_length=200)
    last_access = models.BinaryField()
    cover_image = models.BinaryField()
    upload_date = models.DateTimeField(auto_now=True, db_index=True)
    owner = models.ForeignKey('auth.User', related_name='uploaded_files', on_delete=models.CASCADE)
    size = models.IntegerField(default=0)

    def __str__(self):
        return self.author + ' - ' + self.title
序列化程序和视图

class FileSerializer(serializers.ModelSerializer):
    class Meta:
        model = File
        fields = "__all__"

class FileViewSet(viewsets.ModelViewSet):
    queryset = File.objects.all()
    serializer_class = FileSerializer
    permission_classes = [permissions.IsAuthenticated]
如何在ModelViewSet中打开上载的文件?或者我必须使用通用APIView来覆盖put/post操作以满足我的需要?

很简单

class AddFile(APIView):

    parser_classes = (MultiPartParser, FormParser)

    def post(self, request, *args, **kwargs):
        file_serializer = FileSerializer(data=request.data)
        if file_serializer.is_valid():
            file_serializer.save()
            file_path = media_root + file_serializer.data['file']
            with open(file_path, 'r') as f:
                # do something with file
            return Response(file_serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
媒体根目录从settings.Media\u根目录获取并修剪