Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何禁用Django';在一个已部署的项目中管理,但保留它以供本地开发?_Python_Django - Fatal编程技术网

Python 如何禁用Django';在一个已部署的项目中管理,但保留它以供本地开发?

Python 如何禁用Django';在一个已部署的项目中管理,但保留它以供本地开发?,python,django,Python,Django,我目前正在一个Django项目中工作,我需要访问该项目的管理区域进行本地开发,但希望在已部署的站点中禁用它(出于安全原因等) 如何通过编程实现这一点(即使用settings.py) 非常感谢。首先,建立一个方案,使生产服务器的设置与开发服务器的设置不同。一个简单的方法是使用一个源代码管理忽略的local_settings.py文件,但是有很多更奇特的方法 然后,在settings.py文件中,放入: ADMIN_ENABLED = True ADMIN_ENABLED = False 在仅限

我目前正在一个Django项目中工作,我需要访问该项目的管理区域进行本地开发,但希望在已部署的站点中禁用它(出于安全原因等)

如何通过编程实现这一点(即使用
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导入设置