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

Django — 类视图和中间件

目录

  • 一、类视图
    • 1、基于类的结构
    • 2、常见的类视图基类
    • 3、类视图的优点
    • 4、代码案例
  • 二、中间件
    • 1、定义
    • 2、工作原理
    • 3、自带中间件
    • 4、中间件开发流程
    • 5、自定义中间件
    • 6、案例

一、类视图

类视图(Class-Based Views)是 Django 中用于处理 HTTP 请求和生成 HTTP 响应的一种方式,它们基于 Python 类来定义视图逻辑。

相对于基于函数的视图,类视图提供了更结构化、可维护和可扩展的方式来编写 Web 应用程序的视图逻辑。

1、基于类的结构

类视图是 Python 类,通常继承自 Django 的通用视图类,如 View 、TemplateView、ListView、DetailView 等。每个类视图通常包括一个或多个方法,每个方法对应于不同的HTTP请求方法(如 GET、POST 等)。

2、常见的类视图基类

Django 提供了一些常见的类视图基类,它们可以用作基础类,以便快速创建常见的视图。以下是一些常见的类视图基类:

  • View:最基本的类视图,可以从这个基类派生并定义 get()、post() 等方法来处理不同的 HTTP 请求。
  • TemplateView:用于渲染模板的类视图,通常用于显示静态内容的页面。
  • ListView:用于显示对象列表的类视图,自动处理分页和对象检索。
  • DetailView:用于显示单个对象的详细信息的类视图。
  • CreateView、UpdateView、DeleteView:用于创建、更新和删除对象的类视图,自动处理表单验证和重定向。
  • RedirectView:用于重定向用户到其他URL的类视图。

3、类视图的优点

  • 可维护性和可读性:类视图允许将相关的视图逻辑组织成一个类,使代码更具可读性和可维护性。每个 HTTP 请求方法通常对应于类中的一个方法,例如 get()、post() 等。
  • 代码重用:可以轻松地创建基础类视图,并在多个视图中继承它们,从而实现视图逻辑的重用。这有助于减少重复编码,提高代码的效率。
  • 扩展性:类视图支持继承,可以构建具有继承关系的视图。就是可以在基础视图上添加或覆盖方法,以实现不同的行为。
  • 可测试性:由于视图逻辑更模块化,因此更容易编写单元测试来验证视图的行为。

4、代码案例

# Project 项目中的 urls.py
from django.urls import path,include  # 导入 Django 的 path 函数,用于配置 URL 路由,include 函数,用于将其它 URL 模式包含在当前 URL 配置中# URL 配置列表,定义了网站的所有 URL 路径和对应的处理程序
urlpatterns = [# 配置 URL 路由path('', include('users.urls'))
]
# users 子应用的 urls.py
from django.urls import path  # 导入 Django 的 path 函数,用于配置 URL 路由
from .import views  # 导入当前目录下的 views.py 文件中的模块或视图函数# URL 配置列表,定义 URL 路径和对应的处理程序
urlpatterns = [# 使用 path 函数将'/register/'路径映射到 RegisterView 类视图path('register/',views.RegisterView.as_view()),
]
# 子应用的 views.py
from django.views import View  # 导入 View 类,用于创建类视图
from django.shortcuts import render  # 导入 render 函数,用于渲染模板
from django.http import HttpResponse  # 导入 HttpResponse 类,用于创建 HTTP 响应class RegisterView(View):# 处理 GET 请求,显示用户注册页面def get(self, request):# 使用 render 函数渲染并返回 register.html 模板return render(request, 'register.html')# 处理 POST 请求,接收并处理用户提交的注册信息def post(self, request):# 打印 request 对象,可选,用于调试和查看请求信息print(request)# 从 POST 请求中获取用户提交的用户名和密码username = request.POST.get('username')password = request.POST.get('password')# 打印用户名和密码,可选,用于调试和查看用户提交的数据print(username)print(password)# 在这里处理用户提交的注册信息,例如将信息保存到数据库# 返回一个简单的HTTP响应,表示注册成功return HttpResponse('注册成功')

