在django中使用子域

时间:2015-07-02 07:22:50

标签: python django python-2.7

请告诉我是否有可能(如果是这样,如何)用于每个用户子域的页面。例如,现在我有一个表单的网址:http://hostname.com/user/1我需要http://username.hostname.com/

2 个答案:

答案 0 :(得分:14)

根据你想要的深度,你有很多选择。

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

    例如,http://username1.local.host/signin将由您的网络服务器捕获,并在内部路由到/username1/signin等资源。最终用户将是子域名,但您的代码将处理网址部分,而不是更明智的事情。

    您的urls.py将像任何正常请求一样处理此事。

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

    对于Nginx,您需要查看&#34;子域名到子目录重写&#34;。

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

  2. 另一种选择是使用Django Subdomains这样的包来处理django级别的子域名(过去我曾使用过这个版本,并认为它是我的首选选项(在处理方面) django代码中的子域名))。 没有太多细节,nginx将捕获子域并将其全部路由到django。然后Django将处理中间件级别的子域。

  3. 就我个人而言,我会使用选项1。选项2是您希望在不同的域上使用不同的应用,例如:blog.local.hostsupport.local.host

答案 1 :(得分:2)

考虑使用 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'),
)