我解决了这个问题,ModelViewSet和ModelSerializer
urlpatterns = patterns('',
url(r'^imageUpload', views.FileUploadView.as_view())
卷曲请求。希望这会帮助社区。
我也试图在序列化程序本身而不是视图中进行验证和Object-> JSON(反之亦然)登录。
让我们通过实例来了解它。
说,我想创建FileUploader API。它将在数据库中存储诸如id,file_path,file_name,size,owner等字段。请参见下面示例模型:
class FileUploader(models.Model):
file = models.FileField()
name = models.CharField(max_length=100) #name is filename without extension
version = models.IntegerField(default=0)
upload_date = models.DateTimeField(auto_now=True, db_index=True)
owner = models.ForeignKey('auth.User', related_name='uploaded_files')
size = models.IntegerField(default=0)
现在,对于API的,这是我想要的东西:
GET: 当我火GET终点,我想每一个上传文件的所有上述领域。
POST: 但是,对于用户创建/上传文件,为什么她必须担心通过所有这些领域。她可以上传文件,然后,我想,序列化程序可以从上传的文件中获得剩余的字段。
Searilizer: 问题:我下面串行创建为我的目的。但不确定是否有正确的实施方式。
class FileUploaderSerializer(serializers.ModelSerializer):
#overwrite = serializers.BooleanField()
class Meta:
model = FileUploader
fields = ('file','name','version','upload_date', 'size')
read_only_fields = ('name','version','owner','upload_date', 'size')
def validate(self, validated_data):
validated_data['owner'] = self.context['request'].user
validated_data['name'] = os.path.splitext(validated_data['file'].name)[0]
validated_data['size'] = validated_data['file'].size
#other validation logic
return validated_data
def create(self, validated_data):
return FileUploader.objects.create(**validated_data)
视图集以供参考:
class FileUploaderViewSet(viewsets.ModelViewSet):
serializer_class = FileUploaderSerializer
parser_classes = (MultiPartParser, FormParser,)
# overriding default query set
queryset = LayerFile.objects.all()
def get_queryset(self, *args, **kwargs):
qs = super(FileUploaderViewSet, self).get_queryset(*args, **kwargs)
qs = qs.filter(owner=self.request.user)
return qs
哎,你知道我怎么能解决http://stackoverflow.com/questions/26673572/django-rest-framework-upload-file-to-a-method? – psychok7
@pleasedontbelong为什么使用PUT方法而不是POST? – RTan
@Rego check this http://stackoverflow.com/a/14402607/361427 :) – pleasedontbelong