配置文件、request对象请求方法、Django连接MySQL、Django中的ORM、ORM增删改查字段、ORM增删改查数据
一、配置文件的介绍
1.注册应用的
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01.apps.App01Config',
]################中间件#############################################################
2.中间件
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',
]
################中间件#############################################################
ROOT_URLCONF = 'day54_dj.urls' # 根路由的文件名3.Django连接MySQL数据库的
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
配置文件settings.py
"""
Django settings for day54 project.Generated by 'django-admin startproject' using Django 1.11.20.For more information on this file, see
https://docs.djangoproject.com/en/1.11/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""import os# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
# 固定盐
SECRET_KEY = 'k)_am7d@*mbelt*c*i84r$8^a%1#f7^_6cxa$esk47pa+a^tkm'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# DEBUG = False
# ALLOWED_HOSTS = [*]# Application definition
# 注册应用
from django.contrib import admin
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01.apps.App01Config', # 全称
]# 中间件
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',
]# 跟路由文件
ROOT_URLCONF = 'day54.urls'# 模板
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates',# 'DIRS': [BASE_DIR / 'templates'],'DIRS': [os.path.join(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',],},},
]#
WSGI_APPLICATION = 'day54.wsgi.application'# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
# 连接数据库
DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),# },'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'db17','HOST': '127.0.0.1','PORT': 3306,'USER': 'root','PASSWORD': 'root','CHARSET': 'utf8'},
}# Password validation
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
# 验证认证
AUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
# 英文
# LANGUAGE_CODE = 'en-us'
# 中文
LANGUAGE_CODE = 'zh-hans'
# 时区
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
# 静态文件的配置,访问静态文件的令牌,以后只要访问静态文件的路径,就要以 /static/ 开头
STATIC_URL = '/static/'STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')
]# 动态解析路径
二、静态文件的配置
# 以登录功能为例<form action="">action参数的三种情况:1. 什么都不写,就是朝当前地址提交数据2. 要么全写:http://127.0.0.1:8000/login/?username=&password=3. 只写后缀http://127.0.0.1:8000/login/
"""我们知道静态模板文件都是放在templates文件夹中,如果没有这个文件夹就自己创建我们一般把静态文件放在static文件夹中, 但是,需要我们自己手动创建出来这个文件夹静态文件:网站使用的CSS文件网站使用的js文件网站使用图片网站使用的第三方库文件jQuery、bootstrap等"""
1.可以针对不同的功能对static文件夹里面的文件进行拆分
css
js
img
...注意:看起来是对的,但是不能访问到
http://127.0.0.1:8000/static/bootstrap-3.4.1-dist/js/bootstrap.min.js 之前访问的地址都可以访问到,那是因为在后端开设了可以访问的接口(理由)
之所以现在访问不到刚才的地址,是因为在后端没有开设这样的一个可访问的接口(路由)2.Django自动的帮我们写好了这样的接口访问静态文件的令牌,以后你只要访问静态文件的路径,就要以/static/开头
STATIC_URL = '/vxcvxcvxcvxcvcx/' # 静态文件STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')
]3.动态解析路径
{% load static %}
<script src="{% static 'js/jquery.min.js' %}"></script>
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
三、request对象请求方法
request.method # 请求方式 GET POST
print(request.POST) # <QueryDict: {'username': ['jason'], 'password': ['123']}>
print(request.POST.get('username')) # ['jason'] # jasonprint(request.GET) # <QueryDict: {'username': ['jason'], 'password': ['123']}>
print(request.GET.get('username')) # ['jason'] # jason
1.request的请求方法
在 Django 中,`request` 对象是在视图函数中作为参数传递的,它包含了客户端发起的 HTTP 请求信息,包括请求的方法。在视图函数中,你可以通过 `request.method` 属性获取请求方法。常见的 HTTP 请求方法有以下几种:1. GET:用于从服务器获取数据,通常用于请求页面或资源。
2. POST:用于向服务器提交数据,通常用于提交表单数据或执行某些操作。
3. PUT:用于更新服务器上的资源,通常用于更新已有数据。
4. DELETE:用于删除服务器上的资源,通常用于删除某个数据。在 Django 中,通过检查 `request.method` 属性,你可以判断请求的方法,并根据不同的方法执行不同的操作。下面是一个示例:from django.http import HttpResponsedef my_view(request):if request.method == 'GET':# 处理 GET 请求return HttpResponse("这是一个 GET 请求")elif request.method == 'POST':# 处理 POST 请求return HttpResponse("这是一个 POST 请求")elif request.method == 'PUT':# 处理 PUT 请求return HttpResponse("这是一个 PUT 请求")elif request.method == 'DELETE':# 处理 DELETE 请求return HttpResponse("这是一个 DELETE 请求")else:# 处理其他未知方法return HttpResponse("未知请求方法")在上面的例子中,视图函数 `my_view` 根据不同的请求方法返回不同的响应内容。根据实际需求,你可以在视图函数中根据请求方法执行相应的逻辑和操作。需要注意的是,要使用 `request` 对象,你需要在视图函数的参数列表中将它传递进来,例如:`def my_view(request):`。在 Django 中,视图函数的第一个参数通常是 `request` 对象,它包含了客户端发起的请求信息。
2.什么是request对象
在 Django 中,`request` 对象是一个包含了客户端发起的 HTTP 请求信息的对象。它是在 Django 视图函数中作为参数传递的,用于处理来自用户浏览器或其他客户端的请求。`request` 对象包含了许多属性和方法,其中包括:1. `request.method`: 获取请求的 HTTP 方法,例如 GET、POST、PUT、DELETE 等。
2. `request.GET`: 包含了 GET 请求参数的字典。可以通过 `request.GET.get('param_name')` 来获取具体的参数值。
3. `request.POST`: 包含了 POST 请求参数的字典。可以通过 `request.POST.get('param_name')` 来获取具体的参数值。
4. `request.FILES`: 包含了上传文件的信息,通常用于处理文件上传表单。
5. `request.path`: 获取请求的路径,例如 "/myapp/myview/"。
6. `request.path_info`: 获取请求的路径信息,例如 "/myapp/myview/",不包含查询参数。
7. `request.get_full_path()`: 获取请求的完整路径,包括路径和查询参数。
8. `request.is_secure()`: 判断请求是否使用了 HTTPS 安全协议。除了上述属性和方法,`request` 对象还包含其他有关请求的信息,例如请求头信息、用户 IP 地址、会话信息等。你可以通过 `request` 对象来获取客户端发起的请求数据,从而根据请求数据做出相应的处理和响应。在 Django 中,视图函数的第一个参数通常是 `request` 对象,例如:from django.http import HttpResponsedef my_view(request):# 在这里可以根据 request 对象来处理请求和返回响应# ...return HttpResponse("Hello, World!")通过使用 `request` 对象,你可以在视图函数中访问并处理客户端发起的请求数据,从而实现不同的业务逻辑和功能。
四、Django连接MySQL
1.默认情况sqlite3
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}2.连接MySQL
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}3.解决bug的思路:1. 就是print()2. 看是否有日志3. 看报错的信息去百度中搜索4. 问问别人4.连接MySQL数据的时候可能报错的解决办法:
1. 如果解释器版本导致的问题,直接改源码base.pydef get_new_connection(self, conn_params):conn = Database.connect(**conn_params)conn.encoders[SafeText] = conn.encoders[six.text_type]先判断bytes是否存在于编码器中,如果在才执行操作if bytes in conn.encoders: # 加上这句话conn.encoders[SafeBytes] = conn.encoders[bytes]return conn2. 解释器版本改为3.6的时候也会报错Django的底层默认使用的是mysqldb模块,这个模块兼容性很差我们还使用pymysql连接mysql,你要提前安装pymysql模块Did you install mysqlclient or MySQL-python?3.怎么解决这个问题:在项目的任意的__init__.py中加入下面两行代码*****************************************************************************import pymysqlpymysql.install_as_MySQLdb() # 猴子补丁以上这两行代码的意思就是把底层的mysqldb模块换成pymysql*****************************************************************************4. 除了使用mysqldb、pymysql之外还可以使用mysqlclient这个模块用了mysqlclient这个模块,就不用加上面那两句话了mysqlclient安装的时候可能会报各种错误DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),# }'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'db9','HOST': '127.0.0.1','PORT': 3306,'USER': 'root','PASSWORD': 'root','CHARSET': 'utf8'}
}
五、Django中的ORM
什么是ORM:对象映射模型以后在django中写根数据库相关的代码时候,就不用再写原生的SQL语句了,直接通过python代码来操作数据的增删改查.1.orm的书写位置:在models.py中书写
概念表 >>>>> 类名记录 >>>>> 对象字段 >>>>> 属性2.创建出来一张表来所有的类必须继承models.Modelclass User(models.Model): # 表名# id int primary key auto_incrementid = models.AutoField(primary_key=True)# username varchar(64)username = models.CharField(max_length=64)# password varchar(64)password = models.CharField(max_length=64)3.类写完之后,一定要做数据库迁移,真正的在数据库中生成表
********************************************************************************python36 manage.py makemigrations 它的作用是把数据库的迁移记录保存下来python36 manage.py migrate 才是真正的把数据表创建出来
********************************************************************************
六、ORM增删改查字段
class Author(models.Model):'''如果创建的表中有主键字段,并且,主键字段的名字也叫id,那么,以后就可以直接省略id字段'''name = models.CharField(max_length=64)# password1 = models.CharField(max_length=128, null=True)# password1 = models.CharField(max_length=64, default='12')
七、ORM增删改查数据
如何做查询 select * from author where username = jack and password = 123objects:小组件,里面封装了很多的方法# res=models.Author.objects.filter(name=username, password=password).all() # 是and查询# res=models.Author.objects.filter(name=username, password=password) # 是and查询# res=models.Author.objects.filter(name=username).filter(password=password)# 是and查询# res=models.Author.objects.filter(name=username, password=password).first() # 是and查询res=models.Author.objects.create(name=username,password=password)# print(res) # <QuerySet [<Author: Author object>]> QuerySet对象以后可以点出来很多的方法# print(res) # Author object QuerySet对象以后可以点出来很多的方法# print(res[0].name)# print(res[0].password)# print(res.name)# print(res.password)
相关文章:
配置文件、request对象请求方法、Django连接MySQL、Django中的ORM、ORM增删改查字段、ORM增删改查数据
一、配置文件的介绍 1.注册应用的 INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,app01.apps.App01Config, ]################中间件###############…...

CTF学习路线指南(附刷题练习网址)
前言: PWN,Reverse:偏重对汇编,逆向的理解; Gypto:偏重对数学,算法的深入学习; Web:偏重对技巧沉淀,快速搜索能力的挑战; Mic:则更为复杂&…...
【Rust 基础篇】Rust默认泛型参数:简化泛型使用
导言 Rust是一种以安全性和高效性著称的系统级编程语言,其设计哲学是在不损失性能的前提下,保障代码的内存安全和线程安全。在Rust中,泛型是一种非常重要的特性,它允许我们编写一种可以在多种数据类型上进行抽象的代码。然而&…...

从源码分析Handler面试问题
Handler 老生常谈的问题了,非常建议看一下Handler 的源码。刚入行的时候,大佬们就说 阅读源码 是进步很快的方式。 Handler的基本原理 Handler 的 重要组成部分 Message 消息MessageQueue 消息队列Lopper 负责处理MessageQueue中的消息 消息是如何添加…...
shell编程 变量作用域
变量 变量赋值不用$,访问值时用$,赋值时两边不留空格,双引号括起来的变量被值替换{}标记变量开始和结束,变量名区分大小写,所有bash变量的值变量不区分类型,统一为字符串 变量类型 环境变量,子进程可以继承父进程环境…...

华为eNSP:isis的配置
一、拓扑图 二、路由器的配置 配置接口IP AR1: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthe…...
FS.05-SAS-UP-Methodology
FS.05-SAS-UP-Methodology-v9.2.pdf 附录 D 数据处理审核 作为现场数据处理系统和支持流程审核的一部分,受审核方最好在审核日期之前准备一些 SAS 特定的测试数据文件。 本文件提供了建议的方法; 受审核方和审核团队将就每次审核的具体方法达成一致。 …...

Jmeter并发测试
基本步骤 1、新建线程组 测试计划右键——>添加——>线程(用户)——>线程组 2、 添加HTTP请求 线程组右键——>添加——>取样器——>HTTP请求 3、 添加HTTP信息头管理器 线程组右键——>添加——>配置元件——>HTTP信息头…...

【JVM】浅看JVM的运行流程和垃圾回收
1.JVM是什么 JVM( Java Virtual Machine)就是Java虚拟机。 Java的程序都运行在JVM中。 2.JVM的运行流程 JVM的执行流程: 程序在执行之前先要把java代码转换成字节码(class文件),JVM 首先需要把字节码通过…...

使用低代码开发,需要注意哪些?
低代码平台的历史相对较短,大约始于 2000 年初,源于快速应用程序开发工具。随着低代码平台和工具的日益普及和优势,它不断发展以满足各种领域和角色的需求。 本文将研究各种低代码和无代码应用程序开发方法、业务用例、挑战和未来预测等。 一…...

面试总结-Redis篇章(八)——Redis分布式锁
JAVA 面试总结-Redis分布式锁 模拟抢券场景通过下面方法添加Synchronized锁来防止上述情况,如果上面是单体服务没有问题,但是如果项目是集群部署,会出现下面的问题,因为Synchronized是属于本地的锁端口8080和8081同时访问…...

压力测试-商场项目
1.压力测试 压力测试是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内,向系统发送预…...

IDEA中文UT方法执行报错问题、wps默认保存格式
wps默认保存格式、IDEA中文UT方法执行报错问题 背景 1、wps修改文件后,编码格式从UTF-8-bom变成UTF-8(notepad可以查看); 2、IDEA中文UT执行报错: 解决方案 1、语言设置中不要勾选 “Beta版。。。。” 2、cmd中执…...

Vue如何实现编程式导航声明方法,前进和后退导航
编程式导航声明方法,前进和后退导航 在router中设置路由导航跳转函数 只要发生跳转 导航的声明函数 访问控制系统如何形成 就这三种 导航守卫的案例,写一个Main.Vue 和login .Vue 后台主页 如果想要展示后台主页,就用这种方法 想实现路由跳转…...
torch.load 报错 ModuleNotFoundError 或 AttributeError
Python 3.11.3 (main, Apr 7 2023, 19:25:52) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin Type "help", "copyright", "credits" or "license" for more information.正常情况下,我们会使用 torch.save 保存模型的 …...

前端,js , Error in created hook: TypeError ,有bug了
怎么兄弟,遇到bug了???你开心吗,哈哈哈哈...
百度文心千帆大模型平台:企业级大模型服务的新航标
随着人工智能和大数据的快速发展,大模型平台正越来越受到各大企业和个人开发者的青睐。本文将以百度最新推出的文心千帆大模型平台为例,深入分析其在国家战略布局,经济发展趋势,市场变化动向和技术研发周期等方面的影响和应用。同…...
uniApp低功耗蓝牙一键开门、多对多查找、数组匹配数组、开锁
文章目录 htmlJavaScript坑 html <view class"m_t_36"><view class"w_50_ h_100 lh_100 m_l_a m_r_a bc_409eff radius_10 color_fff ta_c" click"openBluetoothAdapter()">一键开门</view> </view>JavaScript export…...

类和对象|六个默认成员函数|const成员函数|运算符重载
文章目录 默认成员构造函数1. 构造函数1.1 概念1.2 特性 2. 析构函数2.1 概念2.2 特性 3. 拷贝构造函数3.1 概念3.2 特性 4. 运算符重载4.1 赋值重载4.2 自增自减重载4.3 取地址操作符重载 5. const成员函数6. 取地址重载 默认成员构造函数 上一节我们说过,空类的大…...

从源码角度去深入分析关于Spring的异常处理ExceptionHandler的实现原理
ExceptionHandler的作用 ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...