在根目录下创建 templates 文件夹。

# setting.py
# 设置模板引擎配置,包括模板目录、模板上下文处理器等。
TEMPLATES = [{# Django 模板引擎的配置项'BACKEND': 'django.template.backends.django.DjangoTemplates',# 额外的模板目录,留空表示使用默认的模板目录'DIRS': [BASE_DIR / 'templates'],# 表示启用应用程序模板目录'APP_DIRS': True,# Django 模板引擎配置的一部分,用于指定模板上下文处理器(context processors)的选项'OPTIONS': {# 一个列表,用于指定要应用的模板上下文处理器。'context_processors': [# Django 自带的模板上下文处理器'django.template.context_processors.debug',# Django 自带的模板上下文处理器'django.template.context_processors.request',# Django 自带的模板上下文处理器'django.contrib.auth.context_processors.auth',# Django 自带的模板上下文处理器'django.contrib.messages.context_processors.messages',],},},
]

在 templates 文件夹下,新建 register.html 文件并编写。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="#" method="post">username: <input  type="text" id="username" name="username"><br>password: <input type="password" id="password" name="password" ><br>register: <button type="submit">注册</button></form>
</body>
</html>

二、中间件

1、定义

用于在请求和响应处理过程中执行预定义的操作。

中间件可以在 HTTP 请求到达视图之前和响应返回给客户端之前执行各种任务,例如身份验证、日志记录、性能优化、安全性检查等。

在这里插入图片描述

2、工作原理

请求阶段

  • 当用户发送 HTTP 请求时,Django 中间件首先介入。
  • 请求在到达视图之前,通过一系列中间件按顺序处理。
  • 每个中间件都可以选择处理请求、修改请求、记录信息或执行其他操作。

视图处理

  • 请求最终到达视图函数,视图函数处理请求并生成一个 HTTP 响应。

响应阶段

  • 响应在返回给客户端之前,通过一系列中间件按相反的顺序处理。
  • 每个中间件都可以选择处理响应、修改响应、记录信息或执行其他操作。

请求是从上往下,响应是从下往上。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、自带中间件

  • SecurityMiddleware(django.middleware.security.SecurityMiddleware):
    • 功能:提供基本的安全性功能。
    • 作用:例如,设置点击劫持保护、X-Content-Type-Options 头部等。
    • 用途:增加 Web 应用程序的安全性。
  • SessionMiddleware(django.contrib.sessions.middleware.SessionMiddleware):
    • 功能:处理会话数据。
    • 作用:存储和管理用户的会话信息。
    • 用途:用于跟踪用户会话状态,允许在不同请求之间共享数据。
  • CommonMiddleware(django.middleware.common.CommonMiddleware):
    • 功能:提供一些常见的 HTTP 处理功能。
    • 作用:例如,URL 规范化、缓存控制、Content-Type 头部处理等。
    • 用途:用于执行一些通用的 HTTP 操作,以确保 Web 应用程序的正常运行。
  • CsrfViewMiddleware(django.middleware.csrf.CsrfViewMiddleware):
    • 功能:用于防止跨站请求伪造(CSRF)攻击。
    • 作用:生成和验证 CSRF 令牌,确保 POST 请求的来源合法。
    • 用途:提供安全性保护,确保用户提交的表单是合法的。
  • AuthenticationMiddleware(django.contrib.auth.middleware.AuthenticationMiddleware):
    • 功能:在每个请求中更新用户的身份信息。
    • 作用:根据会话中的用户信息识别用户,并将 request.user 设置为当前用户对象。
    • 用途:管理用户身份验证状态,允许用户登录和注销。
  • MessageMiddleware(django.contrib.messages.middleware.MessageMiddleware):
    • 功能:在请求和响应之间传递消息。
    • 作用:支持在一次请求中显示一次性消息,例如成功消息或错误消息。
    • 用途:用于向用户呈现提示、通知和消息。
  • XFrameOptionsMiddleware(django.middleware.clickjacking.XFrameOptionsMiddleware):
    • 功能:设置 HTTP 响应的 X-Frame-Options 头部,以控制页面的嵌套(防止点击劫持攻击)。
    • 作用:增加网页的安全性,防止在 iframe 中嵌套网页。
    • 用途:保护网页免受点击劫持攻击。

4、中间件开发流程

  • 在项目中创建一个用于存放中间件代码的文件夹。
  • 在此文件夹中进行中间件的设计。
  • 中间设计好了之后,需要将自定义的中间件注册到项目之中。

5、自定义中间件

1、在子应用中创建自定义中间件文件 middlewarse.py。

# users 子应用的 middlewarse.py
from django.http import HttpResponse  # 导入 HttpResponse 类,用于创建自定义 HTTP 响应对象
from django.utils.deprecation import MiddlewareMixin  # 导入 MiddlewareMixin 类,它是编写中间件的基类,用于方便地定义中间件类# 定义中间件类 MD1,继承自 MiddlewareMixin
class MD1(MiddlewareMixin):# 在请求处理之前执行的方法def process_request(self, request):print("md1  process_request 方法", id(request))# 在响应返回客户端之前执行的方法def process_response(self, request, response):print("md1  process_response 方法", id(request))# 返回响应对象,可以对响应进行修改或不做修改return response# 在视图函数被调用之前执行的方法def process_view(self, request, view_func, view_args, view_kwargs):print("md1  process_view 方法")# 调用视图函数并传递请求对象return view_func(request)# 在视图函数抛出异常时执行的方法def process_exception(self, request, exception):print("md1  process_exception 方法")# 返回一个带有异常信息的 HTTP 响应对象return HttpResponse(exception)# 定义中间件类 MD2,继承自 MiddlewareMixin
class MD2(MiddlewareMixin):# 在请求处理之前执行的方法def process_request(self, request):print("md2  process_request 方法", id(request))# 在响应返回客户端之前执行的方法def process_response(self, request, response):print("md2  process_response 方法", id(request))# 返回响应对象,可以对响应进行修改或不做修改return response# 在视图函数被调用之前执行的方法def process_view(self, request, view_func, view_args, view_kwargs):print("md2  process_view 方法")# 调用视图函数并传递请求对象return view_func(request)# 在视图函数抛出异常时执行的方法def process_exception(self, request, exception):print("md2  process_exception 方法")# 返回一个带有异常信息的 HTTP 响应对象return HttpResponse(exception)# 运行结果:
# md1  process_request 方法 140083017419800
# md2  process_request 方法 140083017419800
# md2  process_response 方法 140083017419800
# md1  process_response 方法 140083017419800

2、在 settings.py 中的中间件的位置加入以下代码。

# settings.py
# 中间件
MIDDLEWARE = [# 导入自定义的中间件类'users.middlewarse.MD1',  'users.middlewarse.MD2',
]

6、案例

做 IP 访问频率限制

# users 子应用的 middlewarse.py
import time  # 导入 time 模块,用于计算时间间隔、获取当前时间等操作
from django.utils.deprecation import MiddlewareMixin  # 导入 MiddlewareMixin 类,它是编写中间件的基类,用于方便地定义中间件类
from django.http import HttpResponse  # 导入 HttpResponse 类,用于创建自定义 HTTP 响应对象# 创建一些变量和设置
white = ['127.0.0.1']   # 白名单
black = ['127.0.0.2']   # 黑名单
ban = {}                # 小黑屋
ban_seconds = 3         # 三秒内
ban_limit = 5           # 三秒内允许访问5次
ban_time = 30           # 被封时间30秒# 定义中间件类 AuthMD,继承自 MiddlewareMixin
class AuthMD(MiddlewareMixin):# 在每个请求处理之前执行的方法def process_request(self, request):ip = str(request.META.get("REMOTE_ADDR"))  # 获取请求的 IP 地址if ip in black:return HttpResponse('禁止访问', status=403)  # 如果 IP 在黑名单中,返回 403 状态码# 如果是第一次请求if not ban.get(ip):ban[ip] = {"total": 1, "time": int(time.time()), "banTime": ""}  # 如果 IP 不在小黑屋中,初始化相关信息print(ip, ban[ip].get("total"))  # 打印 IP 和访问次数# 如果不是第一次请求,则判断上次请求和这次请求是否在合法时间内if ban[ip]["time"] + ban_seconds > int(time.time()):# 如果是三秒内,判断访问次数if ban[ip]["total"] > ban_limit:ban[ip]["banTime"] = int(time.time()) + ban_time  # 如果在封禁时间内访问次数超过限制,设置封禁时间return self.ban_response()  # 返回封禁响应ban[ip]["total"] += 1  # 如果没有大于限制次数print(ban)  # 增加访问次数,并打印小黑屋信息# 如果不是在合法时间内请求else:limit_time = ban[ip]["banTime"]  # 先根据此 IP 找封的时间if limit_time and limit_time > int(time.time()):return self.ban_response()  # 如果在封禁时间内,返回封禁响应del ban[ip]  # 否则从小黑屋中移除 IP 地址# 定义封禁响应方法def ban_response(self):return HttpResponse(f"访问过于频繁,请{ban_time}秒后重试!")# 在每个响应返回客户端之前执行的方法def process_response(self, request, response):return response  # 返回原始响应对象,不做修改
# settings.py
# 中间件
MIDDLEWARE = [# 导入自定义的中间件类'users.middlewarse.AuthMD',
]

记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

相关文章:

Django — 类视图和中间件

目录 一、类视图1、基于类的结构2、常见的类视图基类3、类视图的优点4、代码案例 二、中间件1、定义2、工作原理3、自带中间件4、中间件开发流程5、自定义中间件6、案例 一、类视图 类视图&#xff08;Class-Based Views&#xff09;是 Django 中用于处理 HTTP 请求和生成 HTT…...

VMware安装CentOS Stream 8以及JDK和Docker

一、下载镜像源 地址&#xff1a;https://developer.aliyun.com/mirror/?spma2c6h.25603864.0.0.285b32d48O2G8Y 二、安装配置 配置项 一共有以下这些&#xff0c;其中软件、软件选择 、安装目的地、网络主机名需要讲一下&#xff0c;其他都简单&#xff0c;自行设置即可。 …...

MySQL作业1

目录 一.创建一张表&#xff0c;包含以下所有数据类型 建表&#xff1a;​编辑 二.使用以下六种约束 1.非空约束 2.唯一约束 3.主键约束 4.外键约束 5.检查约束 6.默认值约束 一.创建一张表&#xff0c;包含以下所有数据类型 Text 类型&#xff1a; Number 类型&#…...

基于微信小程序的家校通系统设计与实现(亮点:选题新颖、上传作业、批改作业、成绩统计)

文章目录 前言运行环境说明家长微信小程序端的主要功能有&#xff1a;教师微信小程序端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考论文…...

uni-app问题记录

一、启动问题记录 1. 报错1 解决办法: 开启微信开发者工具服务端口 2. 报错2:调用getLocation获取位置信息时报错以下内容 {errMsg: “getLocation:fail the api need to be declared in the requiredPrivateInfos field in app.json/ext.json”} 解决办法: manifest.json文…...

Leetcode---363周赛

题目列表 2859. 计算 K 置位下标对应元素的和 2860. 让所有学生保持开心的分组方法数 2861. 最大合金数 2862. 完全子集的最大元素和 一、计算k置为下标对应元素的和 简单题&#xff0c;直接暴力模拟&#xff0c;代码如下 class Solution { public:int sumIndicesWithKS…...

Netty粘包与拆包问题

先看一下下面的例子&#xff1a; 服务端代码为&#xff1a; public class TimeServer {public static void main(String[] args) throws InterruptedException {EventLoopGroup bossGroupnew NioEventLoopGroup();EventLoopGroup workerGroupnew NioEventLoopGroup();try{Serv…...

JS下载链接的两种方式

1、window.open() 弹出新窗口下载&#xff0c;需要用户进行交互之后触发&#xff0c;否则会被拦截&#xff0c;Safari始终会拦截弹窗 2、a标签下载 不会触发弹窗&#xff0c;更安全 let a document.createElement(a) a.href 下载链接; a.download 文件名称; document.bod…...

手把手教你实现:将后端SpringBoot项目部署到华为云服务器上

前言 前提&#xff1a;有一个后端项目&#xff0c;项目能够运行在本地&#xff0c;可以通过本地访问&#xff08;localhost&#xff09; 如果没有可以看这篇&#xff1a;一个基于SpringBoot的后端项目 注册华为云账号 华为云官网 购买云服务器 产品 -> 华为云耀云服务器…...

【红队攻防】从零开始的木马免杀到上线

0、环境配置说明 应该全部使用云服务器完整演示比较好&#xff0c;奈何太穷了买不起服务器&#xff0c;只能用本地环境演示。所需环境如下&#xff1a; 系统环境&#xff1a; CentOS 7 &#xff0c;Windows 10 软件环境 Cobalt Strike 4.7 , ShellQMaker&#xff0c; 360杀…...

Linux命令行操作:使用“more“命令进行分页显示

文章目录 1. 引言1.1 介绍Linux操作系统和命令行界面什么是Linux操作系统&#xff1f;为什么命令行界面在Linux中如此重要&#xff1f; 1.2 介绍Linux中的分页显示命令分页显示命令的作用与意义不同分页显示命令的比较 2. "more"命令的基本用法2.1 安装和启动"m…...

CentOS下安装MySQL 8.1及备份配置

1 卸载原来的MySQL版本 移除之前部署的mysql软链接 # unlink /etc/init.d/mysql # unlink /usr/bin/mysql2 下载最新的MySQL版本 https://dev.mysql.com/downloads/mysql/8.0.html 我这里直接把地址放在这里&#xff1a;https://cdn.mysql.com//Downloads/MySQL-8.1/mysql…...

【RabbitMQ实战】06 3分钟部署一个RabbitMQ集群

一、集群的安装部署 我们还是利用docker来安装RabbitMQ集群。3分钟安装一个集群&#xff0c;开始。 前提条件&#xff0c;docker安装了docker-compose。如果没安装的话&#xff0c;参考这里 docker-compose文件参考bitnami官网&#xff1a;https://github.com/bitnami/contai…...

(c语言)整形提升

#include<stdio.h> //整形提升 int main() { char a 5; //字符型的内存大小为8个比特位&#xff0c;故在进行加法之类的线性运算时需要整形提升 //00000000000000000000000000000101->5 因为字符型的内存大小不足&#xff0c;故在存放整形时需要裁切 …...

上传文件报错:The temporary upload location [/tmp/tomcat/xxx] is not valid

1.上传附加时报错找不到临时目录 Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat/work/Tomcat/localhost/ROOT] is not valid 发生改报错原因为 (1)、SpringBoot项目启动后&#xff0c;系…...

