文章目录
- 1 基本设置
- 2 应用配置
- 2.1 django核心应用
- 2.2 常用第三方应用
- 3 中间件
- 3.1 默认使用的中间件
- 3.2 其它内置中间件
- 3.3 第三方中间件
- 3.4 中间件的执行顺序
- 4 模板引擎配置
- 4.1 配置字典的键
- 4.2 上下文处理器
创建django项目后,会自动生成初始的项目文件如下:
manage.py # 管理django项目的命令行工具
django_pro/ # 项目的python包
__init__.py # 表示当前文件夹是一个python包
settings.py # 项目的配置文件
urls.py # 项目的URL声明
asgi.py # 项目运行在兼容ASGI的web服务器上的入口
wsgi.py # 项目运行在兼容WSGI的web服务器上的入口
settings.py
文件包含了项目的基础配置。
settings.py
可选的全部配置见文档:django配置
1 基本设置
-
BASE_DIR
项目所在的目录BASE_DIR = Path(__file__).resolve().parent.parent
-
SECRET_KEY
用于提供加密签名的密钥,需要保密。
django项目在创建时会自动创建一个随机生成的密钥。
它会被用于会话、消息、密码的加密。 -
DEBUG
调试模式开关
调试模式下会显示详细的错误页面。
生产环境下需要关闭调试模式。 -
ALLOWED_HOSTS
允许访问的主机名列表
在生产环境中需要指定,用来防止HTTP攻击。# 默认值 ALLOWED_HOSTS = [] # 示例 ALLOWED_HOSTS = ['www.example.com']
-
ROOT_URLCONF
项目的主URL配置文件路径
2 应用配置
INSTALLED_APPS
中包括django安装中所有被启用的自带应用和自定义应用。
其中的每一个字符串都是点分隔路径的格式,表示应用程序配置类或包含应用程序的包。
多个应用程序提供同一个资源的不同版本时,排在前面的应用程序先被使用。
2.1 django核心应用
INSTALLED_APPS
的初始值包含6个应用:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
这6项是django的核心应用,它们的作用如下:
django.contrib.admin
,提供django管理后台,可以在Web页面管理数据库。django.contrib.auth
,用户认证系统,包括用户、组、权限管理和登录、注销、密码重置登功能。django.contrib.contenttypes
,提供内容类型框架。django.contrib.sessions
,会话管理,支持跨请求的用户会话存储,用于存储用户状态。django.contrib.messages
,提供消息框架,用于在请求之间传递一次性消息。django.contrib.staticfiles
,在开发和生产环境中收集和提供静态文件。
django还提供了其他的可选应用:
django.contrib.sites
,多站点管理,允许一个django项目管理多个站点。django.contrib.flatpages
,创建和管理不需要复杂逻辑的静态页面。django.contrib.redirects
,管理URL重定向规则。django.contrib.humanize
,用于将数据转为更易读的形式。django.contrib.postgres
,提供PostgreSQL数据库的功能支持,如全文搜索、数组字段、JSON字段等。
2.2 常用第三方应用
为了扩展django功能,常用的第三方应用如下:
rest_framework
,快速构建RESTful API。corsheaders
,CORS中间件,处理跨域资源共享问题。allauth
,完整的用户认证和社交登录功能。django_filters
,过滤查询集。debug_toolbar
,在开发环境中提供调试信息。
3 中间件
MIDDLEWARE
中是处理请求和响应的中间件列表。
中间件可以在请求到达视图之前或响应返回客户端之前执行一些操作。
3.1 默认使用的中间件
-
django.middleware.security.SecurityMiddleware
提供安全相关的功能。设置HTTP安全头,支持HTTPS重定向等。 -
django.contrib.sessions.middleware.SessionMiddleware
为每个请求启用会话支持,把会话数据存储在数据库、缓存或文件中。 -
django.middleware.common.CommonMiddleware
提供一些通用的功能。如URL规范化、禁止访问DISALLOWED_USER_AGENTS
中的用户代理、支持APPEND_SLASH
配置。 -
django.middleware.csrf.CsrfViewMiddleware
为POST请求验证CSRF Token,防止伪造的用户请求。CSRF,跨站请求伪造。
-
django.contrib.auth.middleware.AuthenticationMiddleware
将认证用户附加到请求对象上:request.user
。支持用户登录、注销和权限检查。 -
django.contrib.messages.middleware.MessageMiddleware
在请求之间传递一次性消息,如成功提示、错误提示。消息可以存在会话、Cookie或其他后端中。 -
django.middleware.clickjacking.XFrameOptionsMiddleware
防止点击劫持攻击。设置X-Frame-Options
头,限制页面是否可以在<frame>
、<iframe>
、或<object>
标签中加载。
3.2 其它内置中间件
django.middleware.locale.LocaleMiddleware
国际化支持。根据用户的语言偏好设置语言,支持通过URL、会话或浏览器设置语言。django.middleware.gzip.GZipMiddleware
允许使用gzip压缩响应内容,减少传输数据量。django.middleware.cache.FetchFromCacheMiddleware
缓存支持,在响应阶段缓存页面。django.middleware.cache.UpdateCacheMiddleware
缓存支持,在请求阶段从缓存中获取页面。
3.3 第三方中间件
corsheaders.middleware.CorsMiddleware
允许浏览器跨域访问资源。debug_toolbar.middleware.DebugToolbarMiddleware
在开发环境中显示调试信息。whitenoise.middleware.WhiteNoiseMiddleware
静态文件管理。
3.4 中间件的执行顺序
中间件的执行顺序和它在MIDDLEWARE
列表中的顺序有关。
-
请求阶段
在请求阶段,django会按MIDDLEWARE
列表从上到下依次调用每个中间件的process_request
方法。
如果某个中间件的process_request
返回None,请求会继续传给下一个中间件。
如果某个中间件的process_request
返回JttpResponse
对象,就跳过后续中间件,进入响应阶段。 -
异常处理阶段
如果在请求处理过程中发生异常,django会按MIDDLEWARE
列表从下到上依次调用每个中间件的process_exception
方法。
如果某个中间件的process_exception
方法返回HttpResponse
对象,就跳过后续中间件,直接进入响应阶段。 -
视图处理阶段
在请求阶段,如果所有中间件的process_request
方法都返回None,请求会交给视图进行处理。
视图函数或视图类处理完成后,进入响应阶段。 -
响应阶段
在响应阶段,django会按MIDDLEWARE
列表从下到上依次调用每个中间件的process_response
方法。
每个中间件的process_response
都会接收请求和响应对象,并可以修改响应的内容。
4 模板引擎配置
TEMPLATES
用于配置django项目中的模板引擎。
TEMPLATES
是一个列表,每个元素是一个字典,表示一个模板引擎的配置。
django支持多个模板引擎,但通常只需要配置一个。
默认的模板引擎:
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',
],
},
},
]
4.1 配置字典的键
-
BACKEND
指定模板引擎的后端类
默认是django自带的模板引擎。
安装jinja2
后可以使用Jinja2模板引擎:'django.template.backends.jinja2.Jinja2'
。 -
DIRS
模板文件所在目录的绝对路径列表'DIRS': [BASE_DIR / 'templates'],
-
APP_DIRS
布尔值,是否在已安装应用的templates
目录下查找模板 -
OPTIONS
模板引擎的额外配置项
值为一个字典,包含以下配置项:context_processors
,上下文处理器列表,用于向模板传递全局变量;libraries
,注册自定义模板标签的过滤器;builtins
,注册内置模板标签和过滤器;autoescape
,是否自动转义HTML内容,默认True;debug
,是否启用模板调试模式,默认等于DEBUG设置的值;
4.2 上下文处理器
django自带的上下文处理器:
django.template.context_processors.debug
在调试模式下,向模板传递debug
和sql_queries
的值。django.template.context_processors.request
向模板传递request
对象。django.contrib.auth.context_processors.auth
向模板传递user
和perms
变量。django.contrib.messages.context_processors.messages
向模板传递messages
变量。
<p>{{ debug }}</p> <!-- 是否为调试模式 -->
<p>{{ request.user }}</p> <!-- 获取当前用户 -->
<p>{{ user }}</p> <!-- 获取当前用户 -->
<p>{{ perms }}</p> <!-- 检查用户权限 -->
<p>{{ messages }}</p> <!-- 显示一次性消息 -->