Django中的settings.py文件使用全解析

 更新时间:2025年03月18日 11:28:54   作者:Yant224  
这篇文章主要介绍了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应用性能
  • 灵活扩展功能(如缓存、邮件服务)
  • 实现多语言支持与国际化部署

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Python 正则匹配两个特定字符之间的字符方法

    使用Python 正则匹配两个特定字符之间的字符方法

    今天小编就为大家分享一篇使用Python 正则匹配两个特定字符之间的字符方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 一文带你掌握Python中enumerate函数和for循环的对比

    一文带你掌握Python中enumerate函数和for循环的对比

    在Python编程中,循环是一项常见的任务,而for循环是最常见的一种,然而,Python提供了enumerate函数,它允许在迭代过程中访问元素的同时获得它们的索引,下面我们就来学习一下二者的区别吧
    2023-11-11
  • python实现Pyecharts实现动态地图(Map、Geo)

    python实现Pyecharts实现动态地图(Map、Geo)

    这篇文章主要为大家详细介绍了python实现Pyecharts实现动态地图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Python调用.net动态库实现过程解析

    Python调用.net动态库实现过程解析

    这篇文章主要介绍了Python调用.net动态库实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • streamlit(python构建web)之环境搭建过程

    streamlit(python构建web)之环境搭建过程

    这篇文章主要介绍了streamlit(python构建web)之环境搭建过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Python使用pip工具实现包自动更新的多种方法

    Python使用pip工具实现包自动更新的多种方法

    本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/CD的实现方案,以及最佳实践和安全考量,文章包含详细的代码示例、流程图解和实际应用场景分析,需要的朋友可以参考下
    2025-07-07
  • python3利用Socket实现通信的方法示例

    python3利用Socket实现通信的方法示例

    这篇文章主要介绍了python3利用Socket实现通信的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 卷积神经网络如何实现提取特征

    卷积神经网络如何实现提取特征

    这篇文章主要介绍了卷积神经网络如何实现提取特征问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Python3中Sanic中间件的使用

    Python3中Sanic中间件的使用

    Sanic框架中的中间件是一种强大的工具,本文就来介绍Python3中Sanic中间件的使用,具有一定的参考价值,感兴趣的可以了解一下
    2025-01-01
  • 如何查看python中安装库的文件位置

    如何查看python中安装库的文件位置

    这篇文章主要介绍了查看python中安装库的文件位置的方法,python自带标准库位置在安装环境的lib文件夹下的.py文件都是,在环境的lib文件夹中,本文给大家详细讲解需要的朋友可以参考下
    2022-11-11

最新评论