【问题标题】:Django project on two domains - limiting access to urls/views两个域上的 Django 项目 - 限制对 urls/views 的访问
【发布时间】:2015-04-01 12:21:27
【问题描述】:

我正在开发 django 项目。 它利用多个小应用程序 - 其中一个用于常见事物(常见模型、表单等)。

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

corporatedomain.com 和 userportal.com

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

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

【问题讨论】:

    标签: python django django-views django-urls


    【解决方案1】:

    也许你可以看看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 变量。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我该怎么做? :)
      • 您是否有两个域的单一设置文件或对不同域使用不同的设置?
      • 目前我只有一个 settings.py 文件
      • 那么是时候拥有两个了 :-) 但是如果你真的想对两个域都使用单一设置,那么请阅读我的答案中的更新。
      • 好的,如果我想使用2个设置文件,我在哪里可以配置呢?我的意思是,我在哪里告诉服务器为某些域使用特定设置?
      猜你喜欢
      • 2016-05-01
      • 2011-12-31
      • 2012-05-19
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多