Django settings.py 文件全解析

本篇详细介绍 Django settings.py 文件各个配置项的教程,涵盖核心配置项的作用及最佳实践


一、基础配置

1. ​BASE_DIR

BASE_DIR = Path(__file__).resolve().parent.parent
  • ​作用:项目根目录路径,用于构建其他路径(如模板、静态文件路径)
  • ^注意:使用 Path 对象更安全,替代传统的 os.path.dirname()

2. ​SECRET_KEY

SECRET_KEY = 'django-insecure-xxxxxxxx'
  • ​作用:用于加密签名(Session、密码重置等)
  • 安全建议
    • 永远不要提交到版本控制
    • 生产环境使用环境变量加载:
import os
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')

3.DEBUG

DEBUG = True
  • ​作用:开启调试模式(显示详细错误页面)
  • 生产环境必须关闭
DEBUG = False

4. ALLOWED_HOSTS

ALLOWED_HOSTS = ['example.com', '127.0.0.1']
  • ​作用:允许访问的域名/IP白名单
  • ​开发环境配置
ALLOWED_HOSTS = ['*']  # 仅限开发环境!

二、应用与中间件

1. ​INSTALLED_APPS

# 注册内置、第三方、自己写的app
INSTALLED_APPS = ['django.contrib.admin', # 管理后台'django.contrib.auth', # 认证系统'django.contrib.contenttypes', # 提供 ​通用模型关系系统,允许任意模型之间建立动态关联'django.contrib.sessions', # 会话管理'django.contrib.messages', # 提供 ​一次性消息传递系统,用于在页面跳转间临时存储提示信息(如操作成功/失败提示)'django.contrib.staticfiles', # 静态文件处理'myapp.apps.MyAppConfig',  # 自定义应用'rest_framework',         # 第三方应用
]

2. ​MIDDLEWARE

# 注册内置、第三方、自己写的中间件
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware', # 安全相关头信息'django.contrib.sessions.middleware.SessionMiddleware', # 会话管理'django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware', # CSRF保护'django.contrib.auth.middleware.AuthenticationMiddleware', 用户认证'django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]

三、数据库配置

1. ​DATABASES

DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql','NAME': 'mydatabase','USER': 'mydbuser','PASSWORD': 'mypassword','HOST': 'localhost','PORT': '5432',}
}
  • 支持的数据库引擎:
    • sqlite3:轻量级本地数据库(开发用)
    • postgresql:PostgreSQL
    • mysql:MySQL
    • oracle:Oracle

2. ​使用环境变量(生产推荐)​

import os
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql','NAME': os.getenv('DB_NAME'),'USER': os.getenv('DB_USER'),'PASSWORD': os.getenv('DB_PASSWORD'),'HOST': os.getenv('DB_HOST'),'PORT': os.getenv('DB_PORT'),}
}

四、静态文件与媒体文件

1. ​STATIC_URL & STATIC_ROOT

STATIC_URL = '/static/'  # 访问URL前缀
STATIC_ROOT = BASE_DIR / 'staticfiles'  # collectstatic收集目录
STATICFILES_DIRS = [      # 额外静态文件目录BASE_DIR / 'static',
]

2. MEDIA_URL & MEDIA_ROOT

MEDIA_URL = '/media/'     # 用户上传文件访问路径
MEDIA_ROOT = BASE_DIR / 'media'  # 文件存储路径

五、模板配置

1. TEMPLATES

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [BASE_DIR / 'templates'],  # 模板搜索路径'APP_DIRS': True,  # 是否搜索应用内的templates目录'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',],},},
]

六、国际化配置

1. 语言与时区

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

2. 多语言支持

LOCALE_PATHS = [BASE_DIR / 'locale']  # 翻译文件目录

七、安全配置(生产必须)

1. HTTPS 设置

SECURE_SSL_REDIRECT = True         # 强制HTTPS
SESSION_COOKIE_SECURE = True       # 安全Cookie
CSRF_COOKIE_SECURE = True           # CSRF Cookie加密
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

2. 安全头信息

SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_BROWSER_XSS_FILTER = True
X_FRAME_OPTIONS = 'DENY'  # 防止点击劫持

