Django:如何限制打开的应用程序?

时间:2017-11-29 22:44:10

标签: python django

我的django项目中有几个应用程序:

DJANGO_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 'django.contrib.gis.db',
    ]

LOCAL_APPS = [
    #'cycliste'                  ,
    #'logger'                    ,
    'position'                  ,
    'reseau'                    ,
    'station'                   ,
    #'trajet'                    ,
    #'useful_functions'          ,
    'velo'                      ,
    #'ville'                     ,
]

INSTALLED_APPS = DJANGO_APPS + LOCAL_APPS

我的网址是:

urlpatterns = [

    url(r'^', include('reseau.urls')),
    url(r'^', include('station.urls')),
    url(r'^', include('velo.urls')),
    url(r'^', include('position.urls')),


]

现在,每个应用程序都是一个休息服务器。我想在我的群集的每个服务器上启动一个不同的应用程序。 我认为有两种方法可以做到:

  1. 我在服务器上评论了我不想要的LOCAL_APPS
  2. 我更改了网址文件,删除了我不想接受的网址
  3. 问题是我有6个或7个应用程序。对于他们中的每一个,我只希望能够启动“站”服务器或“记录器”服务器。所以我需要在运行时动态更改LOCAL_APPS中包含的应用程序。

    我尝试通过--settings命令来做,但没有运气。我试图通过一个特定的management.command来做但没有成功...最后我认为它应该更简单。 也许对设置文件进行测试?

    如何动态更改INSTALLED_APPS值?

    如何动态更改urlpatterns值?

1 个答案:

答案 0 :(得分:0)

首先,我建议在每个" station"上使用django-environ动态变量。如果您已将env应用于您的设置,请忽略此步骤:

import environ
env = environ.Env()

env_file = 'path/to/env/file.env'
if exists(env_file):
    environ.Env.read_env(str(env_file))

动态更改INSTALLED_APPS值:

1)启动应用时按开关设置更改:

python manage.py runserver --settings=path.to.settings.production.station1

2)从env文件加载LOCAL_APPS:

LOCAL_APPS = ['your', 'app', 'here']
INSTALLED_APPS = DJANGO_APPS + env.list('LOCAL_APPS', default=LOCAL_APPS)

动态更改urlpatterns值:

在您的设置中更改ROOT_URLCONF,改为从env获取:

# Define url config here
ROOT_URLCONF = env('ROOT_URLCONF', default='core.urls.development')

动态更改INSTALLED_APPS值: