完全透彻了解一个asp.net core MVC项目模板1

当我们使用Visual Studio 2022去新建一个基于asp.net core Web项目的时候,一般有三种选择,一种是空项目,一种是基于MVC的项目、再有一种就是基于包含Razor Pages实例的web应用。如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
今天,我们打算选择基于MVC模式的web应用来详细介绍,详细到什么程度呢?逐句逐词的讲解,旨在给初学asp.net web应用的童鞋答疑解惑。

文章目录

  • 一、项目文件结构介绍
    • 1、项目结构目录图
    • 2、项目文件组成
  • 二、文件介绍
    • 1、裸露在外的两个文件
      • program.cs文件
        • 关于WebApplication.CreateBuilder
      • appsettings.json
    • 2、Views文件夹
      • (1) index.cshtml
        • 关于数据传递ViewData
      • (2)_layout.cshtml
        • 关于导航栏
        • 关于正文body
        • 关于footer
      • (3)privacy文件
      • (4)、views下剩余的几个辅助文件
    • 3、Controller文件夹
        • 关于路由的修改
    • 4、Models文件夹

文章原出处: https://haigear.blog.csdn.net/article/details/143302142

一、项目文件结构介绍

1、项目结构目录图

新建一个Asp.net Core Web应用(MVC)的项目之后,我们可以看到这样的结构:
在这里插入图片描述

2、项目文件组成

可以看到这个目录结构相当的有特点,一看就是MVC模式的,它自带了Models、Views、Controllers三个目录。
我们按照项目的文件运行的先后顺序来逐一介绍,或者按照文件的重要程度来介绍。首先是裸露在外的两个文件program和appsettings,其次是MVC的三个文件夹,然后是WWWROOT,然后才是Peroperties文件夹。

文章原出处:https://haigear.blog.csdn.net/article/details/143302142

二、文件介绍

1、裸露在外的两个文件

program.cs文件

var builder = WebApplication.CreateBuilder(args);// Add services to the container.
builder.Services.AddControllersWithViews();var app = builder.Build();// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");app.Run();

我们来逐句解释
以下是对这段代码的逐句解释:

var builder = WebApplication.CreateBuilder(args);

创建一个 WebApplicationBuilder 实例。args 通常是命令行参数,用于配置应用程序的构建过程。

// Add services to the container.
builder.Services.AddControllersWithViews();

向应用程序的服务容器中添加具有视图功能的控制器服务。这一步使得应用程序能够处理 HTTP 请求并返回带有视图的响应。所以,我们就可以在这里来配合Controller类来向视图返回需要展现在视图中的内容了。

var app = builder.Build();

使用之前创建的 WebApplicationBuilder 构建一个 WebApplication 实例。这个实例代表了整个应用程序,可以用来配置请求处理管道和启动应用程序。管道的只是在.net core中是一个很核心的概念,理解或不理解其实都没有关系,并不影响我们写一些简单的asp.net core的应用。

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{app.UseExceptionHandler("/Home/Error");
}

配置 HTTP 请求处理管道。如果应用程序不是在开发环境中运行,那么当发生异常时,将使用指定的路径(/Home/Error)来处理异常。

app.UseStaticFiles();

启用静态文件服务,允许应用程序提供静态文件(如静态的html、 CSS、JavaScript 和图像文件)。

app.UseRouting();

启用路由中间件,用于将请求路由到相应的控制器和操作方法。这个就会依靠路由来访问控制器中提供的内容,而不是像静态页一样的实际文件。它只是某个控制器的方法的返回值。

app.UseAuthorization();

启用授权中间件,用于处理授权要求,确保只有经过授权的用户可以访问特定的资源。

app.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");

定义一个默认的控制器路由。如果请求没有明确指定控制器、操作方法和参数,那么将使用默认值(控制器为 Home,操作方法为 Index,参数是可选的)。

app.Run();

启动应用程序,开始监听传入的 HTTP 请求。