八、高级配置

1. 缓存配置

CACHES = {'default': {'BACKEND': 'django.core.cache.backends.redis.RedisCache','LOCATION': 'redis://127.0.0.1:6379/1',}
}

2. 邮件配置

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.example.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'user@example.com'
EMAIL_HOST_PASSWORD = 'password'

九、最佳实践

1.环境分离:使用多个配置文件

settings/
├── base.py
├── development.py
└── production.py

2. 敏感信息管理:使用 python-dotenv

from dotenv import load_dotenv
load_dotenv()

3. ​性能优化:

DATABASES['default']['CONN_MAX_AGE'] = 300  # 数据库连接池

拓展

  • 通过合理配置 settings.py,您可以:

    • 确保开发与生产环境的安全隔离
    • 优化Web应用性能
    • 灵活扩展功能(如缓存、邮件服务)
    • 实现多语言支持与国际化部署

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35075.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[MAVEN][经验总结]MAVEN_HOME和M2_HOME的配置建议

前言 MAVEN_HOME和M2_HOME都是maven的环境变量,要配置哪个,与maven版本有关,我在实操过程中遇到相关的问题,现记录如下。 MAVEN_HOME和M2_HOME的区别 MAVEN_HOME 和 M2_HOME 本质上是同一个作用的环境变量,它们的区…

力扣Hot100——169. 多数元素

解法1&#xff1a;使用HashMap 将nums数组映射到HashMap中&#xff0c;键为nums的值&#xff0c;值为nums中值的数量&#xff1b; 然后遍历哈希表&#xff0c;返回值最大的键 class Solution {private Map<Integer, Integer> countNums(int[] nums) {Map<Integer, Int…

EasyRTC嵌入式音视频通话SDK:微信生态支持、轻量化架构与跨平台兼容性(Linix/Windows/ARM/Android/iOS/LiteOS)

随着WebRTC技术的不断发展&#xff0c;实时音视频通信在各个领域的应用越来越广泛。EasyRTC嵌入式音视频通话SDK作为一款基于WebRTC技术的实时通信解决方案&#xff0c;凭借其强大的功能和灵活的集成能力&#xff0c;受到了越来越多开发者的关注。 一、系统架构设计 纯C语言开…

QuickAPI:一键将 Excel 数据转为数据库表

在开发和数据管理中&#xff0c;将 Excel 数据快速导入数据库是一项常见需求&#xff0c;但手动建表和导入的过程往往让人头疼。 QuickAPI 作为一款高效的统一数据服务平台&#xff0c;提供了一键将 Excel 数据转为数据库表的功能&#xff0c;极大简化了操作流程。本文将以技术…

【MySQL】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

在DQL的基础查询中&#xff0c;我们已经学过了多表查询的一种&#xff1a;联合查询&#xff08;union&#xff09;。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先&#xff0c;我们想要查询emp表和stu表两个表&#xff0c;按照我们之前的知识栈&#xff0c;我们直接使用…

JavaScript如何做类型转换

一、类型转换 二、补充 console.log(1 "2" "2"); // 122 console.log(1 "2" "2"); // 32 console.log(1 -"1" "2"); // 02 console.log("1" "1" "2"); // 112 consol…

华为中小型企业项目案例

实验目的(1) 熟悉华为交换机和路由器的应用场景 (2) 掌握华为交换机和路由器的配置方法 实验拓扑实验拓扑如图所示。 华为中小型企业项目案例拓扑图 实验配置市场部和技术部的配置创建VLANLSW1的配置 [LSW1]vlan batch 10 20 [LSW1]q…

【PyTorch][chapter-35][MLA]

前言&#xff1a; MLA&#xff08;Multi-head Latent Attention&#xff0c;多头潜在注意力&#xff09;旨在提高推理效率和降低计算资源的消。MLA的核心思想在于通过信息转移来优化KV缓存的使用 MLA的技术特点主要包括&#xff1a; KV压缩与潜在变量&#xff1a;将键&#xff…

Spring Cloud 中的服务注册与发现: Eureka详解

1. 背景 1.1 问题描述 我们如果通过 RestTamplate 进行远程调用时&#xff0c;URL 是写死的&#xff0c;例如&#xff1a; String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 当机器更换或者新增机器时&#xff0c;这个 URL 就需要相应地变…

