当前位置: 首页 > news >正文

Django的Settings 配置文件详解

Django Settings 配置文件详解

示例代码

"""
Django settings for back_stage_management_django project.Generated by 'django-admin startproject' using Django 5.0.3.For more information on this file, see
https://docs.djangoproject.com/en/5.0/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.0/ref/settings/
"""from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-8pf_9*jnm8@)6(#bn=4ojbot+pcc^cszvpk&@)b)uux*sj=bq6'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','goods',  # 确保这里和你的应用名一致'rest_framework'
]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 = 'back_stage_management_django.urls'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',],},},
]WSGI_APPLICATION = 'back_stage_management_django.wsgi.application'# Database
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': BASE_DIR / 'db.sqlite3',
#     }
# }
# mysql
DATABASES = {'default': {  # 默认数据库配置(Django 支持多数据库配置)'ENGINE': 'django.db.backends.mysql',  # 指定使用 MySQL 后端'NAME': 'backstage',                   # 数据库名(需提前创建)'USER': 'root',               # MySQL 用户名'PASSWORD': '111111',           # MySQL 密码'HOST': 'localhost',                   # 数据库服务器地址(默认本地)'PORT': '3306',                        # MySQL 默认端口'OPTIONS': {                           # 额外选项(关键配置)'charset': 'utf8mb4',              # 字符集设置为 utf8mb4'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",  # 初始化 SQL 命令}}
}# Password validation
# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validatorsAUTH_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/5.0/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.0/howto/static-files/STATIC_URL = 'static/'# Default primary key field type
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

概述

Django的settings.py文件是项目的核心配置文件,包含了所有项目运行所需的设置。以下是对各部分的详细说明:

基本路径配置

BASE_DIR = Path(__file__).resolve().parent.parent
  • 定义了项目根目录的路径

  • 使用Pathlib模块,更现代的文件路径处理方式

安全设置

SECRET_KEY = 'django-insecure-8pf_9*jnm8@)6(#bn=4ojbot+pcc^cszvpk&@)b)uux*sj=bq6'
  • 重要: 生产环境必须更换为随机生成的密钥,且不能泄露

  • 用于加密签名、会话、密码重置令牌等

DEBUG = True
  • 开发时设为True,生产环境必须设为False

  • 开启时会显示详细错误信息

ALLOWED_HOSTS = []
  • 生产环境需要添加允许访问的域名/IP

  • 例如:['example.com', '192.168.1.1']

应用配置

INSTALLED_APPS = ['django.contrib.admin',          # 管理后台'django.contrib.auth',           # 认证系统'django.contrib.contenttypes',   # 内容类型框架'django.contrib.sessions',       # 会话框架'django.contrib.messages',       # 消息框架'django.contrib.staticfiles',    # 静态文件管理'goods',                         # 你的自定义应用'rest_framework'                 # Django REST framework
]

中间件配置

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',
]

数据库配置

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'backstage','USER': 'root','PASSWORD': '111111','HOST': 'localhost','PORT': '3306','OPTIONS': {'charset': 'utf8mb4','init_command': "SET sql_mode='STRICT_TRANS_TABLES'",}}
}
  • 已从SQLite切换到MySQL配置

  • 确保数据库已创建且用户权限正确

可以注释/移除的组件

根据项目需求,以下Django自带组件可以酌情注释掉:

1. 如果不使用Django自带的管理后台:

# 'django.contrib.admin',  # 管理后台

2. 如果不使用用户认证系统:

# 'django.contrib.auth',           # 认证系统
# 'django.contrib.contenttypes',   # 内容类型框架(依赖auth)

3. 如果不使用会话功能:

# 'django.contrib.sessions',       # 会话框架

4. 如果不使用消息框架:

# 'django.contrib.messages',       # 消息框架

5. 对应的中间件也可以注释:

# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
# 'django.contrib.messages.middleware.MessageMiddleware',

6. 密码验证器(根据安全需求调整):

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',# },
]

Django 密码验证器详解

什么是密码验证器?

密码验证器是Django的安全机制,用于在用户设置或修改密码时进行强度检查,确保用户不会使用过于简单或不安全的密码。

四个内置验证器详解
1. UserAttributeSimilarityValidator

作用:检查密码是否与用户的个人信息过于相似

{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator','OPTIONS': {'user_attributes': ('username', 'first_name', 'last_name', 'email'),'max_similarity': 0.7  # 相似度阈值(0-1之间)}
}

示例

  • 用户名为 john123,密码为 john123456 → 会被拒绝

  • 用户邮箱 john@example.com,密码为 examplejohn → 会被拒绝

2. MinimumLengthValidator

作用:强制密码最小长度

{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator','OPTIONS': {'min_length': 8  # 默认8位,可自定义}
}

示例

  • 密码 abc123(6位)→ 会被拒绝

  • 密码 password123(11位)→ 通过

3. CommonPasswordValidator

作用:阻止使用常见弱密码

{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'
}

会阻止的密码示例

  • 123456passwordqwertyadmin

  • 111111abc123letmein

  • 基于包含2万个常见密码的列表进行检查

4. NumericPasswordValidator

作用:阻止纯数字密码

{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'
}

示例

  • 12345678 → 会被拒绝

  • abc12345 → 通过(包含字母)

  • p@ssw0rd → 通过(包含特殊字符)

验证器的工作时机

密码验证器在以下情况下自动触发:

  1. 用户注册时设置新密码

  2. 修改密码

  3. 管理员后台修改用户密码

  4. 使用 set_password() 方法时

