当前位置: 首页 > article >正文

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

文章目录

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

相关文章:

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

文章目录 1 基本设置2 应用配置2.1 django核心应用2.2 常用第三方应用 3 中间件3.1 默认使用的中间件3.2 其它内置中间件3.3 第三方中间件3.4 中间件的执行顺序 4 模板引擎配置4.1 配置字典的键4.2 上下文处理器 创建django项目后&#xff0c;会自动生成初始的项目文件如下&…...

nginx-rtmp-module之ngx_rtmp.c代码详解

1. ngx_rtmp.c — RTMP模块的主逻辑实现 这个文件是 RTMP 模块的核心&#xff0c;包含了 RTMP 协议模块的初始化、配置解析和服务端口的管理等功能。它的主要职责是处理 RTMP 配置、初始化模块、配置事件、初始化 RTMP 端口等。 主要功能和逻辑&#xff1a; 模块初始化 (ngx_…...

罗杰斯特回归

定义 逻辑回归其实就是原来的线性回归加了激活函数&#xff0c;这个函数其实就是sigmoid函数&#xff0c;把一个回归的连续数值压缩到了0到1的空间&#xff0c;其实只要有函数能够满足把数值压缩到0,1之间就可以&#xff08;因为0到1之间的数值就是概率值&#xff09; 对于分类…...

Android 10.0 SystemUI状态栏去掉刘海屏功能实现

1.前言 在android10.0的系统rom定制化开发中,在一些产品中,对于带有刘海屏的产品中,会因为 刘海屏导致状态栏能显示图片的位置很小,然后会出现状态栏图标显示为白点的功能, 接下来看下问题怎么解决 2.SystemUI状态栏去掉刘海屏功能实现的核心类 frameworks/base/core/r…...

三维空间中点、线、面的关系

三维空间中点、线、面的关系 点相对于平面的位置关系直线相对于平面的位置关系1.根据三点计算平面方程 //根据3点计算平面方程#include <iostream> #include <cmath> #include <vector>...

【嵌入式学习2】C语言 - VScode环境搭建

目录 ## 语言分类 ## c语言编译器 ## VScode相关配置 ## 语言分类 编译型语言&#xff1a;C&#xff0c;C解释型语言&#xff1a;python&#xff0c;JS ## c语言编译器 分类GCC 系列MinGWCygwinMSVC系列一套编程语言编译器将GCC编译器和GNU Binutils移植到Win32平台下的产物…...

TCP/IP的网络连接设备

TCP/IP层物理层网卡、集线器、中继器数据链路层网桥、交换机网络层路由器传输层网关应用层 1.网桥&#xff1a;网桥主要功能是将一个网络的数据沿通信线路复制到另一个网络中去&#xff0c;可以有效的连接两个局域网 2.网关&#xff1a;网关又称协议转换器&#xff0c;是将两…...

蓝桥杯真题 2109.统计子矩阵

原题地址:1.统计子矩阵 - 蓝桥云课 问题描述 给定一个 NMNM 的矩阵 AA, 请你统计有多少个子矩阵 (最小 1111, 最大 NM)NM) 满足子矩阵中所有数的和不超过给定的整数 KK ? 输入格式 第一行包含三个整数 N,MN,M 和 KK. 之后 NN 行每行包含 MM 个整数, 代表矩阵 AA. 输出格…...

利用脚本和Shader制作屏幕后处理效果

一、屏幕后处理的实现原理 该屏幕后处理的原理是将渲染完成后的屏幕纹理通过脚本和Shader完成一些操作&#xff0c;然后实现各种屏幕效果 而实现屏幕后处理效果的主要操作就是获得当下渲染完成后的屏幕图像&#xff0c;其中unity提供了一个函数用于获取此图像——OnRenderIma…...

【银河麒麟系统常识】命令:uname -m(查看系统架构)

命令&#xff1a; uname -m 功能 常用的 Linux/Unix 终端命令&#xff0c;用于显示当前系统的硬件架构&#xff1b; 返回 返回系统的CPU架构类型&#xff0c;用于判断软件兼容性&#xff1b; 输出结果架构说明常见设备x86_64Intel/AMD 64位 CPU主流 PC、服务器aarch64ARM 64位 …...

3.1.2 内存池

文章目录 3.1.2 内存池1. 什么是内存池2. 内存管理1. 定长2. 不定长3. jemalloc4. tcmalloc 3.1.2 内存池 1. 什么是内存池 内存池&#xff08;Memory Pool&#xff09; 是一种 预先分配 一块大内存&#xff0c;然后按需分配和回收 其中小块内存的技术。它的本质是管理一块连续…...

基于SpringBoot + Vue 的餐厅点餐管理系统

SpringBootVue餐厅点餐管理系统 技术框架 后端&#xff1a;springboot mybatisPlus前端&#xff1a;Vue2 elementUI数据库&#xff1a;mysql项目构建工具&#xff1a;maven 数据库表 14张 角色及功能 管理员&#xff1a;登录、用户管理、餐桌信息管理、菜品类型管理、菜…...

Android开发BasePagerAdapter

