【问题标题】:Using subdomains in django在 django 中使用子域
【发布时间】:2015-09-19 14:18:40
【问题描述】:

请告诉我是否可以(如果可以,如何)为每个用户子域的页面使用。例如,现在我有一个表单的 URL:http://hostname.com/user/1 我需要获取http://username.hostname.com/

【问题讨论】:

标签: python django python-2.7


【解决方案1】:

考虑使用django-hosts

来自文档:

# For example, if you own example.com but want to serve 
# specific content at api.example.com and beta.example.com, 
# add the following to a hosts.py file:

from django_hosts import patterns, host

host_patterns = patterns('path.to',
    host(r'api', 'api.urls', name='api'),
    host(r'beta', 'beta.urls', name='beta'),
)

【讨论】:

    【解决方案2】:

    根据您想要深入的程度,您有多种选择。

    1. 一种选择是在 Web 服务器级别处理路由。基本上,您将捕获 URL 的子域部分并将其重写到服务器中的不同位置。

      例如http://username1.local.host/signin 将被您的网络服务器捕获并在内部路由到诸如/username1/signin 之类的资源。最终用户将使用子域,但您的代码将处理 url 部分,而对于发生的事情并不明智。

      然后,您的 urls.py 将像处理任何正常请求一样处理此问题。

      url_pattern = [
         ...
         url(r'(?P<subdomain>[a-z]+)/sigin/$', 'view'),
      ]
      

      对于 Nginx,您需要查看“子域到子目录的重写”。

      对于您在问题中所说的内容,我会亲自使用此选项。虽然这种方法最初设置起来有点棘手(保持它直到它工作)。从长远来看,它会更容易维护和使用。

    2. 1234563 django代码))。 无需过多介绍,nginx 将捕获子域并将所有子域路由到 django。然后 Django 将在中间件级别处理子域。

    我个人会使用选项 1 供您使用。选项 2 是如果您想要不同域上的不同应用程序,例如:blog.local.hostsupport.local.host

    【讨论】:

    • 只是一个小警告,选项一将要求您将子域作为参数输入到每个视图中,并可能导致未使用变量的 pep8 警告(这是副本试图避免的)。跨度>
    • 只是另一个小警告:不支持选项 2,它们不会合并 github.com/tkaemming/django-subdomains/pull/67
    • Django Subdomains 似乎已被废弃,但有一个积极开发的 fork:abe312/django-subdomains,使用 pip install subdomains 安装它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2022-06-15
    • 2013-01-07
    • 2013-06-12
    • 1970-01-01
    • 2016-11-12
    • 2015-12-18
    相关资源
    最近更新 更多