gpt4 book ai didi

python - Django Multi-Tenancy

转载 作者:太空宇宙 更新时间:2023-11-04 10:24:53 24 4
gpt4 key购买 nike

我;博士:有没有办法覆盖 reverse 的默认行为? ?

在我的 django 项目中,我有很多 url,例如

 url(r'^\w+/company/', include("company.urls", namespace="company")),

允许这样的 url

.../companyA/company/
.../companyB/company/

这样我就可以使用自定义中间件来修改请求,以根据使用我网站的公司包含一些特定的详细信息

除了 django 试图用 reverse{% url .. %}...

破译完整路径外,这一切都很好

它似乎返回 /x/company/ 作为正则表达式的默认匹配。因为 django.utils.regex_helper 方法 next_char 有一个转义映射 \w 映射到 x

url标签我已经可以了override用正确的公司名称替换​​ /x/ 我想知道我是否可以做类似的事情来以相同的方式覆盖 reverse 或任何其他我可以做些什么来解决这个问题?

以前,我在用

url(r'^(?P<company_name>\w+)/company/', include("company.urls", namespace="company"))

但这意味着我必须在每个 View 中包含一个参数

def view(request, company_name):
...

以及将它包含在我试图避免的所有其他 View 调用中(即使用 {% url %})。

最佳答案

为了便于使用,Django 将编译后的程序打包为 page full of every possible existing django package可以做到这一点。不过下面是我自己的简单实现


我修改了我的 nginx 代理配置以使用以下内容

server_name ~(?<short_url>\w+)\.domainurl\.com$;

... stuff related to static files here
location / {
proxy_set_header X-CustomUrl $short_url;
.... other proxy settings
}

这样做是在请求 header 中创建一个变量,然后可以在 Django 中使用该变量。然后我在自定义中间件中使用这个变量来扩展请求,并引用允许它在任何地方使用的模型。

class CompanyMiddleware(object):    
def process_request(self, request):
if settings.DEBUG:
request.company = CompanyClass.objects.get(id=1)
return None

short_url = request.META.get("HTTP_X_CUSTOMURL")

try:
company = CompanyClass.objects.get(short_url=short_url)
except Model.DoesNotExist:
return HttpResponseBadRequest('Company not found')

request.company = company

return None

例子:

www.companya.domainurl.com   # short_url is companya
test.domainurl.com # short_url is test

要在模板中使用它,必须将上下文处理器添加到 settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'django.core.context_processors.request' # This one in particular
)

关于python - Django Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29938338/

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