Android开发BasePagerAdapter 有个基类的PagerAdapter 方便很多 public class BasePagerAdapter extends FragmentPagerAdapter {private static final String TAG "FragmentPagerAdapter";private static final boolean DEBUG false;private final FragmentMana…...

70. Linux驱动开发与裸机开发区别,字符设备驱动开发

一、裸机驱动开发回顾 1、底层&#xff0c;跟寄存器打交道&#xff0c;有些MCU提供了库。 二、Linux驱动开发思维 1、Linux下驱动开发直接操作寄存器不现实。 2、根据Linux下的各种驱动框架进行开发。一定要满足框架&#xff0c;也就是Linux下各种驱动框架的掌握。 3、驱动最…...

【博客节选】再谈Unity 的 root motion

节选自 【Unity实战笔记】第二十三 root motion变更方向攻击 &#xff08;OnStateMove rootmotion rigidbody 使用的一些问题&#xff09; 小伙伴们应该对root motion非常困惑&#xff0c;包括那个bake into pose。 当xz bake into pose后&#xff0c;角色攻击动画与父节点产…...

26考研——栈、队列和数组_栈(3)

408答疑 文章目录 一、栈1、栈&#xff08;Stack&#xff09;的概念和特点定义术语操作特性示例直观理解栈的基本操作初始化栈判断栈是否为空入栈操作出栈操作读取栈顶元素销毁栈 栈的数学性质 2、栈的顺序存储结构顺序栈的定义栈顶指针初始化注意事项 共享栈共享栈的操作共享栈…...

“十五五”时期航空弹药发展环境分析

1&#xff0e;“十五五”时期航空弹药发展环境分析 &#xff08;标题&#xff1a;小二号宋体居中&#xff09; 一、建言背景介绍 &#xff08;一级标题&#xff1a;黑体三号&#xff0c;首行空两格&#xff09; 航空弹药作为现代战争的核心装备&#xff0c;其发展水平直接关乎…...

桥接模式的优点和典型实现

桥接模式的优点 桥接模式通过将抽象部分与实现部分分离&#xff0c;使得它们可以独立变化&#xff0c;从而提高系统的灵活性和可扩展性。以下是桥接模式的主要优点&#xff1a; 分离抽象和实现&#xff1a; 桥接模式将抽象部分和实现部分分离&#xff0c;使得两者可以独立变化…...

Kotlin 协程官方文档知识汇总(一)

1、协程基础 Kotlin 是一门仅在标准库中提供最基本底层 API 以便其他库能够利用协程的语言。与许多其他具有类似功能的语言不同&#xff0c;async 与 await 在 Kotlin 中并不是关键字&#xff0c;甚至都不是标准库的一部分。此外&#xff0c;Kotlin 的挂起函数概念为异步操作提…...

删除字符串邻近的重复项

1047. 删除字符串中的所有相邻重复项 - 力扣&#xff08;LeetCode&#xff09; 对于字符串中字符的匹配或者删除等问题&#xff0c;通常会用到栈这个数据结构&#xff0c;要保持这样一个思路。 对于这道题&#xff0c;可以遍历字符串&#xff0c;用栈存储&#xff0c;一旦遇到…...

基于 mxgraph 实现流程图

mxgraph 可以实现复杂的流程图绘制。mxGraph里的Graph指的是图论(Graph Theory)里的图而不是柱状图、饼图和甘特图等图(chart)&#xff0c;因此想找这些图的读者可以结束阅读了。 作为图论的图&#xff0c;它包含点和边&#xff0c;如下图所示。 交通图 横道图 架构图 mxGrap…...

动态路由机制MoE专家库架构在多医疗AI专家协同会诊中的应用探析

随着医疗人工智能技术的飞速进步,AI在医学领域的应用日益增多,尤其是在复杂疾病的诊断和治疗中,AI技术的应用带来了巨大的潜力。特别是动态路由机制混合专家(Mixture of Experts,MoE)架构,因其灵活、高效的特点,正逐渐成为实现多AI专家协同会诊的关键技术。通过将多个不…...

双工通信:WebSocket服务

&#xff08;一&#xff09;WebSocket概述 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输 注意;Websocket也只能由客户端先握…...

洪水灌溉算法 + 总结

文章目录 floodfill算法图像渲染题解代码 岛屿数量题解代码 岛屿的最大面积题解代码 被围绕的区域题解代码 太平洋大西洋水流问题题解代码 扫雷游戏题解代码 衣橱整理题解代码 总结 floodfill算法 1. 寻找相同性质的联通块&#xff0c;可以使用dfs或者bfs解决&#xff0c;比如…...

docker中间件部署

1.docker安装 # 1.卸载旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 2.需要的安装包 yum install -y yum-utils# 3.设置镜像的仓库 # 3.1.默认是国外的&#x…...

LangChain4j(1):初识LangChain4j

1 什么是LangChain和LangChain4j LangChain是一个大模型的开发框架&#xff0c;使用LangChain框架&#xff0c;程序员可以更好的利用大模型的能力&#xff0c;大大提高编程效率。如果你是一个lava程序员&#xff0c;那么对LangChain最简单直观的理解就是&#xff0c;LangChain…...

基于 Swoole 的高性能 RPC 解决方案

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

Photoshop 2025安装包下载及Photoshop 2025详细图文安装教程

文章目录 前言一、Photoshop 2025安装包下载二、Photoshop 2025安装教程1.解压安装包2.运行程序3.修改安装路径4.设安装目录5.开始安装6.等安装完成7.关闭安装向导8.启动软件9.安装完成 前言 无论你是专业设计师&#xff0c;还是初涉图像处理的小白&#xff0c;Photoshop 2025…...

CPU跑大模型怎么加速?

一、概念 近几年&#xff0c;大模型的规模越做越大。普通码农没几张显卡几乎都跑不动动辄几百B的模型了。当然&#xff0c;随着SLM进一步发展&#xff0c;移动端、PC端部署SLM变得轻松了起来。即便只有CPU也能带得起3B以内的SLM&#xff0c;只不过推理速度比较感人。因此&#…...

PostgreSQL详解

第一章&#xff1a;环境部署与基础操作 1.1 多平台安装详解 Windows环境 图形化安装 下载EnterpriseDB安装包&#xff08;含pgAdmin&#xff09; 关键配置项说明&#xff1a; # postgresql.conf优化项 max_connections 200 shared_buffers 4GB work_mem 32MB 服务管理命…...