关于WebApplication.CreateBuilder

WebApplication.CreateBuilder是 ASP.NET Core 中用于创建应用程序构建器的方法,其工作原理如下:

a、初始化构建器

  1. 创建一个WebApplicationBuilder实例。这个构建器负责配置和组装应用程序的各个部分。
    • 它接受一个命令行参数数组args,这允许应用程序在启动时接收来自命令行的参数,以便进行灵活的配置。

b、配置服务容器

  1. 构建器提供了一个服务集合,用于注册各种服务,这些服务在应用程序的生命周期中可以被注入到不同的组件中。
    • 例如,可以使用builder.Services.AddControllersWithViews()向服务容器中添加具有视图功能的控制器服务。这使得应用程序能够处理 HTTP 请求并返回带有视图的响应。
    • 可以添加数据库连接服务、日志服务、身份验证和授权服务等各种其他服务,以满足应用程序的特定需求。

c、配置应用程序的环境和其他属性

  1. 通过构建器,可以访问应用程序的运行环境信息,例如判断当前是否是开发环境。
    • 可以根据不同的环境进行不同的配置,比如在开发环境中可能会启用更多的调试信息和开发工具,而在生产环境中可能会进行性能优化和安全加固。

d、构建应用程序实例

  1. 当完成了对构建器的配置后,可以调用builder.Build()方法来构建一个WebApplication实例。
    • 这个实例代表了整个应用程序,包含了所有已配置的服务和中间件,以及请求处理管道。

总之,WebApplication.CreateBuilder提供了一种方便的方式来初始化和配置 ASP.NET Core 应用程序,使得开发者可以轻松地管理应用程序的各个方面,从服务注册到环境配置,再到最终构建出可运行的应用程序实例。

appsettings.json

以下是对这段 appsettings 配置内容的逐句解释:

{"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*"
}
  • "Logging":表示日志相关的配置部分。
    • "LogLevel":指定日志级别。
      • "Default": "Information":设置默认的日志级别为“Information”,这意味着只有信息级别及以上的日志会被记录下来。一般来说,信息级别包括一些重要的应用程序运行状态信息。
      • "Microsoft.AspNetCore": "Warning":对于“Microsoft.AspNetCore”相关的日志,设置日志级别为“Warning”。这意味着只有警告级别及以上的与 ASP.NET Core 框架相关的日志会被记录下来,这样可以减少一些框架内部的详细日志输出,避免日志过多而难以查看重要信息。
  • "AllowedHosts": "*":表示允许的主机名。这里设置为“*”,意味着允许任何主机访问该应用程序。在实际生产环境中,通常会设置为具体的主机名或 IP 地址范围,以提高安全性。

2、Views文件夹

在这里插入图片描述

(1) index.cshtml

views文件夹里面的内容都是直接呈现在web页面上的,我们从index的实际运行效果上来看看,index中页面中的内容究竟有哪些,都来自于哪里?先看页面运行效果:
在这里插入图片描述
从效果图上看,显然index页面由三部分组成:导航栏Navbar、主内容content、底栏footer。我们来看看代码:

@{ViewData["Title"] = "Home Page";
}<div class="text-center"><h1 class="display-4">Welcome</h1><p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

从上面的代码看来,貌似也没有导航栏和底栏的内容啊,这里肯定另有蹊跷,先按下不讲,后面再说。

@{… } 是 Razor 代码块的语法标记。
ViewData[“Title”] = “Home Page”;
这段代码的用意是在视图中设置名为 “Title” 的 ViewData 项的值为 “Home Page”。
在这个例子中,设置 “Title” 的值可以让视图在渲染页面时获取到页面的标题信息。通常,这个标题可以在页面的 标签中使用,以便为网页提供一个有意义的标题,提高用户体验和搜索引擎优化。例如,在页面的布局文件或特定视图中,可以通过 ViewData[“Title”] 的值来动态设置页面标题:

