Django在两个域上进行项目 - 限制对URL /视图的访问

时间:2015-04-01 12:21:27

标签: python django django-views django-urls

我正在研究django项目。 它使用多个小应用程序 - 其中一个用于常见事物(常见模型,表格等)。

我想将整个项目分为两个域,例如:

corporatedomain.com和userportal.com

我希望corporatedomain.com使用不同的网址,对于userportal.com也是如此。

这可能吗?如果是这样,我该怎么做?我该如何配置我的网址?

2 个答案:

答案 0 :(得分:0)

无论如何,您将拥有单独的设置文件,因此请为每个域定义不同的ROOT_URLCONF

更新:如果您不想使用不同的设置,则必须编写中间件,该中间件将使用HTTP_HOST标头更改request.urlconf属性。这是example of such middleware

答案 1 :(得分:0)

也许您可以查看Django Site Framework。来自Django官方文档:

  

Django附带了一个可选的“站点”框架。它是将对象和功能与特定网站相关联的钩子,它是Django支持的站点的域名和“详细”名称的保留位置。

您可以使用此方法

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.contrib.sites.models import Site

current_site = Site.objects.get_current()

if 'userportal' in current_site.domain:
    urlpatterns = patterns('',
        url(r'', include('userapp.urls')),
        url(r'^admin/', include(admin.site.urls)),
    )
else:
    urlpatterns = patterns('',
        url(r'', include('corporateapp.urls')),
        url(r'^admin/', include(admin.site.urls)),
    )

您应该根据需要向站点表添加任意数量的条目,并将INSTALLED_APP中的django.contrib.sites应用程序和SITE_ID变量添加到使用正确站点ID绑定的设置中。如果没有可用的域信息,请使用SITE_ID = 1(例如,在开发会话中)。有关此post)中SITE_ID的更多信息。 在我的设置中,我使用以下方法:

SITE_ID = os.environ.get('SITE_ID', 1)

我在每个人的活动中都设置了正确的SITE_ID变量。