Django Rest从FileField url获取文件

时间:2015-12-05 02:57:38

标签: python django rest django-views django-rest-framework

我创建了一个包含FileField的django rest模型。

 media = models.FileField(upload_to='media/%Y/%m/%d/', null=True, blank=True)

我还实现了序列化器和ListCreateApiView。在那里,我可以上传文件。在POST请求休息服务器上传文件夹中的文件并返回我的URL。但是,在获取请求时,服务器返回带有url的json内容。如果我使用url获取请求,服务器将回复 Page Not Found 。如何使用django rest下载上传的文件?我是否必须为相同的视图创建单独的视图?如果是这样,怎么办?

修改

生成的网址是

http://localhost:8000/message/media/2015/12/06/aa_35EXQ7H.svg

1 个答案:

答案 0 :(得分:4)

您必须在MEDIA_ROOT中定义MEDIA_URLMEDIA_URL并注册urlpatterns,以允许Django服务器提供这些文件。

请按照以下步骤操作:

settings.py档案:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media_root")

将其附加到主urls.py文件中以提供媒体文件:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

此外,您不必在media属性中再次添加upload_to,因为它位于MEDIA_URL的前面,然后网址将为/media/media/

这是一个正确的例子:

media = models.FileField(upload_to='message/%Y/%m/%d/', null=True, blank=True)

并且媒体的网址将是:

http://localhost:8000/media/message/2015/12/06/aa_35EXQ7H.svg