gpt4 book ai didi

python - 使用 URL 映射而不是域映射的 Multi-Tenancy Django 应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:58 25 4
gpt4 key购买 nike

在 django 中,大多数 Multi-Tenancy 实现(模块)都是将主机映射到 View 。

例如映射主机/URL -> 使用 postgress 模式的 django View :

customer1.myapp.com/view1/arg1 -> myapp.view1(arg1)  using schema 'customer1'
customer2.myapp.com/view1/arg1 -> myapp.view1(arg1) using schema 'customer2'
customer3.myapp.com/view1/arg1 -> myapp.view1(arg1) using schema 'customer3'

由于我的 PaaS (Pythonanywhere) 不支持通配符域 (*.myapp.com),我正在尝试使用 URL 映射设置 Multi-Tenancy 应用程序:

例如映射 URL -> Django View :

myapp.com/customer1/view1/arg1 ->  myapp.view1(arg1) passing implicit parameter tenant='customer1'
myapp.com/customer2/view1/arg1 -> myapp.view1(arg1) passing implicit parameter tenant='customer2'
myapp.com/customer3/view1/arg1 -> myapp.view1(arg1) passing implicit parameter tenant='customer3'

这里一些中间件应该负责将租户参数传递给 View 并过滤适用于所选租户的对象的查询结果。例如https://django-tenant-schemas.readthedocs.io/en/latest/

但这里的问题是:对于 URL 映射而不是主机映射,如何做到这一点 - 哪个包可以处理这个?

注意:django-multitenants 提到“支持 url 模式以及子域”,但不清楚如何做到这一点...... https://pypi.python.org/pypi/django-multitenants

最佳答案

通过以下方式在 Pythonanywhere 支持的大力帮助下解决了问题:

  1. 为每个租户创建一个新的网络应用程序(是的,这需要花费 2 美元/月)
  2. 将新域映射到新的 webapp(检查 pythonanywhere web 选项卡“DNS setup”)
  3. 让每个 webapp 使用相同的代码和相同的 postgres 数据库(复制静态和媒体 patsh 和 wsgi 脚本)
  4. 在 postgres 数据库中创建新模式
  5. 剩下的很简单:按照 django-tenant-schemas 的文档进行操作

大致:

  • 同步新架构:./manage.py migrate_schemas --schema=my-new-tenant
  • 将新租户添加到公共(public)租户“customers_client”表
  • 如果您的用户模型不在公共(public)表中:为该租户创建新的管理员用户:./manage.py createsuperuser --schema=my-new-tenant

关于python - 使用 URL 映射而不是域映射的 Multi-Tenancy Django 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com