Django系列:Django简介与MTV架构体系概述

news2024/12/22 19:17:34
Django系列
Django简介与MTV架构体系概述

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/132890054


【介绍】:Django简介与MTV架构体系概述。

下一节:《 Django开发环境配置

在这里插入图片描述


1. 概述

1.1 为什么想写Django

记得2019年时初学Django,这也是我学习的第一个Web后端框架,也是至今为止我最喜欢的一个。19年时,当时发的第一篇博客就是关于Django中如何解决跨域问题的总结。近几年做过很多不同领域的项目,包括前端、桌面端、移动端的应用开发,应用开发中都会设计到一个共同的问题,就是数据从哪里来。

在软件应用开发中,关于数据的处理可以分成两大领域,一个是领域是处理内存中的数据,我们称之为状态管理;另一个领域是数据的持久化。当然,如果你说我做的时一个本地应用,比如单机游戏、计算器使用程序,等等,他们所涉及的数据处理往往集中与状态管理,以及简单的本地存储。但是如果你做的应用是一个网络应用,则一般不可避免要使用数据库,尤其是基于客户端-服务器体系的软件模式。

在网络应用中,数据的来源和管理变得更加复杂。这时候,我们需要一个强大的后端框架来帮助我们处理各种数据操作,包括接收、存储、检索和传输数据。这正是Django的用武之地。

Django是一个高度可定制的Python后端框架,它提供了丰富的功能和工具,用于处理与数据相关的所有任务。不管你是构建社交媒体平台、电子商务网站、博客、在线学习平台还是任何其他类型的Web应用,Django都可以成为你的得力助手。

在前后端分离的开发体系中,后端的作用至关重要。它充当着数据的守护者和处理者,负责接受前端发送的请求,处理这些请求,并将响应返回给前端。这种分离的开发模式使前端工程师和后端工程师能够独立开发各自的部分,从而提高了开发效率和代码的可维护性。

1.2 Django框架的优缺点

Django的优势在于其强大的数据处理能力。它提供了内置的数据库支持,你可以选择使用不同的数据库后端(如SQLite、MySQL、PostgreSQL等),根据项目的需求进行配置。Django的ORM(对象关系映射)让你可以使用Python类来表示数据库中的表格和关系,而不需要编写复杂的SQL查询语句。这简化了数据持久化的过程,并提高了代码的可读性。

此外,Django还提供了许多其他功能,如用户认证、安全性、缓存管理、国际化等,使开发者能够专注于业务逻辑而不必担心底层的技术细节。

总结起来,Django框架具体有以下优点。

概述描述
完整的开发框架Django提供了一个完整的开发框架,包括ORM(对象关系映射)、认证、管理后台、表单处理、国际化等功能。这意味着你可以更专注于业务逻辑,而不必从头构建这些常见的功能。
高度可定制虽然Django提供了很多内置功能,但它也允许开发者高度定制应用程序。你可以轻松地根据项目需求添加自定义模型、视图、中间件等。
强大的社区支持Django拥有一个庞大的活跃社区,这意味着你可以找到大量的文档、教程、第三方库和插件,以及得到问题的快速解答。
安全性Django有内置的安全性功能,包括防止SQL注入、跨站点脚本攻击(XSS)、跨站点请求伪造(CSRF)等。这些功能有助于保护应用程序免受常见的Web安全漏洞。
ORM(对象关系映射)Django的ORM允许你使用Python类来表示数据库模型,而不需要编写SQL语句。这简化了数据持久化的过程,提高了代码的可读性和可维护性。
丰富的第三方库Django生态系统中有许多第三方库和插件,可以扩展其功能,例如Django REST framework用于构建RESTful API,Django CMS用于内容管理等。

同时也必须要指出,作为一款重型Web框架,他虽然提供了强大丰富的功能,但也有显而易见的一些缺点。

概述描述
学习曲线对于初学者来说,Django的学习曲线可能相对陡峭。尤其是对于那些没有经验的开发者,需要一些时间来理解框架的各个方面。
过于重量虽然Django的完整性是其优点之一,但对于一些小型项目来说,它可能显得过于重量级。对于一些特定需求的微服务项目,选择更轻量级的框架可能更合适。
不适合实时应用Django在处理实时应用和长连接方面表现不佳。如果你的项目需要大规模实时数据处理,可能需要考虑其他框架或技术栈。
某些功能需要第三方库尽管Django提供了很多功能,但某些高级功能可能需要依赖第三方库。这可能会导致项目的复杂性增加,需要额外的配置和集成工作。

