我用ImageField创建了一个简单的模型,我想用django-rest-framework+django-rest-swagger创建一个api视图,它是文档化的,并且能够上传文件。
以下是我得到的:
models.py
from django.utils import timezone
from django.db import models
class MyModel(models.Model):
source = models.ImageField(upload_to=u'/photos')
is_active = models.BooleanField(default=False)
created_at = models.DateTimeField(default=timezone.now)
def __unicode__(self):
return u"photo {0}".format(self.source.url)
from .models import MyModel
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = [
'id',
'source',
'created_at',
]
views.py
from rest_framework import generics
from .serializer import MyModelSerializer
class MyModelView(generics.CreateAPIView):
serializer_class = MyModelSerializer
parser_classes = (FileUploadParser, )
def post(self, *args, **kwargs):
"""
Create a MyModel
---
parameters:
- name: source
description: file
required: True
type: file
responseMessages:
- code: 201
message: Created
"""
return super(MyModelView, self).post(self, *args, **kwargs)
urls.py
from weddings.api.views import MyModelView
urlpatterns = patterns(
'',
url(r'^/api/mymodel/$', MyModelView.as_view()),
)
我阅读了django-rest-framework中的这部分文档:
我正在使用django==1.8.8
、djangoRestFramework==3.3.2
和django-rest-swagger==0.3.4
。
我通过对你的代码做了几个修改来完成这个工作。
首先,在models.py
中,将imagefield
名称更改为file
并使用相对路径上载文件夹。当您将文件作为二进制流上载时,它可以在request.data
字典中的文件键(request.data.get('file')
)下使用,因此最干净的选项是将它映射到具有相同名称的model字段。
from django.utils import timezone
from django.db import models
class MyModel(models.Model):
file = models.ImageField(upload_to=u'photos')
is_active = models.BooleanField(default=False)
created_at = models.DateTimeField(default=timezone.now)
def __unicode__(self):
return u"photo {0}".format(self.file.url)
在serializer.py
中,将源字段重命名为file:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('id', 'file', 'created_at')
在views.py中,不要调用super,而是调用create():
from rest_framework import generics
from rest_framework.parsers import FileUploadParser
from .serializer import MyModelSerializer
class MyModelView(generics.CreateAPIView):
serializer_class = MyModelSerializer
parser_classes = (FileUploadParser,)
def post(self, request, *args, **kwargs):
"""
Create a MyModel
---
parameters:
- name: file
description: file
required: True
type: file
responseMessages:
- code: 201
message: Created
"""
return self.create(request, *args, **kwargs)
我已经使用邮差Chrome扩展来测试这一点。我已将图像上载为二进制文件,并手动设置了两个头:
Content-Disposition: attachment; filename=upload.jpg
Content-Type: */*
不重复造轮子,是开发人员共同的哲学道理。在使用 Python 开发 RESTful Web API 时,就有一个大名鼎鼎的轮子 Django REST framework,这一节我们就来简单了解一下 Django REST framework。 Django REST framework 一听就是和著名的 Python web 开发框架 Django 有很大的关系,这个框架是由 Tom Chris
问题内容: 为什么要使用一个来公开Django应用程序的API? 问题答案: TastyPie 正如Torsten所指出的那样,使用与令人敬畏的django-haystack相同的偷偷摸摸的东西写的东西不会出错。从我在邮件列表中看到的内容来看,Daniel Lindsey等人非常有帮助,Tastypie稳定,全面并且有据可查 出色的表现为你提供了一套明智的默认行为,并使使用这种样式的API的构建变
问题内容: 我在通过Jquery / ajax POST提交带有图像字段的表单(Django表单)时遇到一些问题。即时通讯在imagefield上返回“ Field required”验证错误。 我一直尝试通过添加formData来尝试不同的解决方案,但到目前为止没有任何结果。我在正确的轨道上吗?请指出正确的方向。谢谢! 更新:我可以将imagefield设置为required = false,但
问题内容: 我刚刚将应用程序升级到1.7(实际上仍在尝试)。 这是我在models.py中拥有的: 当我尝试时,它抛出: 问题答案: 我不确定是否可以回答自己的问题,但我只是想出了(我认为)。 根据此错误报告,我编辑了代码: 然后,在字段定义中: 这对我有用。
问题内容: 想象一下这个非常简单的模型: 我想从图像URL创建照片(即,不是在django管理站点中手动创建)。 我认为我需要做这样的事情: 如果不告诉我,我希望我已经很好地解释了问题。 谢谢 :) 编辑: 这可能有效,但我不知道如何转换为Django文件: 问题答案: 我刚刚针对同一问题创建了http://www.djangosnippets.org/snippets/1890/。该代码与上面的
问题内容: 我的模型与现场 函数根据图像文件名命名。 但是,当用户更新头像时,新的头像名称与旧的头像名称一致,并且Django在文件名中添加后缀。 有办法覆盖文件而不是创建新文件吗? 问题答案: 是的,这对我也很重要。这就是我所做的。 模型: 还定义在中: 在另一个文件中,: 显然,这些是这里的示例值,但是总体而言,这对我来说效果很好,并且根据需要进行修改应该非常简单。
问题内容: 我的Django应用中有以下模型: 我已将MEDIA_ROOT设置为Apache网络根目录中的/ hmedia /目录,并将MEDIA_URL设置为’http://localhost/hmedia/'。这似乎奏效了-我已通过Django管理网站成功上传了几张图片,并且可以通过查看这些图片http://localhost/hmedia/images/[filename]。并且Django
问题内容: 好的,我已经尝试了几乎所有内容,但无法正常工作。 我有一个上面带有ImageField的Django模型 我有通过HTTP下载图像的代码(已测试并且可以工作) 图像直接保存到“ upload_to”文件夹中(upload_to是在ImageField上设置的文件夹) 我需要做的就是将已经存在的图像文件路径与ImageField相关联 我已经用6种不同的方式编写了这段代码。 我遇到的问题