Django Rest Framework上载文件URL

时间:2017-05-15 18:50:20

标签: django django-rest-framework

Django rest框架自动生成上传文件的URL。但是,它自动生成的URL实际上并不指向文件的存储位置。例如,我将文件上传到名为example.txt的api,这就是上传后数据库中的对象:

{
    name: "John Doe",
    bio: "localhost:8000/api/users/static/example.txt"
}

我的静态目录位于根目录中,因此文件实际存在,可以在localhost:8000/static/example.txt访问。自动生成的url返回404.如何将自动生成的URL覆盖为正确的URL?

这是我的模型的样子:

class User(models.Model):
   name = models.CharField(primary_key=True, max_length=30)
   bio = models.FileField(null=True, blank=True, upload_to='static')

以下是序列化程序的样子:

class UserSerializer(serializers.ModelSerializer):
   class Meta:
     model = User
     fields = ("name", "bio")

1 个答案:

答案 0 :(得分:1)

将MEDIA_URL和MEDIA_ROOT定义到settings.py

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

并添加到您的urls.py

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

MEDIA_ROOT是保存文件的绝对路径。 MEDIA_URL是处理MEDIA_ROOT提供的媒体的网址。我应该将upload_at=static更改为upload_to=bio/files,因为静态路径仅适用于.css,.js和图像文件等静态文件。