我有一个包含图像场的模型。在
from django.db import models
from django.contrib.auth.models import User
class Customer(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=127)
logo = models.ImageField(upload_to='customer/logo', null=True, blank=True)
def __str__(self):
return self.name
在我看来,我从指定的url下载图像并将其存储在image字段中。对于测试,我使用测试用户作为外键。在
^{pr2}$图像将按预期上载到customer/logo/test.png
。现在,如何在前端显示这些图像?我可以将它们保存到静态文件目录中,但只有相关用户才能访问它。在
(顺便说一下,Django管理接口显示有一个为Customer
对象上载的文件。但它链接到http://localhost:8000/admin/customer/customer/20/customer/logo/test.png
,这是一个错误的位置,并导致一个找不到的页面。)
FileField
和ImageField
的文件是相对于settings.MEDIA_ROOT
上载的,并且应该可以通过附加到settings.MEDIA_URL
的相同相对文件名进行访问。这就是你的管理接口指向错误的url的原因。出于安全原因,它们应该与STATIC_ROOT
和STATIC_URL
不同,否则Django将引发一个ImproperlyConfiguredError
。在这将不会阻止用户访问他们不应该看到的文件,如果他们知道或能猜到网址。为此,您需要通过Django来提供这些私有文件,而不是您选择的web服务器。基本上,您需要在web根目录下指定一个私有目录,如果用户有权限查看该文件,则需要加载这些文件。E、 g.:
在你看来,你必须提供这个文件。我当前项目中的一个自定义应用程序使用以下函数发送静态文件:
^{pr2}$然后在视图中使用
send_file(customer.logo)
。在Django>;=1.5应该使用新的}。在
StreamingHttpResponse
,而不是{相关问题 更多 >
编程相关推荐