@ViewData["Title"]。这样,当这个视图被渲染时,页面的标题就会显示为 “Home Page”。 既然,ViewData["Title"] 设置标题,那么肯定在其他页面中也会出现,我们可以翻看其他也的代码也也会发现它。
关于数据传递ViewData

ViewData 是项目级别的全局字典类型的对象,无须声明拿来即可使用,也就是说在任何页面或者代码中都可以调用它,为它增加一组键值对,也可以覆盖或者删除一组键值对,它专用于在控制器和视图之间传递数据。我们讲到控制器的时候会再次发现它的身影。
文章原出处:https://haigear.blog.csdn.net/article/details/143302142

(2)_layout.cshtml

这个文件,实际就是我们看到的首页或者说其他页面的布局文件,否则也不会叫做layout了。所有阿布局都归它管,包括导航栏navbar,正文内容body, 底栏footer.

关于导航栏

我们的确没有在index文件中发现导航栏,导航栏在哪里呢?在views/shared文件夹下,有一个叫做_Layout.cshtml的文件。我们来看看代码,我们会发现在这个文件的标签里面包含了这么一段以

 <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3"><div class="container-fluid"><a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">WebApplicationDemo</a><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"><ul class="navbar-nav flex-grow-1"><li class="nav-item"><a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a></li><li class="nav-item"><a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a></li></ul></div></div></nav>

很显然,我们在这里找到了navbar,这里的每一个nav-item很显然就是一个导航项,如下:

<li class="nav-item"><a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>

class=“nav-link text-dark”:
为这个链接元素添加了 CSS 类名。“nav-link” 通常用于表示导航链接的样式,“text-dark” 可能是一个自定义的类名,用于设置链接文本为深色。
asp-area=“”:
在 ASP.NET Core 中,“area”(区域)用于组织大型应用程序的不同功能模块。这里留空表示没有特定的区域。
asp-controller=“Home”:
指定了链接所指向的控制器名称为 “Home”。控制器负责处理特定类型的请求并返回响应。
asp-action=“Index”:
指定了要在 “Home” 控制器上执行的动作方法名称为 “Index”。动作方法是控制器中的方法,用于处理具体的请求逻辑并返回视图或其他响应类型。
总体来说,这段代码创建了一个导航链接,当用户点击这个链接时,会触发一个请求,由 “Home” 控制器的 “Index” 动作方法来处理,并将用户导航到相应的页面。通常在 ASP.NET Core 的应用程序中,这种方式用于构建导航菜单和页面之间的链接关系。

关于正文body

我们在layout文件的中部,可以看到下面的代码,它就是负责将每个正文视图包含进来,然后统一送去渲染的。

<div class="container"><main role="main" class="pb-3">@RenderBody()</main>
</div>
关于footer

底栏和导航栏语法上没有什么差别,只不过有个专门的footer标签而已,链接的语法和导航差不多,这里不赘述了。

 <footer class="border-top footer text-muted"><div class="container">&copy; 2024 - WebApplicationDemo - <a asp-area="" asp-controller="Home123" asp-action="Privacy">Privacy</a></div></footer>

(3)privacy文件

@{ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1><p>Use this page to detail your site's privacy policy.</p>

看到这个文件的内容,我们发现和index文件没有几乎差别,仅仅把title的值设置为了Privacy Policy而已,这里就不赘述了。

(4)、views下剩余的几个辅助文件

在share文件夹下还有两个文件_ViewStart.cshtml、_ViewImports.cshtml,我们放在下一篇博文继续讲解。
至于Error.cshtmlh和_ValidationScriptsPartial.cshtml需要配合models来讲解,也放在下一篇博文继续讲解。

3、Controller文件夹

我们在controller和Models中寻找index的身影的时候,只有Controller下有一个homeController,很显然,它跟index有着紧密的联系,我们来看看它的代码内容:

namespace WebApplicationDemo.Controllers
{public class HomeController : Controller{private readonly ILogger<HomeController> _logger;public HomeController(ILogger<HomeController> logger){_logger = logger;}public IActionResult Index(){return View();}public IActionResult Privacy(){return View();}[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]public IActionResult Error(){return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });}}
}