接下来,本文将探讨如何配置Django的开发环境,以便你能够开始编写和测试自己的Web应用程序。在进行这一步之前,请确保你已经安装了Python,因为Django是一个基于Python的框架。

2. MTV架构

2.1 概述

2.1.1 是什么 MTV

Django的MTV架构是其成功的关键之一,它将应用程序的不同方面明确定义并分离开来,从而提供了一个强大而有组织的开发框架。

MTV 代表了 Model-Template-View,是Django框架的核心设计理念之一,它有助于将应用程序的不同组成部分分离开来,以提高代码的可维护性和可扩展性。

2.1.2 MTV 与 MVC的关系

广义上看,Django的MTV也属于MVC体系。在传统的MVC模式中,有三个主要组件:
Model(模型): 负责表示和管理应用程序的数据。
View(视图): 负责用户界面的呈现,将数据从模型传递到用户界面。
Controller(控制器): 负责接受用户输入,处理业务逻辑,并调用模型和视图来执行相应的操作。
MVC模式的关键思想是将应用程序分为 数据用户界面控制逻辑 三个独立的组件。

实际上,Django中也是如此,只不过它在术语和组织上有所不同:

Model(模型): 与MVC中的模型类似,负责表示和管理应用程序的数据。模型定义了数据库结构和数据之间的关系。
Template(模板): 与MVC中的视图(View)类似,但在Django中,模板用于呈现用户界面。它包含了 HTML 和 Django 模板语言的标记,用于渲染页面并显示数据。不过需要指出是,在如今的实际开发中,都采用前后端分离的体系,因此Template基本上是不怎么使用的(仅限于后端自己玩玩即可),前端框架如Vue、React等都有自己的模板语法,如React中使用的JSX/TSX,Vue中的单文件组件及其各种模板语法,开发效率都远远高于后端框架,毕竟后端的模板本质上都是拼凑和处理html、js、css字符串。
View(视图): 与MVC中的控制器(Controller)类似,但在Django中,视图负责接受HTTP请求,处理业务逻辑,然后使用模型和模板来生成HTTP响应。

之所以这样组术语,因为Django希望强调它的几大主要功能,比如说它的其功能强大的模板层,提供了 开箱即用模板语法。事实上,在Django中多数功能都是开箱即用的,这在后续文章的详细介绍中将会看到。

接下来,本节将分别介绍绍Django的MTV架构中的每个组成部分。

2.2 Model(数据模型层)

模型是Django应用程序的数据存储部分。它定义了应用程序的数据结构,包括数据库表格、字段以及表格之间的关系。
模型通常由Python类表示,这些类继承自Django的模型基类。每个模型类代表了一个数据库表格。使用模型类,你可以定义数据的结构、验证规则、关系和数据库查询方法。Django的ORM(对象关系映射)允许你通过Python代码来操作数据库,而不需要直接编写SQL语句。

当使用Django开发Web应用程序时,模型(Model)是数据层的核心组件,它提供了一种高级、Pythonic 的方式来管理应用程序的数据。下面我们将初步从不同角度体验一下Django的Model层。

数据结构定义

在Django中,每个模型类代表了应用程序中的一个数据结构,通常对应数据库中的表格。这些模型类是Python类,它们定义了表格的字段和字段的数据类型。例如,你可以创建一个模型类来表示用户(User):

from django.db import models

class User(models.Model):
    username = models.CharField(max_length=100)
    email = models.EmailField()
    date_joined = models.DateTimeField(auto_now_add=True)

这个模型定义了一个名为 User 的数据结构,包括了用户名(username)、电子邮件(email)和注册日期(date_joined)等字段。

验证规则

Django模型允许你定义字段的验证规则,以确保数据的完整性和一致性。例如,你可以要求电子邮件字段的值必须是有效的电子邮件地址,并且用户名字段的长度不得超过一定限制。这些验证规则可以在模型类中以参数的形式定义。

数据表之间的关系

