Django 的 settings 全局配置文件

一、用户配置settings 文件介绍

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '0$bru9r7b^^9aydq(4+%9$s1)ibx+c!y_1=+=9e*^zs7%10yv*'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'test_django.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR , 'templates']
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'test_django.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'

  • BASE_DIR:当前项目的项目路径
  • SECRET_KEY:session 相关不用操作
  • DEBUG = True:项目上线之后改为False,在调试时会不停地打印一些信息,所以上线后要修改
  • ALLOWED_HOSTS = []:允许访问的主机,上线之后可以中括号内加上* 代表所有
  • INSTALLED_APPS字典:注册的功能模块字典
  • MIDDLEWARE:Django 中间件
  • TEMPLATES: HTML 文件存放路径配置
  • DATABASES:项目指定的数据库,默认使用的是sqlite3,可以修改
  • AUTH_PASSWORD_VALIDATORS:认证相关
  • LANGUAGE_CODE:文字编码

 

二、系统默认配置文件

全部的系统默认配置文件

from django.conf import global_settings

从系统默认配置文件中能观察到用户的配置文件中有的字段,系统默认的配置文件都有

在用户配置文件中修改了配置之后,功能是如何生效的?

 

2.1 修改配置

在 Django 中想要使用配置文件,**正确的配置方式应该是导入系统配置文件 **

from django.conf import settings

区别于:from django.conf import global_setting

这个 settings 既可以导入用户的配置文件,也可以导入系统默认的所有的配置

settings 源码分析

from django.conf import settings

点进去发现,settings = LasySettings(),其本质就是LasySettings类实例化的对象

从入口文件manage.py开始

通过os.environ.setdefault('...','...')设置了一个全局变量,该全局变量的值,就是用户配置文件的路径

那么,可以别的文件可以通过os.environ.get()方法获取到该文件

主要的功能文件

导入系统默认的配置文件

通过反射,循环获取到系统配置文件中的变量以及对应的值,在将变量名和变量值添加到对象的属性中去;

环境变量中获取到用户配置文件的路径,通过 importlib 模块中的方法,根据文件字符串导入文件

通过反射,循环获取到用户的配置文件中的变量以及对应的值,在将变量名和变量值添加到对象的属性中去;

因为用户配置文件是后导入的,所以会覆盖已经存在的系统的配置!!!

2.2 settings 源码应用

在自己的项目中实现与 Django 配置文件一样的功能

模拟文件配置

# 暴露给用户的配置文件
conf 文件夹
----settings.py 用户配置文件
# 系统配置文件
lib 文件夹
----conf 文件夹
		----__init__.py
		----global_settings.py 系统配置文件
# 启动文件
manage.py

manage.py

设置全局变量就是为了能够在别的文件中找到用户配置文件夹

import os
import sys

# 项目路径添加到环境变量
sys.path.append(os.path.dirname(__file__))

if __name__ == '__main__':
    # 项目全局设置一个变量
    os.environ.setdefault('user_settings','conf.settings')
    from lib.conf import settings
    print(settings.NAME)

__init__.py

可以根据环境变量,获取到字符串类型文件路径,再导入文件

也可以直接导入用户配置文件

import importlib
import os
from lib.conf import global_settings


class Settings():
    def __init__(self):
        for name in dir(global_settings):
            # 筛选出纯大写变量名
            if name.isupper():
                # 根据大写的名字获取对应的值
                value = getattr(global_settings, name)
                setattr(self,name,value)
        # 获取用户配置
        module_path_str = os.environ.get('user_settings')
        # 根据字符串路径导入配置文件
        module_name = importlib.import_module(module_path_str)
        
        for name in dir(module_name):
            # 筛选出纯大写变量名
            if name.isupper():
                # 根据大写的名字获取对应的值
                value = getattr(module_name, name)
                setattr(self,name,value)


settings = Settings()

接下来,直接修改用户配置文件或者修改系统配置文件就可以

其核心在于先读取了系统的配置文件,后读取了用户的配置文件,所以修改了用户的配置文件之后,会将系统配置文件给覆盖

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django项目中,可以通过定义全局模板变量来设置全局变量。一种常见的方法是创建一个contexts.py文件,并在其中定义全局变量。例如,可以在contexts.py文件中使用以下代码定义全局变量: ```python from django.conf import settings def sys_prm(request): # 自定义全局监控状态变量的逻辑 return { 'sys_prm': value, # 全局变量的键值对 } def global_settings(request): # 自定义全局监控状态变量的逻辑 return { 'global_settings': value, # 全局变量的键值对 } ``` 然后,在项目的settings.py文件中的TEMPLATES配置中,将这些自定义的context_processors添加到context_processors列表中,如下所示: ```python TEMPLATES = \[ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': \[\], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': \[ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'common.context_processors.sys_prm', # 自定义全局监控状态变量 'common.context_processors.global_settings', # 自定义全局监控状态变量 \], }, }, \] ``` 通过这种方式,就可以在Django项目中设置全局变量,并在模板中使用这些全局变量。 #### 引用[.reference_title] - *1* *3* [Django 设置全局变量(所有视图函数模板都可以使用)OK](https://blog.csdn.net/stcaaa/article/details/127917343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Django模板设置全局变量(默认变量)](https://blog.csdn.net/weixin_42134789/article/details/81239605)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值