直线模组的品牌有哪些?

中国工业制造业快速发展&#xff0c;工业自动化领域也进入了飞速发展的阶段&#xff0c;直线模组作为工业自动化领域不可缺少的机器人之一&#xff0c;有着重要的不可或缺的作用&#xff0c;在行业内做得好的直线模组品牌有哪些呢&#xff1f; 1、NSK&#xff1a;日本精工株式会…...

零基础学习ESP8266

文章目录 零基础学习ESP8266前言选择硬件如何学习专栏大纲基础部分提高部分 总结 零基础学习ESP8266 前言 最近在空余的时候有用乐鑫的模组&#xff0c;感觉很不错&#xff0c;也决定简单写写。 相信看这篇文章的同学&#xff0c;希望可以熟悉ESP8266这个硬件平台。当然我们…...

基于PYQT5的GUI开发系列教程【二】框架安装和基础环境配置

本文概述 PYQT5是一个基于python的可视化GUI开发框架&#xff0c;具有容易上手&#xff0c;界面美观&#xff0c;多平台部署等优点&#xff0c;作者将通过一系列教程&#xff0c;带领大家从零基础到入门~能够自主实现GUI开发。 作者介绍 作者本人是一名人工智能炼丹师&#xff…...

pg数据库操作,insert(sql)插入一条数据后获返回当前插入数据的id --chatGPT