在现实世界的应用程序中,数据之间通常存在复杂的关系。Django模型允许你定义不同表格之间的关系,如 一对多多对一多对多 关系。这些关系可以通过 字段 来表示,如 ForeignKeyManyToManyField

例如,如果你的应用程序需要表示用户和他们的文章之间的关系,可以使用 ForeignKey 字段:

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)

这里的author字段是一个外键,它建立了Article模型和User模型之间的关系,表示每篇文章都有一个作者,作者是一个User对象。

数据库查询方法

Django的 ORM 允许你通过Python代码进行数据库查询,而不需要编写原生的SQL语句。你可以使用模型类的方法来执行常见的查询操作,如过滤、排序、聚合等。这使得数据的检索和操作变得更加容易和可读。

例如,你可以使用以下代码来获取所有用户名以字母顺序排列的用户:

users = User.objects.order_by('username')

这里的User.objects是一个查询集(QuerySet),它允许你链式调用多个查询方法,以便构建复杂的查询。

数据库迁移

Django的模型还包括一个重要功能,即数据库迁移。它可以自动检测模型类的变化,并生成相应的数据库迁移文件,以便你可以轻松地将数据库模式更新到最新版本,而无需手动编写SQL迁移脚本。

例如,当你添加一个新的字段或修改字段的属性时,Django可以生成迁移文件,然后你可以运行迁移命令来更新数据库:

python manage.py makemigrations  # 生成迁移文件
python manage.py migrate         # 应用迁移以更新数据库

总而言之,Django的模型提供了一个强大的工具,用于定义数据结构、验证数据、建立数据之间的关系,并且可以通过Python代码进行数据库查询。这种高级的ORM能力大大简化了数据层的开发和维护,同时提高了代码的可读性和可维护性。

2.3 View(视图层)

Django视图层是Django应用程序的逻辑处理部分。它接收来自用户的HTTP请求,执行相应的操作,然后返回HTTP响应。视图层通常是Python函数(基于函数的视图)或类(基于类的视图),它们处理URL映射和请求处理逻辑。每个视图函数接收HTTP请求,执行必要的数据处理,然后通过模板生成响应。

视图层的任务包括从数据库中检索数据、对数据进行操作、验证用户身份、渲染模板以及返回HTTP响应。Django的URL映射机制将不同的URL路由到相应的视图函数。

视图函数和视图类

视图层通常由Python函数或类组成,它们被称为视图函数或视图类。

基于函数的视图(Function-Based Views)

这是最常见且简单的形式,其中视图是一个Python函数,接收HTTP请求作为参数,并返回HTTP响应。例如:

from django.http import HttpResponse

def my_view(request):
    # 处理请求的逻辑
    return HttpResponse("Hello, World!")

基于类的视图(Class-Based Views)

这是一种更高级的方式,它允许你使用类来组织视图逻辑,每个类的方法对应于不同的HTTP请求方法(如GET、POST)。这提供了更好的代码组织和可重用性。例如:

from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        # 处理GET请求的逻辑
        return HttpResponse("Hello, World!")

URL映射

Django的URL映射机制将不同的URL路由到相应的视图函数或视图类。通过在Django应用程序的URL配置中定义URL模式(URL patterns),你可以将特定的URL路径映射到特定的视图。这允许你组织和管理应用程序的URL结构。

请求和响应处理

DjangoURL 映射机制将不同的URL路由到相应的视图函数或视图类。
通过在 Django 应用程序的URL配置中定义 URL模板(URL patterns),你可以将特定的 URL 路径映射到特定的视图。这允许你组织和管理应用程序的 URL 结构。

HTTP响应

视图函数或视图类的最终任务是返回 HTTP响应对象 。HTTP响应包含了要发送回客户端的内容,如HTML内容、JSON数据等。
通常,你可以使用Django提供的 HttpResponse类 来创建响应对象,或者使用更高级的响应类来处理不同的情况,如JsonResponseHttpResponseRedirect 等。

其中,HttpResponse 类用于创建基本的 HTTP 响应对象,通常用于返回 HTML 内容;JsonResponse 类用于创建包含 JSON 数据的 HTTP 响应对象。这在构建 API 或需要返回结构化数据的情况下非常有用;而HttpResponseRedirect 类用于重定向用户到另一个URL。这在处理表单提交后通常用于将用户重定向到成功页面或其他页面。

2.4 Template(模板层)

Django模板层是Django应用程序的用户界面部分。它定义了应用程序的前端布局和显示方式。模板层中通常是HTML文件,但其中可以包含Django模板语言的标记和逻辑。Django模板语言允许你嵌入动态数据和逻辑控制,以便在渲染时生成具体的HTML内容。使用模板,你可以将数据从后端传递到前端,以便在浏览器中呈现给用户。模板层的重要任务是将数据和用户界面有效地结合起来。

虽然Django中提供了强大的模板语法功能,但是在前后端分离的大环境下,很多情况下我们并不怎么使用它。事实上,是否使用模板语法,理解和评价Django的模板语法以及前后端分离的实践,是一个重要的话题,它取决于不同方面的考量。读者可以参考下面的不同角度决定是否需要使用Django的模板层。

1. 模板语法的优点

项目描述
快速原型设计模板语法允许后端开发人员快速创建原型并生成基本的前端界面,这在项目早期或需要快速迭代的情况下可能很有价值。对于一些简单的页面,使用模板语法可能更加高效
简化小规模项目对于小规模项目或内部工具,Django的模板语法可以提供足够的功能,无需引入复杂的前端框架。这可以减少项目的复杂性和维护成本
无需前端开发人员一些项目可能没有专门的前端开发人员或资源。在这种情况下,后端开发人员可以使用模板语法来处理整个应用程序的用户界面

2. 前后端分离的优势

项目描述
分工合作前后端分离允许前端和后端开发人员专注于各自的领域。前端开发人员可以更好地处理用户界面的复杂性,而后端开发人员可以专注于业务逻辑和数据处理
更好的性能前后端分离允许前端应用程序与后端API分离运行,这有助于提高应用程序的性能和加载速度。前端应用程序可以被缓存,并且可以独立扩展和优化
灵活性和创新使用现代前端框架如React、Vue等,开发人员可以更轻松地实现复杂的用户交互和动画效果。这些框架提供了更多的灵活性和创新空间

3. Django模板使用场景

项目描述
适用于小型项目和原型Django模板语法在小型项目、原型设计或内部工具开发中可能仍然有用。这些情况下,可以快速构建简单的用户界面而无需引入前端框架
前后端分离对大型应用更合适对于大型应用、高性能要求、复杂交互和多平台支持等场景,前后端分离通常更合适。现代前端框架提供了更多的工具和性能优势

4. 其它建议

  • 混合使用: 在一些项目中,混合使用Django的模板语法和前端框架可以是一个有效的策略。你可以选择性地使用Django渲染部分页面,而使用前端框架构建复杂的单页应用。
  • 根据需求选择: 最终,选择是否使用Django的模板语法或前后端分离取决于项目需求、团队技能和时间预算。在选择时应权衡各自的优缺点。

总的来说,Django的模板语法具有一些优点,比如在小型项目和原型设计中,但前后端分离的做法在大型应用和复杂用户界面方面更具竞争力。开发团队应根据具体项目需求和资源来做出决策,并根据情况选择使用何种技术和工具。

3. 学习Django的建议

3.1 开始学习Django

Django是基于Python的Web框架,所以首先需要熟悉Python编程语言。Django官方文档是学习Django的最佳资源之一。开始时,阅读官方教程是一个很好的起点。官方文档还提供了详细的参考资料,涵盖了Django的每个方面。

Django官方网站地址为:https://docs.djangoproject.com/,你可以在Document标签页阅读其文档:https://docs.djangoproject.com/en/4.2/intro/overview/。

一旦你理解了Django的基础概念,尝试构建一些小型项目来实践你的知识。这有助于你熟悉Django的工作流程。

3.2 关于 Django 文档

Django的官方文档分为以下几个部分,可以参考查询相应的页面。

1. 入门

  • From scratch(从零开始): 适用于初学Django或编程的人。这是你开始的地方,提供了有关Django的概览和安装的信息。

  • Tutorial(教程): 分为多个部分,通过一系列步骤引导你创建一个Web应用程序。教程包括请求和响应、模型和管理站点、视图和模板、表单和通用视图、测试、静态文件、自定义管理站点以及添加第三方包等主题。

  • Advanced Tutorials(高级教程): 包括如何编写可重用应用程序以及编写Django的第一个补丁的信息。