验证失败的表现

当密码不符合要求时,Django会:

  1. 抛出 ValidationError 异常

  2. 显示具体的错误信息给用户

  3. 阻止密码设置操作

错误示例

• 密码与用户名太相似了。
• 密码长度至少为8个字符。
• 密码太常见了。
• 密码不能全是数字。
核心要点
  1. django.contrib.auth → 提供密码验证功能

  2. AUTH_PASSWORD_VALIDATORS → 配置验证规则

  3. 两者需要同时存在才能正常工作

  4. 如果移除auth应用,整个密码验证系统都会失效

国际化设置

LANGUAGE_CODE = 'en-us'  # 可改为 'zh-hans' 使用中文
TIME_ZONE = 'UTC'        # 可改为 'Asia/Shanghai'
USE_I18N = True          # 启用国际化
USE_TZ = True            # 使用时区

静态文件设置

STATIC_URL = 'static/'
# 生产环境需要添加:
# STATIC_ROOT = BASE_DIR / 'staticfiles'

建议的简化配置

对于API项目(如使用DRF),可以简化如下:

INSTALLED_APPS = [# 'django.contrib.admin',      # 注释掉admin'django.contrib.auth','django.contrib.contenttypes',# 'django.contrib.sessions',   # 如果不用会话# 'django.contrib.messages',   # 如果不用消息框架'django.contrib.staticfiles','goods','rest_framework'
]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',
]

扩展

'django.contrib.auth',
'django.contrib.contenttypes',

如果不注释这两个应用,迁移数据库时会确实会创建Django自带的系统表

会多出的Django自带表
来自 django.contrib.auth 的表:
auth_user                 -- 用户表(存储用户名、密码、邮箱等)
auth_group                -- 用户组表
auth_permission           -- 权限表
auth_user_groups          -- 用户-组关联表(多对多)
auth_user_user_permissions -- 用户-权限关联表(多对多)

来自 django.contrib.contenttypes 的表:

django_content_type       -- 内容类型表(记录所有注册的模型信息)

是否应该保留?

建议保留的情况:
  1. 需要用户认证功能 - 登录、注册、权限管理

  2. 使用DRF认证 - REST framework依赖这些表

  3. 需要后台管理 - admin依赖auth系统

  4. 未来可能扩展 - 保留基础功能更灵活

可以注释的情况:
  1. 纯API服务 - 完全自己实现认证

  2. 微服务架构 - 认证由专门的服务处理

  3. 极致性能要求 - 减少不必要的表

  4. 确定不需要用户功能 - 简单的数据处理服务

如果你选择保留

这是完全正常的!大多数Django项目都保留这些表,因为它们提供了:

  1. 开箱即用的用户系统

  2. 完整的权限管理

  3. 与Django生态的良好集成

  4. 安全可靠的密码处理

注意事项

  1. 生产环境必须修改

    • 设置 DEBUG = False

    • 生成新的 SECRET_KEY

    • 配置正确的 ALLOWED_HOSTS

    • 使用生产数据库配置

  2. 组件依赖关系

    • 某些组件有依赖关系,注释时要注意

    • 比如 auth 依赖 contenttypes

  3. 根据项目类型调整

    • 纯API项目可以移除模板相关配置

    • 传统Web项目需要保留更多组件

这样的配置既保持了核心功能,又移除了不必要的组件,提高了项目运行效率。

http://www.dtcms.com/a/348055.html

相关文章:

  • 【ArcGIS Pro 全攻略】GIS 数据格式终极指南:从原理到实战,再也不纠结选哪种格式!
  • React useState 全面深入解析
  • Linux 824 shell:expect
  • 基于5G NR NTN与DVB-S2X/RCS2的机载卫星通信终端性能分析
  • 低功耗模式DMA数据搬运问题解析
  • 在测试接入抖音小游戏订阅消息推送时遇到的问题
  • bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十八)
  • K8s部署MySQL8.0数据库
  • Transformer实战(13)——从零开始训练GPT-2语言模型
  • 【go语言】字符串函数
  • imx6ull-驱动开发篇39——Linux INPUT 子系统实验
  • 05-ArkUI界面开发
  • Solidity学习笔记
  • ZKmall模块商城的推荐数据体系:从多维度采集到高效存储的实践
  • 用 Bright Data MCP Server 构建实时数据驱动的 AI 情报系统:从市场调研到技术追踪的自动化实战
  • 青少年软件编程(python五级)等级考试试卷-客观题(2024年6月)
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_数据的维护
  • Adobe CS6所有系列绿色免安装版,Photoshop 6 Adobe Illustrator CS6 等绿色版
  • Spring创建的方式
  • 使用 Frida 运行时检测 Android 应用的真实权限状态 (App Ops)
  • 第4章栈和队列:顺序队——基本结构
  • Java 基础学习总结(211)—— Apache Commons ValidationUtils:让参数校验从 “体力活“ 变 “优雅事“
  • Vue状态管理工具pinia的使用以及Vue组件通讯
  • 一个byte表示多个bool属性的功能
  • 高并发AI服务部署方案:vLLM、TGI、FastChat性能压测报告
  • CSS 进阶用法
  • Read View是实现MVCC的三大前提之一,那么它是在什么时候建立的
  • frida安装配置及其使用方法
  • 一个奇怪的问题-Python会替代Java吗?技术语言之争的真相-优雅草卓伊凡
  • Java 大视界 -- Java 大数据在智能交通智能公交系统中的乘客流量预测与车辆调度优化