一、Django自定义变量初始化
1、自定义初始化【lower】
自定义在app下创建‘app_initialize.py
'文件,文件下创建’def initialize()‘
方法,只需将需要初始化的内容写入到该方法中即可。当然也可以写到方法外。方法内变量初始化尽量以缓存的方式进行保存。
manage.py
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
from django.apps.config import AppConfig
from django.core.exceptions import AppRegistryNotReady, ImproperlyConfigured
from importlib import import_module
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'medicine_structure.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
def load_initialize():
"""
This initialize can not operate Model, Urls, Views
:return:
"""
from django.apps import apps
from django.conf import settings
from django.utils.module_loading import module_has_submodule
print('settings.INSTALLED_APPS:', settings.INSTALLED_APPS)
installed_apps = settings.INSTALLED_APPS
app_configs = {}
for entry in installed_apps:
if isinstance(entry, AppConfig):
app_config = entry
else:
app_config = AppConfig.create(entry)
if app_config.label in app_configs:
raise ImproperlyConfigured(
"Application labels aren't unique, "
"duplicates: %s" % app_config.label)
app_configs[app_config.label] = app_config
# loading app_initialize.py
for label, app_config in app_configs.items():
if module_has_submodule(app_config.module, 'app_initialize'):
models_module_name = '%s.%s' % (app_config.name, 'app_initialize')
initialize_module = import_module(models_module_name)
initialize_module.initialize()
print('App %s initialize complete.' % str(initialize_module))
if __name__ == '__main__':
load_initialize() # 用于初始化加载app下的app_initialize.py文件,以及文件下的initialize方法。
main()
app_initialize.py
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName :app_initialize.py
# @Time :2021/1/6 0006 12:07
# @Author :gaofei
# @Note : Can not import Model
"""
Update method for rewrite method of apps.ready.
This has been destroyed.
"""
def initialize():
pass
if __name__ == "__main__":
pass
2、借助APP初始化
在每个app目录下都有apps.py
文件,文件中注册了当前app的类,该类下可以重写ready()
方法,用于在django内该APP所有其他配置初始化后的加载方式。
当然很多人说,可以直接写入到项目下的settings.py文件中,但是,如果在写入的时候,你需要导入项目的model【即models.py下的模型】,那么django会报错,不允许在注册model之前使用该model。所以,应该在model注册时候使用。
正好ready()方法就是用于model注册后给到的重写方法。
如下为app下的apps.py文件。