2.模型层

  • Models(模型): 介绍了Django提供的数据结构化和操作的抽象层,包括模型、字段类型、索引、元选项和模型类。

  • QuerySets(查询集): 学习如何使用查询集进行数据库查询,包括查询方法参考和查找表达式。

  • Model instances(模型实例): 讲解了如何访问相关对象和实例方法。

  • Migrations(迁移): 介绍了Django的迁移系统,包括迁移概述、操作参考、模式编辑器和编写迁移。

  • Advanced(高级): 涵盖了管理器、原始SQL、事务、聚合、搜索、自定义字段、多数据库、自定义查找、查询表达式、条件表达式和数据库函数等高级主题。

  • Other(其他): 包括支持的数据库、遗留数据库、提供初始数据、优化数据库访问以及特定于PostgreSQL的功能等信息。

3.视图层

  • 基础知识: 学习有关视图的基础知识,包括URL配置、视图函数、快捷方式、装饰器和异步支持。

  • 参考: 包括内置视图、请求/响应对象和模板响应对象的参考。

  • 文件上传: 了解文件上传的概述、文件对象、存储API、文件管理以及自定义存储。

  • 基于类的视图: 概述了基于类的视图,包括内置显示视图、内置编辑视图、使用混合、API参考以及扁平索引。

  • 高级: 包括生成CSV和生成PDF等高级主题。

  • 中间件: 包括中间件概述和内置中间件类。

4.模板层

  • 基础知识: 介绍了模板层的概述。

  • **针对设计师:** 提供了设计师友好的语法概述、内置标签和过滤器以及人性化方面的信息。

  • **针对程序员:** 包括模板API、自定义标签和过滤器以及自定义模板后端方面的信息。

5.表单

  • The basics(基础知识): 介绍了Django提供的丰富框架,用于创建表单和操作表单数据。

  • Advanced(高级): 包括用于模型的表单、媒体集成、表单集和自定义验证等高级主题。

6.开发过程

  • Settings(设置): 概述了Django设置以及完整的设置列表。

  • Applications(应用程序): 介绍了应用程序的概述。

  • Exceptions(异常): 概述了异常的信息。

  • django-admin 和 manage.py: 包括django-admin和manage.py的概述以及如何添加自定义命令的信息。

  • 测试: 学习有关Django应用程序开发和测试的各种组件和工具。

  • 部署: 包括部署的概述、WSGI服务器

、ASGI服务器、部署静态文件、通过电子邮件跟踪代码错误以及部署检查表等信息。

7.管理界面

  • 管理站点: 查找有关自动化管理界面的所有信息,这是Django中最受欢迎的功能之一。

  • 管理操作: 学习有关管理操作的信息。

  • Admin documentation generator(管理文档生成器): 包括有关管理文档生成器的信息。