gpt: 在 PostgreSQL 数据库中&#xff0c;可以使用 INSERT 语句插入一条数据&#xff0c;并通过 RETURNING 子句来返回插入数据的 ID。以下是一个示例 Go 代码来执行这个操作&#xff1a; go package main import ( "database/sql" "fmt" &…...

【数据结构-树】哈夫曼树

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...

HarmonyOS 4.0 实况窗上线!支付宝实现医疗场景智能提醒

本文转载自支付宝体验科技&#xff0c;作者是蚂蚁集团客户端工程师博欢&#xff0c;介绍了支付宝如何基于 HarmonyOS 4.0 实况窗实现医疗场景履约智能提醒。 1.话题背景 8 月 4 日&#xff0c;华为在 HDC&#xff08;华为 2023 开发者大会&#xff09;上推出了新版本操作系统…...

【响应式布局】

响应式布局 1 什么是响应式布局2 响应式布局的5种实现方案2.1 百分比布局2.2 媒体查询布局2.3 rem响应式布局2.4 vw / vh响应式布局2.5 flex弹性布局 1 什么是响应式布局 响应式布局就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这个概念是为解决移动互…...

Spring面试题23:Spring支持哪些事务管理类型?Spring框架的事务管理有哪些优点?你更倾向用哪种事务管理类型?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring支持哪些事务管理类型? Spring 支持以下几种事务管理类型: 编程式事务管理:通过在代码中显式地使用事务管理 API(如 TransactionTempla…...

Leetcode—— LCR 122. 路径加密

LCR 122. 路径加密 假定一段路径记作字符串 path&#xff0c;其中以 "." 作为分隔符。现需将路径加密&#xff0c;加密方法为将 path 中的分隔符替换为空格 " "&#xff0c;请返回加密后的字符串。 示例 1&#xff1a; 输入&#xff1a;path "a.ae…...

缓冲区溢出漏洞分析

一、实验目的 熟悉软件安全需求分析方法&#xff0c;掌握软件安全分析技术。 二、实验软硬件要求 1、操作系统&#xff1a;windows 7/8/10等 2、开发环境&#xff1a;VS 6.0&#xff08;C&#xff09;、OllyDbg 三、实验预习 《软件安全技术》教材第3章 四、实验内容&#…...

【高阶数据结构】红黑树(C++实现)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C进阶 ⭐代码仓库&#xff1a;C进阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…...

算力百川汇蓝海,商海荡漾绘宏图

算力百川汇蓝海 01 新兴技术呼唤算力 崭新时代逐浪前&#xff0c;科技浪潮涌向天。 人工智能、数字孪生、元宇宙等新兴技术的迅速发展&#xff0c;引爆全球算力需求的规模式增长。尤其&#xff0c;以ChatGPT为代表的人工智能技术发展&#xff0c;引发了全球算力需求的进一步增长…...

ORACLE 内存结构之系统全局区(SGA)

每个 Oracle 数据库实例都会在内存中分配一个很大的内存结构&#xff0c; 称为系统全局区(System Global Area), 这是一个大型的共享内存结构,每个Oracle进程都会访问它。 在Linux/Unix操作系统上,SGA是一个物理实体&#xff0c;使用操作系统命令能“看到它”。 它被操作系…...

主要文档分享网站一览

136****0621的全部文档-第1页-原创力文档 目前能提供上传文档并付费的网站&#xff1a; 1、得利文库 www.deliwenku.com 先说我自已的吧&#xff01;见笑了 2、百度文库 wenku.baidu.com 这个算头部了、有流量倾斜、但资源多、用户现在上传的大部份为重复的&#xff0c;…...

CPU访问一个虚拟地址的整体流程

一、虚拟地址转换成物理地址 涉及到的部件&#xff1a; MMU&#xff1a;虚拟地址—MMU—>物理地址。MMU会控制整个流程&#xff08;查快表、查慢表等等&#xff09;TLB快表&#xff1a;组号&#xff08;若为组相联TLB&#xff09;、TLB标记、有效位、页框号页表&#xff08…...