【问题标题】:Serving Django admin site on subdomain在子域上服务 Django 管理站点
【发布时间】:2014-11-18 04:45:15
【问题描述】:

我有一个运行 Django、uWSGI 和 Nginx 的项目。目前我使用默认的 Django 管理站点,服务于example.com/admin。我想更改此设置,以便管理站点仅在 admin.example.com 可用。

最好的方法是什么?

我曾考虑过启动一个全新的 Django 项目,在 admin.example.com 上提供服务,但使用与运行 example.com 的项目相同的数据库设置,但我希望有更优雅的东西,因为这将涉及复制项目之间的许多设置和应用程序。基本上,两者之间的唯一区别是一个会安装管理站点和 URL 模式,而一个不会。

(我这样做的原因最终是想使用google auth proxy 之类的东西来保护管理站点,但让非管理员登录通过正常的身份验证后端。看起来我可以通过指定 Django 使用 HTTP Basic 来做到这一点为admin.example.com 进行身份验证,但坚持使用example.com 的默认后端。)

【问题讨论】:

    标签: django nginx django-admin uwsgi django-authentication


    【解决方案1】:

    只需创建一个包含原始设置并定义特殊ROOT_URLCONF 设置的新设置文件。现在您只需在该管理子域上使用 DJANGO_SETTINGS_MODULE 部署您的应用程序。

    例如:

    settings_admin.py

    from settings import *
    ROOT_URLCONF = 'urls_admin'
    

    urls_admin.py

    from django.conf.urls import patterns, include, url
    from django.contrib import admin
    urlpatterns = patterns('',
        url(r'', include(admin.site.urls)),
    )
    

    【讨论】:

    • 谢谢!我必须将admin.autodiscover() 添加到您的urls_admin.py。除此之外,此解决方案有效。
    • Django 1.7 不再需要 admin.autodiscover()。对于早期版本,您仍然需要admin.autodiscover()
    • 我没有创建新的设置文件,而是使用了环境变量,例如ROOT_URLCONF = os.environ.get("DJANGO_ROOT_URLCONF")
    猜你喜欢
    • 2019-02-26
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2011-09-23
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多