微服务存在的问题及解决方案

微服务存在的问题及解决方案 1. 存在问题 1.1 接口拖慢 因为一个接口在并发时&#xff0c;正好执行时长又比较长&#xff0c;那么当前这个接口占用过多的 Tomcat 连接&#xff0c;导致其他接口无法即时获取到 Tomcat 连接来完成请求&#xff0c;导致接口拖慢&#xff0c;甚至…

centos 安装pip时报错 Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

centos 安装pip时报错 [rootindex-es app-ai]# yum update Loaded plugins: fastestmirror Repository centos-sclo-rh is listed more than once in the configuration Determining fastest mirrors Could not retrieve mirrorlist http://mirrorlist.centos.org?archx86_64…

解决图片转 ICO 图标难题,支持批量处理

还在为图片转 ICO 图标发愁吗&#xff1f;别担心&#xff0c;今天为大家带来一款超实用的工具 ——Any to Icon。它功能强大&#xff0c;可实现批量图片转 ICO 图标&#xff0c;轻松解决格式转换难题。更棒的是&#xff0c;这款工具极为小巧&#xff0c;无需安装&#xff0c;即…

MultiPost--多平台博客发布工具

网站介绍 一键发布内容到多个社交平台的浏览器插件&#xff0c;支持知乎、微博、小红书、抖音等主流平台&#xff0c;支持文字、图片、视频等内容形式. 地址 GitHub &#xff1a; https://github.com/leaper-one/MultiPost-Extension Chorme: https://chromewebstore.google.…

Linux进程状态详解:僵尸进程与孤儿进程的深度探索与实践

文章目录 前言一、进程状态概述1.1 运行状态1.2 阻塞状态1.3 挂起状态 二、具体的Linux操作系统中的进程状态2.1 Linux内核源代码2.2 查看进程状态2.3 D磁盘休眠状态(Disk sleep)D状态的定义&#xff1a; 2.4 T停止状态(stopped)停止状态的概述&#xff1a;停止状态的触发条件&…

【Linux】深入理解进程和文件及内存管理

个人主页~ 深入理解进程和文件及内存管理 一、重谈Linux下一切皆文件二、操作系统对物理内存的管理1、物理内存与磁盘的数据交互2、操作系统对物理内存的管理 三、文件页缓冲区向文件写入数据的过程 四、动态库是如何被加载的关于动态库中的全局变量 五、深入理解地址1、程序地…

★9.4.2 context2D 绘图

返回目录&#xff1a; Qt QML专栏目录结构_qml 项目 目录-CSDN博客 ★9.4.2 context2D 绘图 Object <- context 属性 canvas : QtQuick::Canvas fillRule : enumeration fillStyle : variant fillStyle: 设置或获取当前填充颜色或样式。 font : string g…

汇编基础知识

CPU&#xff1a;一种可以执行机器指令进行运算的芯片&#xff08;微处理器&#xff09;。 存储器&#xff08;内存&#xff09;&#xff1a;存放CPU可以工作的指令和数据&#xff08;指令和数据都是二进制信息&#xff09;。 磁盘不同于内存&#xff0c;磁盘中的数据要读到内…

1536数字三角形

1536数字三角形 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;动态规划 &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {public static void main(…

基于VMware的虚拟机集群搭建

本文作者&#xff1a; slience_me 文章目录 基于VMware的虚拟机集群搭建1. 安装Vmware2. 构建虚拟机3. 安装Linux4. 网络配置5. 开始克隆6. 初始化系统6.1 开放root账户6.2 SSH服务6.3 设置静态IP6.4 镜像源 host 主机名 基于VMware的虚拟机集群搭建 该集群采用镜像ubuntu-20.0…

windows平台搭建python环境

python语言 Python 是一种高级、解释型、跨平台的编程语言&#xff0c;由Guido van Rossum于1991年设计&#xff0c;并发展成为全球最受欢迎的编程语言之一。它以简单易读的语法、灵活的特性和丰富的标准库闻名&#xff0c;适合初学者和经验丰富的开发者。 Python 支持多种编…