接下来,我们来逐句的解释上面的代码:

public class HomeController : Controller

声明了一个名为HomeController的公共类,它继承自Controller基类。这表明这个类是一个 ASP.NET Core 的控制器,用于处理 HTTP 请求。

private readonly ILogger<HomeController> _logger;

声明了一个私有的只读字段_logger,类型为ILogger<HomeController>。这是一个日志记录器,用于记录与这个控制器相关的日志信息。

public HomeController(ILogger<HomeController> logger)

定义了HomeController类的构造函数,它接受一个ILogger<HomeController>类型的参数。这是依赖注入的一种方式,ASP.NET Core 框架会在创建HomeController实例时自动提供一个合适的日志记录器实例。

_logger = logger;

在构造函数中将传入的日志记录器参数赋值给_logger字段,以便在控制器的方法中使用。

public IActionResult Index()

定义了一个名为Index的公共方法,返回类型为IActionResult。这个方法将处理指向“/Home/Index”的 HTTP 请求。这就和_layout中的navitem中的内容对应上了。

return View();

返回一个视图结果,表示调用这个方法时将渲染一个视图并返回给客户端。具体渲染哪个视图取决于方法名和约定,通常会查找与方法名相同的视图文件(例如“Index.cshtml”)。

public IActionResult Privacy()

类似地,定义了一个处理“/Home/Privacy”请求的方法。

[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()

定义了一个处理错误情况的方法Error,并应用了ResponseCache特性来禁用响应缓存。这意味着这个方法返回的错误页面不会被缓存。

return View(new ErrorViewModel { RequestId = Activity.Current?.Id?? HttpContext.TraceIdentifier });

返回一个包含错误信息的视图结果。这里创建了一个ErrorViewModel的实例,并将请求 ID 设置为当前活动的 ID(如果存在),否则使用 HTTP 上下文的跟踪标识符。这个错误视图可能在_layout.cshtml中通过某种方式被呈现,或者在特定的错误页面视图(例如“Error.cshtml”)中与_layout.cshtml结合使用。
文章原出处:https://haigear.blog.csdn.net/article/details/143302142

关于路由的修改

只要有Controller配合view就可以实现页面的路由访问了。如果我们有了自己的控制器和视图,需要修改项目默认的路由可以按照下面的方式修改:

a、在_layout.cshtml中的修改
假设你要将主页链接指向一个名为CustomPage的控制器的Index方法,那么可以在导航栏部分找到类似于以下的代码:
html
复制

   <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>

将其修改为:

   <a class="nav-link text-dark" asp-area="" asp-controller="CustomPage" asp-action="Index">Custom Home</a>

如果导航有多个部分,那就要逐一修改。
如果在整个布局中有对 “Home” 特定的引用,比如在面导航等地方,也需要相应地将其改为 “CustomPage” 相关的引用。
b、在Program.cs中的修改
在Program.cs中,通常在创建应用程序构建器和配置请求管道的部分不需要对主页的修改进行特定的更改。但是,如果你的自定义页面需要特定的服务注册或者中间件配置,可以在以下部分进行相应的修改controller:

app.MapControllerRoute(name: "default",pattern: "{controller=CustomPage}/{action=Index}/{id?}");

4、Models文件夹

Models文件夹中是所有文件夹中最简单的,因为里面默认情况下就一个erromodel.cs文件,正常的项目,我们都会根据我们的需要来建立一些业务模型的。如果我们有需要就可以建一个对应的模型。我们将这个内容放到下一篇博文来讲解。因为这篇文博实在有点长了。
请继续关注:
《完全透彻了解一个asp.net core MVC项目模板2》:
https://haigear.blog.csdn.net/article/details/143316084

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461929.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在米尔电子MPSOC实现12G SDI视频采集H.265压缩SGMII万兆以太网推流

1. 引言 随着网络视频平台的发展&#xff0c;用户对于4K高清画质的需求日益增长。然而&#xff0c;许多用户发现&#xff0c;即使购买了视频平台的会员&#xff0c;观看4K内容时画质却不如预期&#xff0c;有时甚至还会出现模糊、卡顿的情况。这种现象背后涉及到视频编码、网络…

Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)

