【Django】一、Django技巧

一、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文件。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值