[python]django-settings.py

settings.py 是 Django 项目的核心配置文件,它包含了项目的各种配置项,这些配置项定义了项目的运行环境、数据库连接、应用列表、中间件、模板引擎等关键设置。以下是 settings.py 中一些常见配置项的详细解释:

1. 基本配置

1.1 DEBUG

DEBUG = True
  • 作用:控制是否开启调试模式。
  • 默认值False
  • 说明:在开发阶段通常设置为 True,这样可以显示详细的错误页面。在生产环境中,必须将其设置为 False,以避免泄露敏感信息。

1.2 ALLOWED_HOSTS

ALLOWED_HOSTS = ['example.com']
  • 作用:定义允许访问项目的主机名或 IP 地址。
  • 默认值[]
  • 说明:在生产环境中,必须设置为实际的主机名或 IP 地址,以防止 HTTP 主机头攻击。

2. 应用配置

2.1 INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # 自定义应用
]
  • 作用:定义项目中安装的应用列表。
  • 默认值:Django 默认安装的应用列表
  • 说明:每个应用都需要在这里注册,以便 Django 能够加载其配置和模型。

3. 中间件配置

3.1 MIDDLEWARE

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 默认的中间件列表
  • 说明:中间件可以处理请求和响应,执行诸如身份验证、会话管理、CSRF 保护等任务。

4. 数据库配置

4.1 DATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
  • 作用:定义项目使用的数据库配置。
  • 默认值:SQLite 数据库
  • 说明:你可以配置多种数据库,如 MySQL、PostgreSQL 等。例如:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'mydatabase',
            'USER': 'mydatabaseuser',
            'PASSWORD': 'mypassword',
            'HOST': '127.0.0.1',
            'PORT': '5432',
        }
    }
    

5. 模板配置

5.1 TEMPLATES

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [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 默认的模板配置
  • 说明DIRS 指定了模板文件的目录,APP_DIRS 指定了是否在应用目录中查找模板文件。

6. 静态文件配置

6.1 STATIC_URL

STATIC_URL = 'static/'
  • 作用:定义静态文件的 URL 前缀。
  • 默认值/static/
  • 说明:静态文件(如 CSS、JavaScript、图片等)的 URL 前缀。

6.2 STATICFILES_DIRS

STATICFILES_DIRS = [BASE_DIR / 'static']
  • 作用:定义静态文件的目录。
  • 默认值[]
  • 说明:在开发阶段,Django 会从这些目录中查找静态文件。

6.3 STATIC_ROOT

STATIC_ROOT = BASE_DIR / 'staticfiles'
  • 作用:定义静态文件的收集目录。
  • 默认值None
  • 说明:在生产环境中,运行 collectstatic 命令时,Django 会将所有静态文件收集到这个目录。

7. 媒体文件配置

7.1 MEDIA_URL

MEDIA_URL = 'media/'
  • 作用:定义媒体文件的 URL 前缀。
  • 默认值/media/
  • 说明:媒体文件(如用户上传的图片、文件等)的 URL 前缀。

7.2 MEDIA_ROOT

MEDIA_ROOT = BASE_DIR / 'media'
  • 作用:定义媒体文件的存储目录。
  • 默认值None
  • 说明:媒体文件的存储路径。

8. 国际化和本地化

8.1 LANGUAGE_CODE

LANGUAGE_CODE = 'en-us'
  • 作用:定义项目的默认语言。
  • 默认值'en-us'
  • 说明:支持多种语言,例如 'zh-hans' 表示简体中文。

8.2 TIME_ZONE

TIME_ZONE = 'UTC'
  • 作用:定义项目的时区。
  • 默认值'UTC'
  • 说明:支持多种时区,例如 'Asia/Shanghai' 表示北京时间。

8.3 USE_I18N

USE_I18N = True
  • 作用:是否启用国际化。
  • 默认值True
  • 说明:启用后,Django 会根据用户的语言偏好显示内容。

8.4 USE_L10N

USE_L10N = True
  • 作用:是否启用本地化。
  • 默认值True
  • 说明:启用后,Django 会根据用户的地区偏好显示内容。

8.5 USE_TZ

USE_TZ = True
  • 作用:是否启用时区支持。
  • 默认值True
  • 说明:启用后,Django 会使用时区感知的时间。

9. 认证和授权

9.1 AUTH_USER_MODEL

AUTH_USER_MODEL = 'myapp.CustomUser'
  • 作用:定义自定义用户模型。
  • 默认值'auth.User'
  • 说明:如果你需要自定义用户模型,可以在这里指定。

9.2 LOGIN_URL

LOGIN_URL = '/login/'
  • 作用:定义登录页面的 URL。
  • 默认值'/accounts/login/'
  • 说明:用户未登录时,访问需要登录的页面会重定向到这个 URL。

9.3 LOGIN_REDIRECT_URL

LOGIN_REDIRECT_URL = '/'
  • 作用:定义登录成功后的重定向 URL。
  • 默认值'/'
  • 说明:用户登录成功后,会重定向到这个 URL。

10. 安全配置

10.1 SECRET_KEY

SECRET_KEY = 'your_secret_key'
  • 作用:定义项目的密钥。
  • 默认值:随机生成的密钥
  • 说明:用于加密签名等操作,必须保持秘密。
CSRF_COOKIE_SECURE = True
  • 作用:是否通过 HTTPS 发送 CSRF 令牌。
  • 默认值False
  • 说明:在生产环境中,建议设置为 True,以提高安全性。
SESSION_COOKIE_SECURE = True
  • 作用:是否通过 HTTPS 发送会话 cookie。
  • 默认值False
  • 说明:在生产环境中,建议设置为 True,以提高安全性。

11. 日志配置

11.1 LOGGING

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': BASE_DIR / 'debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}
  • 作用:定义项目的日志配置。
  • 默认值:Django 默认的日志配置
  • 说明:可以配置日志的输出方式、级别等。

12. 其他配置

12.1 ROOT_URLCONF

ROOT_URLCONF = 'myproject.urls'
  • 作用:定义项目的 URL 配置文件。
  • 默认值'projectname.urls'
  • 说明:Django 会从这个文件中加载 URL 路由。

12.2 WSGI_APPLICATION

WSGI_APPLICATION = 'myproject.wsgi.application'
  • 作用:定义项目的 WSGI 应用程序。
  • 默认值'projectname.wsgi.application'
  • 说明:Django 会从这个文件中加载 WSGI 应用程序。

13. 启动方式

manage.py 是 Django 项目的管理脚本,它负责启动开发服务器、运行管理命令等。在 manage.py 文件中,有以下关键代码:

#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys

def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

if __name__ == '__main__':
    main()

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings'):这行代码设置了环境变量 DJANGO_SETTINGS_MODULE,指定了项目的配置文件路径。默认情况下,它指向 myproject/settings.py。

总结

settings.py 是 Django 项目的核心配置文件,它定义了项目的各种配置项。通过合理配置这些选项,你可以控制项目的运行环境、数据库连接、应用列表、中间件、模板引擎等关键设置。在开发和生产环境中,需要根据实际情况进行适当的调整。

posted @ 2025-06-25 20:50  harrylearn66666  阅读(75)  评论(0)    收藏  举报