我目前正在一个Django项目中工作,我需要访问管理区域进行本地开发,但是想在已部署的站点中禁用它(出于安全原因等).
我怎样才能以编程方式实现(即使用settings.py).
非常感谢.
Ned*_*der 48
首先,建立一个方案,以便您的生产服务器可以具有与开发服务器不同的设置.一个简单的方法是使用source-control-ignored local_settings.py文件,但有许多更好的方法可以做到这一点.
然后,在settings.py文件中,输入:
ADMIN_ENABLED = True
Run Code Online (Sandbox Code Playgroud)
并在您的仅生产设置文件中,放置:
ADMIN_ENABLED = False
Run Code Online (Sandbox Code Playgroud)
然后在你的urls.py中:
if settings.ADMIN_ENABLED:
urlpatterns += patterns('',
(r'^admin/(.*)', include(admin.site.urls)),
# ..maybe other stuff you want to be dev-only, etc...
)
Run Code Online (Sandbox Code Playgroud)
J-a*_*u-s 11
@madneon 的答案非常棒,但需要更新和小修正,不幸的是建议的编辑队列已满。
对于第一部分,因为它暗示使用 @Ned Batchelder 的答案,所以patterns()Django 1.9 及更高版本不再支持使用 。
当前的实现可能如下所示:
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
]
Run Code Online (Sandbox Code Playgroud)
对于关于附加到 的第二部分INSTALLED_APPS,需要放在 settings.py 文件中,不能放在 urls 文件中。
因此,应该写成:
if ADMIN_ENABLED is True:
INSTALLED_APPS.append('django.contrib.admin')
Run Code Online (Sandbox Code Playgroud)
如果您settings.之前包含ADMIN_ENABLED,则会出现错误。
扩展@NedBatchelder的答案,您可能想使用适当的if statement,如下所示:
if settings.ADMIN_ENABLED is True:
...
Run Code Online (Sandbox Code Playgroud)
并且还'django.contrib.admin'从 中删除INSTALLED_APPS = [...],并使用相同的条件:
if settings.ADMIN_ENABLED is True:
INSTALLED_APPS.append('django.contrib.admin')
Run Code Online (Sandbox Code Playgroud)
这样模块就不会被加载,例如。collectstatic不会复制仅在管理中使用的不必要的静态文件(字体、图像、css、js)。
| 归档时间: |
|
| 查看次数: |
12882 次 |
| 最近记录: |