1.基于小波变换的阈值收缩法去噪 该方法利用小波变换分离出信号中的噪声成分&#xff0c;并通过设置合适的阈值对小波系数进行收缩&#xff0c;保留主要信息的同时&#xff0c;去除噪声。 %基于小波变换的阈值收缩法去噪算法 clear clc Iimread(nana.png); X im2double(I); …

HTB:Analytics[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many open TCP ports are listening on Analytics? 2.What subdomain is configured to provide a different application on the target web server? 3.What application is running on data.analytical.htb? 4.What version of…

「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解

本篇将详细介绍鸿蒙应用开发中的 Text 和 Button 组件。通过本篇内容,你将学习如何使用 Text 组件显示文本、格式化文本样式,以及如何使用 Button 组件处理点击事件并自定义样式。掌握这些基本组件的用法将为后续的 UI 开发奠定基础。 关键词 Text 组件Button 组件样式设置事…

05-07实现面向对象领域模型-停车案例

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 源代码地址&#xff1a;https://github.com/ByteBlizzard 本篇文章是讲视频中的3期内容合并为一起。 文章目录 需求模型命令聚合领域事…

如何批量裁剪图片?5个软件帮助你快速进行图片裁剪

如何批量裁剪图片&#xff1f;5个软件帮助你快速进行图片裁剪 批量裁剪图片可以通过多种工具轻松实现&#xff0c;以下5个软件可以帮助你快速裁剪大量图片&#xff1a; 万能图片编辑器 这是一款支持批量图像处理的多功能小工具&#xff0c;功能丰富且界面简单&#xff0c;支持…

vxe-table v4.8+ 与 v3.10+ 虚拟滚动支持动态行高,虚拟渲染更快了

Vxe UI vue vxe-table v4.8 与 v3.10 解决了老版本虚拟滚动不支持动态行高的问题&#xff0c;重构了虚拟渲染&#xff0c;渲染性能大幅提升了&#xff0c;行高自适应和列宽拖动都支持&#xff0c;大幅降低虚拟渲染过程中的滚动白屏&#xff0c;大量数据列表滚动更加流畅。 自适…

期权懂|开通ETF股票期权需要什么条件?ETF股票期权佣金是多少?

期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 开通ETF股票期权需要什么条件&#xff1f;ETF股票期权佣金是多少&#xff1f; 一、开通ETF股票期权需满足以下条件&#xff1a; ‌&#xff08;1&#xff09;资金要求‌&#xf…

Lucene的概述与应用场景(1)

文章目录 第1章 Lucene概述1.1 搜索的实现方案1.1.1 传统实现方案1.1.2 Lucene实现方案 1.2 数据查询方法1.1.1 顺序扫描法1.1.2 倒排索引法 1.3 Lucene相关概念1.3.1 文档对象1.3.2 域对象1&#xff09;分词2&#xff09;索引3&#xff09;存储 1.3.3 常用的Field种类 1.4 分词…

在服务器运维过程中,发现服务器时间倒退以及DNS无法解析域名造成yum不可用的问题解决

目录 一.问题描述 二.问题排查过程 2.1yum下载NTP 2.2排查DNS 三.问题解决过程 3.1修复DNS 3.2更新yum源 3.3下载ntp 四.问题解决结果 4.1ntp服务情况检查 4.2服务器时间检查 4.3软件系统时间检查 一.问题描述 对服务器进行运维的过程中&#xff0c;发现服务器时间…

Redis高频面试题

一、Redis有什么好处? 高性能:Redis是一个基于内存的数据存储系统,相比于传统的基于磁盘的数据库系统,它能够提供更高的读写性能。支持丰富的数据类型:Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,这使得它可以用于多种不同的应用场景。持久化:Re…

[POI2014] PTA-Little Bird(单调队列优化 DP)

luogu 传送门https://www.luogu.com.cn/problem/P3572 解题思路 先设 表示到 的最小劳累值。 很容易得出转移&#xff1a; 其中 由 和 的大小关系决定&#xff0c;并且 。 很显然&#xff0c;直接暴力是 的&#xff0c;会超时。 于是&#xff0c;考虑优化。 我们发现…

如何在Linux系统中使用Apache HTTP Server

如何在Linux系统中使用Apache HTTP Server Apache简介 安装Apache 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动Apache服务 验证Apache是否正在运行 访问Apache默认页面 配置Apache虚拟主机 创建虚拟主机配置文件 示例虚拟主机配置 创建网站根目录 准备静态网站内…

ISME Comm | 西南大学时伟宇团队在功能基因水平揭示植被演替过程中磷限制对土壤微生物碳代谢潜力的抑制作用机制

本文首发于“生态学者”微信公众号&#xff01; 植被群落长期演替过程中&#xff0c;生态系统普遍受养分限制&#xff0c;微生物群落代谢功能在生态系统物质循环中尤为关键。西南大学时伟宇教授团队联合国内外学者&#xff0c;在功能基因水平&#xff0c;将微生物群落功能纳入生…

Unity控制物体透明度的改变

目录标题 效果图代码调用注意事项 效果图 代码 注意&#xff1a;在控制全部的模型进行透视时&#xff0c;已经隐藏的子物体仍然要处理。 using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; public class FadeModel {priva…

工业网络监控中的IP保护与软件授权革新

未来的智能工厂离不开稳定而高效的通信网络&#xff0c;这些网络在支撑生产流程的同时&#xff0c;也面临着复杂的管理与安全挑战。PROCENTEC推出了一系列硬件和软件产品&#xff0c;如Atlas、Mercury和Osiris&#xff0c;以提供全面的网络监控和故障排除能力。然而&#xff0c…

springboot 整合 抖音 移动应用 授权

后端开发&#xff0c;因为没有JavaSDK&#xff0c;maven依赖&#xff0c;用到的是API接口去调用 抖音API开发文档 开发前先申请好移动应用&#xff0c;抖音控制台-移动应用 之后还需要开通所有能开通的能力 拿到应用的 clientKey 和 clientSecret&#xff0c;就可以进入开发了 …

后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)

1 Spring Event框架 除了记录程序运行日志&#xff0c;在实际项目中一般还会记录操作日志&#xff0c;包括操作类型、操作时间、操作员、管理员IP、操作原因等等&#xff08;一般叫审计&#xff09;。 操作日志一般保存在数据库&#xff0c;方便管理员查询。通常的做法在每个…

视频设备一体化监控运维方案

随着平安城市、雪亮工程等项目建设的号召&#xff0c;视频监控系统的建设如火如荼地开展。无论在公共场所、企业单位、住宅小区、矿山工地还是交通枢纽&#xff0c;视频监控系统已成为保障安全、维护秩序和提升管理效率的重要工具。但由于对视频监控系统中的前端设备&#xff0…

二十八、Python基础语法(面向对象-下)

一、self 从函数的语法上来看, self 是形参 , 是一个普通的参数,那么在调用的时候,就需要传递实参值。从调用上看, 我们没有给 self 这个形参传递实参值, 但是 Python 解释器会自动的将调用这个方法的对象&#xff0c;作为实参值传递给 self。 class Dog:def eat(self):print…