boot.settings 源代码

import os

from utils.config import Config, LazySetting
from boot import config


# 只有全大写的变量才会被django读取,其它名称放心使用即可
[文档] class SettingConfig(Config): """Configurables in django framework w.r.t the project. For example, login url is not configurable and should be hard-coded. """ db_host = os.getenv('DB_HOST') or LazySetting( 'db/HOST', default='localhost') db_user = os.getenv('DB_USER') or LazySetting('db/USER', default='root') db_password = os.getenv('DB_PASSWORD') or LazySetting( 'db/PASSWORD', default='secret') db_name = os.getenv('DB_DATABASE') or LazySetting( 'db/NAME', default='yppf') db_port = os.getenv('DB_PORT') or LazySetting('db/PORT', default='3306') secret_key = ('k+8az5x&aq_!*@%v17(ptpeo@gp2$u-uc30^fze3u_+rqhb#@9' if config.DEBUG else os.environ['SESSION_KEY']) static_dir = os.getenv('STATIC_DIR') or config.BASE_DIR
_configurables = SettingConfig(config.ROOT_CONFIG, 'django') # SECURITY # WARNING: don't run with debug turned on in production! DEBUG = config.DEBUG SECRET_KEY = _configurables.secret_key ALLOWED_HOSTS = ["*"] AUTH_USER_MODEL = 'generic.User' AUTHENTICATION_BACKENDS = [ "generic.backend.BlacklistBackend", ] 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", }, ] # URL Config LOGIN_URL = '/' ROOT_URLCONF = "boot.urls" WSGI_APPLICATION = "boot.wsgi.application" # Application definition & Middlewares INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "django_apscheduler", "rest_framework", "generic", "semester", "record", "app", "Appointment", 'dm', "scheduler", "yp_library", "questionnaire", "dormitory", "feedback", "achievement", ] 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", ] # TODO: Fix this CSRF_TRUSTED_ORIGINS = [config.GLOBAL_CONFIG.base_url] # Templates TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [os.path.join(config.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", "django.template.context_processors.media", ], }, }, ] # Database DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" DATABASES = { # 使用自己的数据库的时候请修改这里的配置 # 注意需要先创建数据库 # mysql -u root -p # create database db_dev charset='utf8mb4'; "default": { "ENGINE": "django.db.backends.mysql", "NAME": _configurables.db_name, "HOST": _configurables.db_host, "PORT": _configurables.db_port, "USER": _configurables.db_user, "PASSWORD": _configurables.db_password, 'OPTIONS': { 'charset': 'utf8mb4', # "init_command": "SET sql_mode='STRICT_TRANS_TABLES'", }, 'TEST': { 'CHARSET': 'utf8', 'COLLATION': 'utf8_general_ci', }, }, } # 两类文件URL配置在生产环境失效,在urls.py查看开发环境如何配置 # Static files (CSS, JavaScript, Images) # staticfiles应用默认只搜寻STATICFILES_DIRS和%APP%/static目录,不符合项目需求 # 由于使用统一static,无需支持collectstatic,废弃STATIC_ROOT STATIC_URL = "/static/" STATICFILES_DIRS = (os.path.join(_configurables.static_dir, "static/"),) # Media files (user uploaded imgs) MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(_configurables.static_dir, "media/") # Disordered settings LANGUAGE_CODE = "zh-Hans" TIME_ZONE = "Asia/Shanghai" USE_I18N = True # 是否启用数据的本地化格式,如果开启将会导致django以他认为的本地格式显示后台数据 # 主要表现为时间的呈现形式变为年/月/日 小时:分钟 关闭时则为yyyy-mm-dd HH:MM:SS # 关闭后,后台才能正常显示秒并进行修改 # 本地化有其他副作用,比如其他前端呈现的兼容 # 不想关闭可以调整django/conf/locale/zh_Hans/format.py中的TIME_INPUT_FORMATS顺序 # 而该文件中的其它变量被证明对后台呈现无效 # https://docs.djangoproject.com/zh-hans/3.1/ref/settings/#use-i18n USE_L10N = True # USE_TZ限制了Datetime等时间Field被存入数据库时是否必须包含时区信息 # 这导致定时任务和常用的datetime.now()等无时区时间在存入时被强制-8h转化为UTC时间 # 从而使数据库可读性差,存储前需要强制增加时区信息,且发送消息容易出错 # 从数据库取出的数据将是有时区信息的,几乎与datetime.now()不可比 USE_TZ = False REST_FRAMEWORK = { # Use Django's standard `django.contrib.auth` permissions, # or allow read-only access for unauthenticated users. 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] }