python Django子域中间件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python Django子域中间件相关的知识,希望对你有一定的参考价值。

from django.db import models


class City(models.Mode):
    title = models.CharField(max_length=50)
    subdomain = models.CharField(max_length=10)
class SubdomainMiddleware(MiddlewareMixin):
    DEFAULT_SUBDOMAIN = 'msk'
    
    def process_request(self, request):
        subdomain, _ = self.split_subdomain(request.META['HTTP_HOST'])

        if subdomain:
            request.city = get_object_or_404(City, subdomain=subdomain)
        else:
            request.city = City.objects.get(subdomain=self.DEFAULT_SUBDOMAIN)

    def split_subdomain(self, host):
        host = request.META['HTTP_HOST']
        if '127.0.0.1' in host:
            return None, host.split('.')

        bits = host.split('.')
        if len(bits) <= 2:
            sub, other = None, bits
        else:
            sub, other = bits[0], bits[1:]

        if sub in escape:
            other = [sub] + other
            sub = None

        return sub, other

以上是关于python Django子域中间件的主要内容,如果未能解决你的问题,请参考以下文章

301 在 Django 中重定向 www 子域

Apache2 使用 Django 项目设置带有子域的虚拟主机

Django:在中间件中用 request.urlconf 覆盖 ROOT_URLCONF

python-- Django 中间件缓存信号

使用带有子域的“auth”中间件

在多个子域上共享 Django 会话的缺点