django-tenant-schemas&替身

时间:2017-01-08 06:36:25

标签: python django multi-tenant avatar

多租户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

...但是化身也需要存储在正确的位置。 所以问题是双重的:

  1. 如何让头像处于正确的感知位置?
  2. 如何正确使用它们?

1 个答案:

答案 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