多租户django 1.8设置(使用django-tenants架构)
requirements.txt:
Django==1.8.16
django-allauth==0.27.0
django-tenant-schemas==1.6.4
django-avatar==3.1.0
...
保持租户尽可能隔离,所以只保留这些APP(注意allauth不在这里,每个租户都有自己的auth_user表):
SHARED_APPS = (
'tenant_schemas', # mandatory
'customers',
'django.contrib.contenttypes',
)
服务头像(来自/媒体网址)现在构成一个问题,因为头像网址不知道租户。
提供头像/media/avatars/<user ID>/userx-pic.jpg
但为避免冲突,应考虑租户。目标是:
/media/avatars/<tenant>/<user ID>/userx-pic.jpg
如何配置? 我正在考虑使用RedirectView(https://docs.djangoproject.com/en/1.10/ref/class-based-views/base/#redirectview)
...但是化身也需要存储在正确的位置。 所以问题是双重的:
答案 0 :(得分:1)
您可以尝试将媒体文件保存到特定的租户文件夹,方法是在文件字段中指定upload_to并照常提供。例如:
from django.contrib.auth.models import User
from django.db import connection
def get_tenant_specific_upload_folder(instance, filename):
upload_folder = 'avatars/{0}/{1}/{2}'.format(
connection.tenant,
instance.user.pk,
filename
)
return upload_folder
class Avatar(models.Model):
user = models.ForeignKey(User)
file = models.FileField(upload_to=get_tenant_specific_upload_folder)
P.S。仅限于所有者限制头像访问权限,请查看this article