【django】2-1 (django配置) 应用配置、中间件配置、模板配置

文章目录

  • [1 基本设置](#1 基本设置)
  • [2 应用配置](#2 应用配置)
    • [2.1 django核心应用](#2.1 django核心应用)
    • [2.2 常用第三方应用](#2.2 常用第三方应用)
  • [3 中间件](#3 中间件)
    • [3.1 默认使用的中间件](#3.1 默认使用的中间件)
    • [3.2 其它内置中间件](#3.2 其它内置中间件)
    • [3.3 第三方中间件](#3.3 第三方中间件)
    • [3.4 中间件的执行顺序](#3.4 中间件的执行顺序)
  • [4 模板引擎配置](#4 模板引擎配置)
    • [4.1 配置字典的键](#4.1 配置字典的键)
    • [4.2 上下文处理器](#4.2 上下文处理器)

创建django项目后,会自动生成初始的项目文件如下:

shell 复制代码
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 项目所在的目录

    python 复制代码
    BASE_DIR = Path(__file__).resolve().parent.parent
  • SECRET_KEY 用于提供加密签名的密钥,需要保密。

    django项目在创建时会自动创建一个随机生成的密钥。

    它会被用于会话、消息、密码的加密。

  • DEBUG 调试模式开关

    调试模式下会显示详细的错误页面。

    生产环境下需要关闭调试模式。

  • ALLOWED_HOSTS 允许访问的主机名列表

    在生产环境中需要指定,用来防止HTTP攻击。

    python 复制代码
    # 默认值
    ALLOWED_HOSTS = []
    
    # 示例
    ALLOWED_HOSTS = ['www.example.com']
  • ROOT_URLCONF 项目的主URL配置文件路径


2 应用配置

INSTALLED_APPS中包括django安装中所有被启用的自带应用和自定义应用。

其中的每一个字符串都是点分隔路径的格式,表示应用程序配置类或包含应用程序的包。

多个应用程序提供同一个资源的不同版本时,排在前面的应用程序先被使用。

2.1 django核心应用

INSTALLED_APPS的初始值包含6个应用:

python 复制代码
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支持多个模板引擎,但通常只需要配置一个。

默认的模板引擎:

python 复制代码
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 模板文件所在目录的绝对路径列表

    python 复制代码
    '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
    在调试模式下,向模板传递debugsql_queries的值。
  • django.template.context_processors.request
    向模板传递request对象。
  • django.contrib.auth.context_processors.auth
    向模板传递userperms变量。
  • django.contrib.messages.context_processors.messages
    向模板传递messages变量。
html 复制代码
<p>{{ debug }}</p>          <!-- 是否为调试模式 -->
<p>{{ request.user }}</p>   <!-- 获取当前用户 -->
<p>{{ user }}</p>           <!-- 获取当前用户 -->
<p>{{ perms }}</p>          <!-- 检查用户权限 -->
<p>{{ messages }}</p>       <!-- 显示一次性消息 -->

相关推荐
Asthenia04123 分钟前
面试官问我:HashMap的扩容机制,我从jdk1.7和1.8两个版本来介绍
后端
计算机学姐5 分钟前
基于SpringBoot的足球俱乐部管理系统
java·vue.js·spring boot·后端·mysql·java-ee·intellij-idea
Asthenia041222 分钟前
StringBuffer 与 StringBuilder 的源码分析与差异
后端
Python×CATIA工业智造25 分钟前
基于pycatia的CATIA零部件激活状态管理技术解析
python·pycharm·catia二次开发
摸鱼码1 小时前
(头歌作业—python)3.2 个人所得税计算器(project)
开发语言·python
狐凄1 小时前
练习题:110
开发语言·python·算法
欧达克1 小时前
AI 嘴替,社交平台反杠机器人:第 1 篇-大模型集成
后端
DeepLink1 小时前
Python `lambda` 函数详解:写给初学者的极简教程
python
失乐园1 小时前
Redis性能之王:从数据结构到集群架构的深度解密
java·后端·面试