8.安全性

  • 安全性概述: 介绍了在Web应用程序开发中安全性的重要性以及Django提供的多种保护工具和机制。

  • Django中披露的安全问题: 包括Django中已披露的安全问题的信息。

  • 防止点击劫持攻击(Clickjacking protection): 介绍了防止点击劫持攻击的保护方法。

  • 跨站点请求伪造保护(CSRF):](https://docs.djangoproject.com/en/4.2/ref/csrf/) 了解跨站点请求伪造保护的方法。

  • 加密签名: 学习有关加密签名的信息。

  • 安全性中间件: 包括安全性中间件的信息。

9.国际化和本地化

  • 概述: 介绍了Django提供的强大的国际化和本地化框架,以帮助你开发多语言和多地区的应用程序。

  • 时区: 学习关于时区的信息。

10.性能和优化

  • 性能和优化概述: 包括一系列可帮助你提高代码运行效率、减少系统资源使用的技术和工具。

11.地理框架

  • GeoDjango: 旨在成为一款世界级的地理Web框架,目标是尽可能地简化GIS Web应用程序的构建,以及利用具备空间功能的数据的强大功能。

12.常见Web应用程序工具

  • 身份验证: 包括身份验证系统的概述、使用身份验证系统、密码管理、自定义身份验证和API参考。

  • 缓存: 学习有关缓存的信息。

  • 日志记录: 了解有关日志记录的信息。

  • 发送电子邮件: 包括发送电子邮件的信息。

  • RSS/Atom订阅源: 学习有关RSS/Atom订阅源的信息。

  • 分页: 了解分页的信息。

  • 消息框架: 学习关于消息框架的信息。

  • 序列化: 了解有关序列化的信息。

  • 会话: 学习关于会话的信息。

  • 网站地图: 包括网站地图的信息。

  • 静态文件管理: 了解有关静态文件管理的信息。

  • 数据验证: 学习有关数据验证的信息。

13.其他核心功能

  • 条件内容处理: 学习关于条件内容处理的信息。

  • 内容类型和通用关系: 了解内容类型和通用关系的信息。

  • 平面页面: 学习有关平面页面的信息。

  • 重定向: 包括重定向的信息。

  • 信号: 了解有关信号的信息。

  • 系统检查框架: 学习关于系统检查框架的信息。

  • 站点框架: 了解有关站点框架的信息。

  • Django中的Unicode: 学习有关Django中的Unicode的信息。

14.Django开源项目

  • 社区: 学习如何参与Django项目以及如何贡献,包括发布流程、团队组织、Django源代码存储库、安全策略以及邮件列表和论坛。

  • 设计理念: 了解Django项目的设计理念。

  • 文档: 关于本文档的信息。

  • 第三方分发: 包括第三方分发的信息。

  • Django的发展历程: 学习Django的API稳定性、发布说明和升级说明以及弃用时间表等信息。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业架构LNMP学习笔记43

memcached的使用: 命令行连接和操作: telnet连接使用: memcached默认使用启动服务占用tcp 11211端口,可以通过telnet进行连接使用。 安装telnet进行连接: 连接成功,敲击多次,如果看到error&…

Linux常用命令字典篇

Linux命令 1. 翻页查看文件 less [-N] 文件名:可以向后翻页,也可以向前翻页,-N表示显示行号 more 文件名:仅可以向后翻页 2. 端口占用信息查看 netstat -tunlp | grep 端口号:查看端口号对应的信息 lsof i: 端口号…

Marin说PCB之封装设计系列---(02)--异形焊盘的封装设计总结

每天下班回家看电视本来是一件很美好的事情,可是正当我磕着瓜子看着异人之下的时候,手机突然响起来了,我以为是我们组哪个同事找我呢。一接电话居然是我的老朋友陈世美陈总,江湖人称少妇杀手。给我打电话主要是说他最近遇到一个异…

vite和webpack的区别

vite和webpack的区别 1、前言2、Webpack2.1 Webpack简述2.2 Webpack常用插件 3、Vite3.1 Vite简述3.2 Vite插件推荐 4、区别4.1 开发模式不同4.2 打包效率不同4.3 插件生态不同4.4 配置复杂度不同4.5 热更新机制不同 5、总结 1、前言 Webpack和Vite是现代前端开发中非常重要的…

线性代数的本质(九)——二次型与合同

文章目录 二次型与合同二次型与标准型二次型的分类度量矩阵与合同 二次型与合同 二次型与标准型 Grant:二次型研究的是二次曲面在不同基下的坐标变换 由解析几何的知识,我们了解到二次函数的一次项和常数项只是对函数图像进行平移,并不会改变…

HSRP(热备份路由选择协议)的概念,原理与配置实验

作者:Insist-- 个人主页:insist--个人主页 梦想从未散场,传奇永不落幕,持续更新优质网络知识、Python知识、Linux知识以及各种小技巧,愿你我共同在CSDN进步 目录 一、了解HSRP协议 1. 什么是HSRP协议 2、HSRP协议的…

2023年主流固定资管理系统的特征

随着科技的不断发展,固定资产管理系统也在不断演进,以满足企业日益增长的管理需求。在2023年,主流固定资产管理系统将呈现出一些重要的特征,包括RFID功能、低代码平台功能和云计算功能。易点易动固定资产管理系统正是结合了这些特…

UWB芯片DW3000之PDOA测向实现源码

介绍 DW3000芯片的双天线端口特性可以测量无线输入信号的相位。当与天线响应的信息相结合时,这些信息可以用来帮助确定到达的方向和传输的位置。 根据设备的不同,将有一个或两个天线端口。具有两个天线端口的设备称为PDoA部件,而其他是非PDoA部件(见表1)。当涉及到到达相位…

算法分析与设计编程题 贪心算法

活动安排问题 题目描述 解题代码 vector<bool> greedySelector(vector<vector<int>>& intervals) {int n intervals.size();// 将活动区间按结束时间的从小到大排序auto cmp [](vector<int>& interval1, vector<int>& interval2…

(文末赠书)我为什么推荐应该人手一本《人月神话》

能点进来的朋友&#xff0c;说明你肯定是计算机工作的朋友或者对这本书正在仔细琢磨着的朋友。 文章目录 1、人人都会编程的时代&#xff0c;我们如何留存?2、小故事说明项目管理着为什么必看这本书3、如何评价《人月神话&#xff1a;纪念典藏版》4、本书的目录&#xff08;好…

模方新建工程时,显示空三与模型坐标系不一致怎么解决

答:检查空三xml与模型的metadata.xml的坐标系是否一致&#xff0c;metadata文件是否有在data目录外面。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.0新增单体化建模模块&#xff0c;…

无人机+三维实景建模助力古建筑保护,传承历史记忆

历史文化建筑&#xff0c;承载着过去各个时代的文化记忆。无论是保存还是修缮古建筑&#xff0c;都需要将其基本信息进行数字化建档&#xff0c;为修缮提供精准参考。根据住建部的要求&#xff0c;从2020年开始到2022年&#xff0c;全国需完成历史建筑100%测绘及系统录入工作&a…

OPENCV实现人类识别(包括眼睛、鼻子、嘴巴)

人脸识别步骤 # -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/14 """ import cv2 import numpy as np # load xml face_xml = cv2.CascadeClassifier(F:\\learnOpenCV\\opencv\\data\\haarcascades\\haarcascade_frontalface_defaul…

计算机提示vcomp120.dll丢失怎样修复,vcomp120.dll丢失的4个修复方法分享

随着科技的飞速发展&#xff0c;计算机已经成为了人们日常生活和工作中不可或缺的重要工具。在享受计算机带来的便利的同时&#xff0c;我们也会遇到各种各样的问题&#xff0c;其中计算机丢失vcomp120.dll文件就是一种常见的困扰。vcomp120.dll是 Visual C Redistributable 的…

【操作系统】聊聊协程为什么可以支撑高并发服务

在实际的业务开发中&#xff0c;比如针对一个业务流程&#xff0c;调用三方&#xff0c;然后存储数据&#xff0c;从oss上获取数据。其实都是进行的同步调用&#xff0c;说白了就是A完成之后&#xff0c;B在继续完成。如果整个过程中A、B、C 分别耗时100、300、200毫秒。那么整…

vue基础知识十:Vue中组件和插件有什么区别?

一、组件是什么 回顾以前对组件的定义&#xff1a; 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念&#xff08;组件&#xff09;来实现开发的模式&#xff0c;在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度&#xff0c;在保持接口不…

【VSCode】自动生成Jupyter(ipynb)文件的目录

下载插件 一键生成 然后就出来咯&#xff5e;

关于HTTP协议的概述

HTTP 的报文大概分为三大部分。第一部分是请求行&#xff0c;第二部分是请求的首部&#xff0c;第三部分才是请求的正文实体。 POST 往往是用来创建一个资源的&#xff0c;而 PUT 往往是用来修改一个资源的。 Accept-Charset&#xff0c;表示客户端可以接受的字符集。防止传过…

Python工程师Java之路(p)Module和Package

文章目录 1、Python的Module和Package2、Java的Module和Package2.1、Module2.1.1、分模块开发意义2.1.2、模块的调用 2.2、Package Module通常译作模块&#xff0c;Package通常译作包 1、Python的Module和Package Python模块&#xff08;Module&#xff09;&#xff1a;1个以.…

模拟实现C语言--strlen函数

模拟实现C语言–strlen函数 模拟实现C语言--strlen函数一、strlen函数是什么&#xff1f;二、strlen函数的模拟实现2.1 计数器方式实现strlen函数2.2 不创建临时变量计数器方式实现strlen函数2.3 指针-指针方式实现strlen函数 三、strlen函数的返回类型 一、strlen函数是什么&a…