Python 如何禁用Django';在一个已部署的项目中管理,但保留它以供本地开发?
我目前正在一个Django项目中工作,我需要访问该项目的管理区域进行本地开发,但希望在已部署的站点中禁用它(出于安全原因等) 如何通过编程实现这一点(即使用Python 如何禁用Django';在一个已部署的项目中管理,但保留它以供本地开发?,python,django,Python,Django,我目前正在一个Django项目中工作,我需要访问该项目的管理区域进行本地开发,但希望在已部署的站点中禁用它(出于安全原因等) 如何通过编程实现这一点(即使用settings.py) 非常感谢。首先,建立一个方案,使生产服务器的设置与开发服务器的设置不同。一个简单的方法是使用一个源代码管理忽略的local_settings.py文件,但是有很多更奇特的方法 然后,在settings.py文件中,放入: ADMIN_ENABLED = True ADMIN_ENABLED = False 在仅限
settings.py
)
非常感谢。首先,建立一个方案,使生产服务器的设置与开发服务器的设置不同。一个简单的方法是使用一个源代码管理忽略的local_settings.py文件,但是有很多更奇特的方法 然后,在settings.py文件中,放入:
ADMIN_ENABLED = True
ADMIN_ENABLED = False
在仅限生产的设置文件中,输入:
ADMIN_ENABLED = True
ADMIN_ENABLED = False
然后在URL.py中:
if settings.ADMIN_ENABLED:
urlpatterns += patterns('',
(r'^admin/(.*)', include(admin.site.urls)),
# ..maybe other stuff you want to be dev-only, etc...
)
扩展@NedBatchelder
的答案,您可能希望使用适当的if语句,如下所示:
if settings.ADMIN_ENABLED is True:
...
并从已安装的应用程序=[…]
中删除'django.contrib.admin'
,并使用相同的条件:
if settings.ADMIN_ENABLED is True:
INSTALLED_APPS.append('django.contrib.admin')
这样就不会加载模块,例如,collectstatic
不会复制仅在管理中使用的不必要的静态文件(字体、图像、css、js)。@madneon的答案非常好,但需要更新和少量更正,不幸的是,建议的编辑队列已满
对于第一部分,由于它意味着使用@Ned Batchelder的答案,Django 1.9及更高版本不再支持使用patterns()
当前的实现可能如下所示:
from django.conf import settings
from django.urls import path
urlpatterns = []
if settings.ADMIN_ENABLED is True:
urlpatterns += [path('admin/', admin.site.urls),]
urlpatterns += [
# ... Other paths
]
关于附加到已安装的应用程序的第二部分,这需要放在settings.py文件中,不能放在URL文件中
因此,应该写下:
if ADMIN_ENABLED is True:
INSTALLED_APPS.append('django.contrib.admin')
如果您包括设置。
在启用管理之前
您将得到一个错误。就像我从Django期望的那样,很好,很干净。谢谢(还有其他几种方法,但我使用的是类似的方法)。此外,使用TEMPLATE_DEBUG并使用“ADMIN_ENABLED=DEBUG”来遵循default settings.py的示例可能会有所帮助,这样您就不会忘记将其关闭。从django.conf导入设置