アップロードする
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: ユーザーがファイルを作成/アップロードするには、なぜこれらのフィールドをすべて渡すか心配する必要があります。彼女はファイルをアップロードするだけで、シリアライザはアップロードされたFILEから残りのフィールドを取得できると思います。
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
POSTの代わりにここでPUTメソッドが使用されているのはなぜですか? – RTan
@Regoこれをチェックしてくださいhttp://stackoverflow.com/a/14402607/361427 :) – pleasedontbelong