签入版本

This commit is contained in:
2026-09-12 12:07:15 +08:00
commit 0277034d24
939 changed files with 129356 additions and 0 deletions
+374
View File
@@ -0,0 +1,374 @@
# application/settings.py
"""
Django项目配置文件
=============================================================
Django settings for application project.
Generated by 'django-admin startproject' using Django 3.2.3.
该文件包含项目的所有配置项,包括:
- 基础路径配置
- 安全配置(密钥、调试模式、跨域等)
- 应用注册
- 中间件配置
- 数据库配置
- 静态文件配置
- 验证码配置等
For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
import os.path
import socket
import sys
from pathlib import Path
# 预先加载配置文件,切记此处不可删除
# 该导入用于加载 .env 环境变量文件
from extends.extends_dotenv import env_path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
from config import env
from config.env import *
# 设置默认编码
if sys.platform == 'win32':
import locale
# 设置控制台编码
if sys.stdout.encoding != 'utf-8':
sys.stdout.reconfigure(encoding='utf-8')
if sys.stderr.encoding != 'utf-8':
sys.stderr.reconfigure(encoding='utf-8')
# 设置环境变量
os.environ['PYTHONIOENCODING'] = 'utf-8'
os.environ['PYTHONUTF8'] = '1'
# ==================== 项目基础路径配置 ====================
# 项目根目录路径
# 获取当前文件所在目录的父目录(即项目根目录)
BASE_DIR = Path(__file__).resolve().parent.parent
# 自定义Python模块搜索路径
# 将项目根目录和apps目录添加到系统路径,便于导入模块
sys.path.insert(0, BASE_DIR) # 添加项目根目录
sys.path.insert(1, os.path.join(BASE_DIR, 'apps')) # 添加apps应用目录
# ==================== 安全配置 ====================
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
# 项目密钥,用于加密session、CSRF等,生产环境必须修改为复杂字符串
SECRET_KEY = 'django-insecure-!kjxf&e0pn4nrl%0&9sqp7n!ld)(gtw7v@i3fwf3sqcsh4ymat'
# SECURITY WARNING: don't run with debug turned on in production!
# 调试模式开关:True-开启详细错误页面,False-生产环境必须关闭
DEBUG = True
# ==================== 跨域处理配置 ====================
# 以下配置用于解决前后端分离时的跨域访问问题
# 是否允许跨域请求携带凭证(如cookies)
CORS_ALLOW_CREDENTIALS = True
# 是否允许所有域名跨域访问(开发环境使用,生产环境建议限制)
CORS_ORIGIN_ALLOW_ALL = True
# 允许跨域的白名单域名(注释掉的示例)
# CORS_ORIGIN_WHITELIST = (
# 'http://127.0.0.1:8080',
# )
# 允许跨域的正则表达式匹配规则
# 匹配所有http开头的域名
CORS_ALLOWED_ORIGINS_REGEXES = [
r'^http://.*?$',
]
# 注释掉的跨域域名白名单正则配置
# CORS_ORIGIN_REGEXES_WHITELIST = (
# r'^http://.*?$',
# )
# 允许跨域的HTTP请求方法
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
# 允许跨域的HTTP请求头
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization', # 授权头,用于JWT认证
'content-type', # 内容类型
'dnt', # Do Not Track
'origin', # 源地址
'user-agent', # 用户代理
'x-csrftoken', # CSRF令牌
'x-requested-with', # 异步请求标识
'Pragma', # 缓存控制
)
# ==================== 主机访问配置 ====================
# 允许访问的主机列表
# 使用*通配符默认所有IP均可,生产环境建议限制为具体域名
ALLOWED_HOSTS = ['*']
# 是否开启URL末尾斜杠自动补充
# True: 访问/url时会自动重定向到/url/
APPEND_SLASH = True
# ==================== 应用注册配置 ====================
# Application definition
INSTALLED_APPS = [
# 第三方应用
'corsheaders', # 跨域处理应用
'rest_framework', # Django REST Framework
'captcha', # 验证码应用
# Django内置应用
'django.contrib.admin', # 管理后台
'django.contrib.auth', # 认证系统
'django.contrib.contenttypes', # 内容类型框架
'django.contrib.sessions', # 会话框架
'django.contrib.messages', # 消息框架
'django.contrib.staticfiles', # 静态文件管理
# 扩展应用
'application', # 主应用
# 业务子应用(按模块划分)
'application.login', # 登录模块
'application.level', # 职级管理
'application.position', # 岗位管理
'application.dept', # 部门管理
'application.role', # 角色管理
'application.role_menu', # 角色菜单关联
'application.city', # 城市管理
'application.link', # 友情链接
'application.notice', # 公告管理
'application.user', # 用户管理
'application.user_role', # 用户角色关联
'application.dict', # 字典管理
'application.dict_item', # 字典项管理
'application.config', # 配置管理
'application.config_item', # 配置项管理
'application.param', # 参数管理
'application.file_template', # 文件模板管理
'application.menu', # 菜单管理
'application.config_web', # Web配置
'application.upload', # 文件上传
'application.generator', # 代码生成器
'application.job', # 定时任务
'application.job_log', # 任务日志
'application.login_log', # 登录日志
'application.operation_log', # 操作日志
'application.category', # 文章分类
'application.article', # 文章管理
'application.example', # 案例管理
]
# ==================== 中间件配置 ====================
MIDDLEWARE = [
# 跨域处理中间件(必须放在最前面)
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# CSRF中间件已注释,使用JWT进行认证
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# 此配置用于解决弹窗被浏览器劫持问题
# SAMEORIGIN: 只允许同源页面嵌入iframe
X_FRAME_OPTIONS = 'SAMEORIGIN'
# ==================== URL路由配置 ====================
# 根URL配置模块路径
ROOT_URLCONF = 'application.urls'
# ==================== 模板配置 ====================
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 模板文件搜索路径
'DIRS': [os.path.join(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',
],
'libraries': { # 模板标签库配置
},
},
},
]
# ==================== WSGI应用配置 ====================
WSGI_APPLICATION = 'application.wsgi.application'
# ==================== 数据库配置 ====================
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
# 默认数据库配置(从环境变量读取)
# SQLite配置(注释掉,留作备用)
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
"default": {
"ENGINE": env.DATABASE_ENGINE, # 数据库引擎
"NAME": env.DATABASE_NAME, # 数据库名称
"USER": env.DATABASE_USER, # 数据库用户名
"PASSWORD": env.DATABASE_PASSWORD, # 数据库密码
"HOST": env.DATABASE_HOST, # 数据库主机地址
"PORT": env.DATABASE_PORT, # 数据库端口
}
}
# ==================== 缓存配置(Redis) ====================
# 使用 Redis 作为缓存后端,用于存储 JWT Token 黑名单等
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": f"redis://{env.REDIS_HOST}:{env.REDIS_PORT}/{env.REDIS_DB}",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": env.REDIS_PASSWORD if env.REDIS_PASSWORD else None,
"SOCKET_CONNECT_TIMEOUT": 5, # 连接超时(秒)
"SOCKET_TIMEOUT": 5, # 读写超时(秒)
"CONNECTION_POOL_KWARGS": {"max_connections": 100}, # 连接池大小
"IGNORE_EXCEPTIONS": True, # Redis不可用时不抛异常,降级处理
},
"KEY_PREFIX": "djangoadmin", # Key前缀,避免多项目共用Redis时冲突
}
}
# ==================== 密码验证配置 ====================
# https://docs.djangoproject.com/en/3.2/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',
# 验证密码是否为纯数字
},
]
# ==================== 国际化配置 ====================
# https://docs.djangoproject.com/en/3.2/topics/i18n/
# 语言代码
LANGUAGE_CODE = 'en-us'
# 时区设置(亚洲/上海)
TIME_ZONE = 'Asia/Shanghai'
# 是否启用国际化
USE_I18N = True
# 是否启用本地化格式化
USE_L10N = True
# 是否使用时区支持(False表示不使用UTC)
USE_TZ = False
# ==================== 静态文件配置 ====================
# https://docs.djangoproject.com/en/3.2/howto/static-files/
# 静态文件访问URL前缀
STATIC_URL = '/static/'
# 静态文件搜索目录
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "public/static"),
]
# ==================== 主键字段配置 ====================
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
# 默认主键字段类型
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# ==================== Django REST Framework配置 ====================
REST_FRAMEWORK = {
# 默认认证类:使用JWT查询参数认证
'DEFAULT_AUTHENTICATION_CLASSES': ['api.extensions.auth.JwtQueryParamsAuthentication']
}
# ==================== 数据库表前缀配置 ====================
# 数据表前缀(从环境变量获取,默认为空)
# DATABASE_PREFIX = locals().get('DATABASE_PREFIX', "")
# ==================== 验证码相关配置 ===========================
# 验证码图片尺寸(宽度, 高度)
CAPTCHA_IMAGE_SIZE = (200, 60)
# 验证码字符个数
CAPTCHA_LENGTH = 6
# 验证码超时时间(分钟)
CAPTCHA_TIMEOUT = 1
# 验证码输出格式
CAPTCHA_OUTPUT_FORMAT = "%(image)s %(text_field)s %(hidden_field)s "
# 验证码字体大小
CAPTCHA_FONT_SIZE = 40
# 验证码前景色(绿色)
CAPTCHA_FOREGROUND_COLOR = "#1d953f"
# 验证码背景色(白色)
CAPTCHA_BACKGROUND_COLOR = "#ffffff"
# 验证码噪点函数配置
CAPTCHA_NOISE_FUNCTIONS = (
'captcha.helpers.noise_null', # 无噪点
"captcha.helpers.noise_arcs", # 弧线噪点
"captcha.helpers.noise_dots", # 点状噪点
)
# 验证码生成函数(随机字符验证码)
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge' # 字母验证码
# CAPTCHA_CHALLENGE_FUNCT = "captcha.helpers.math_challenge" # 加减乘除验证码(注释备选)
# ==================== 站点域名配置 ====================
# 站点域名(用于定时任务生成完整URL,从 .env 读取)
# 可选值示例: http://127.0.0.1:8000, http://localhost:8000, https://www.example.com
SITE_DOMAIN = os.getenv('SITE_DOMAIN', 'http://127.0.0.1:8000')