Python Web开发记录 Day8:Django part2 部门管理

news2024/9/25 9:38:26

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪)
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

目录

        • 1、部门列表
        • 2、模板的继承
        • 3、添加部门
        • 4、编辑部门
        • 5、删除部门
        • 6、整体效果

在上一篇博客中我们简要了解了Django,并用它实现了几个案例,接下来将进入一个用户管理系统web项目的开发,本篇内容主要围绕部门管理,后续篇章中我们会继续做用户管理、靓号管理、管理员管理、账户登录、以及Ajax等内容,接下来咱们就一起开始动手完成部门管理界面、功能的实现。

1、部门列表

首先我们先拟定一个草图,大致规划一下要实现成什么模样:
image-20240308144423959
补充一点儿,在Django项目中有几个常用的.py文件和templates目录,此处来解释一下它们几个的作用:

  • urls.py: 这个文件负责项目的URL声明,也就是网站的“目录”。它告诉Django某个特定的URL模式(通过正则表达式或路径表达式定义)被指向哪个视图(View)。当用户访问一个URL时,Django会使用urls.py文件来寻找匹配的URL模式,并将请求转发给相应的视图函数进行处理。

  • views.py: 视图文件是Django应用的核心之一,它接收用户的请求,并返回相应的响应。简单来说,视图决定了用户请求应该如何被处理和响应。在视图中,你可以执行如查询数据库、处理表单数据、生成需要返回给用户的HTML页面或其他类型的响应等操作。

  • models.py: 这个文件定义了应用中的数据模型,即你的数据库表格以及它们之间的关系(如一对多、多对多等)。Django的ORM(对象关系映射)允许你以Python类的形式定义你的数据模型,而无需直接编写SQL语句。当定义好模型后,Django可以帮助你自动地根据这些定义创建数据库表,以及执行数据查询和修改操作。

总的来说,urls.py定义了URL路径和视图之间的映射,views.py处理请求并返回响应,models.py定义了应用的数据结构。这三个组件共同工作,使得Django框架能够以一种结构化和高效的方式开发动态网站和应用。

  • templates文件夹:文件下的HTML文件扮演的是模板的角色。这些模板文件定义了网页的结构和布局,它们通常包含HTML代码,并且可以包含Django模板语言(DTL)标签过滤器,这些特殊的语法让你能够插入Python变量的值、执行循环、条件判断等动态内容的生成。

简单来说,templates下的HTML文件让你能够以一种灵活而且高效的方式设计和修改你的网页外观和内容,而无需每次都手动编写或修改大量的HTML代码。通过将逻辑(在视图中处理)和表示(在模板中定义)分离,Django的模板系统支持了网站的快速开发和维护。

然后接下来以部门列表为例,截图详细展示一下这部分实现的思路:

0.在models.py中定义数据模型部门表Department,通过此模型,Django可以帮助咱们自动地根据定义完成创建数据库表等操作

在这里插入图片描述
models.py

from django.db import models

class Department(models.Model):
    """部门表"""
    title = models.CharField(verbose_name='标题', max_length=32)

    def __str__(self):
        return self.title

1.在urls.py中添加部门列表的路径depart/list/,并告诉该路径指向的视图view.depart_list

image-20240308160833164
urls.py

from django.urls import path
from api.views import depart,user,pretty

urlpatterns = [
    # 部门管理
    path("depart/list/", depart.depart_list),
]

2.在views.py中写出对应的函数,发出请求,并返回响应depart_list.html

image-20240308160851697
views.py

def depart_list(request):
    """部门列表"""
    queryset = models.Department.objects.all()

    page_object = Pagination(request, queryset, page_size=2)
    page_object.html()

    context = {
        "queryset": page_object.page_queryset,
        "page_string": page_object.page_string,
    }
    return render(request, 'depart_list.html', context)

3.创建templates目录下模版html文件depart_list.html,以此定义部门列表的网页结构和布局。

image-20240308160913791
layout.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">
    <style>
        .navbar {
            border-radius: 0;
        }
    </style>
    {% block css %}

    {% endblock %}
</head>
<body>
<nav class="navbar navbar-default">
    <div class="container">

        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">用户管理系统</a>
        </div>

        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="/depart/list">部门管理</a></li>
                <li><a href="/user/list">用户管理</a></li>
                <li><a href="/pretty/list">靓号管理</a></li>

                <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="#">登录</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">张三 <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">个人资料</a></li>
                        <li><a href="#">我的信息</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">注销</a></li>
                    </ul>
                </li>

            </ul>
        </div>
    </div>
</nav>

<div>
    <div class="container">
        {% block content %}{% endblock %}
    </div>
</div>

<script src="{% static 'js/jquery.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
{% block js %}

{% endblock %}
</body>
</html>

depart_list.html

{% extends 'layout.html' %}
{% block content %}
    <div class="container">
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/depart/add/">
                <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
                新建部门
            </a>
        </div>

        <div class="panel panel-default">
            <!-- Default panel contents -->
            <div class="panel-heading">
                <span class="glyphicon glyphicon-list" aria-hidden="true"></span>
                部门列表
            </div>

            <!-- Table -->
            <table class="table table-bordered">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>名称</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in queryset %}
                <tr>
                    <th>{{ obj.id }}</th>
                    <td>{{ obj.title }}</td>
                    <td>
                        <a class="btn btn-primary btn-xs" href="/depart/{{ obj.id  }}/edit/">编辑</a>
                        <a class="btn btn-danger btn-xs" href="/depart/delete/?nid={{ obj.id }}">删除</a>
                    </td>
                </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
            <ul class="pagination">
            {{ page_string }}
        </ul>
    </div>
{% endblock %}

效果:

image-20240308161027410

2、模板的继承

在Django中,模板继承是一种强大的特性,它允许你定义一个基础模板(通常称为"父模板"),其他模板(“子模板”)可以继承并重用这个父模板的结构和元素。这样做的好处是可以避免重复的代码,让你的模板更加组织化,易于管理和维护。

1.父模板

父模板定义了网站的基本布局和共享元素,如头部、导航栏、页脚等。它还可以定义一些可被子模板覆盖的块(block)。在Django模板语言中,你可以使用{% block block_name %}{% endblock %}语法来定义这些块。

2.子模板

子模板继承自父模板,并且可以重写父模板中的一个或多个块内容。要在子模板中继承父模板,需要在文件顶部使用{% extends "base.html" %}(假设父模板命名为base.html)声明。之后,子模板就可以通过{% block %}标签重写父模板中定义的块。

3.继承的工作原理

当请求一个使用了模板继承的视图时,Django首先加载子模板,并确定它继承自哪个父模板。然后,Django处理父模板中的所有内容,但是对于每个在子模板中被重写的块,Django会用子模板中的定义替换父模板中的原始内容。

这样,你就可以在父模板中定义整个网站或应用的通用布局,而在子模板中只关注每个页面的特定内容。这种方法极大地减少了重复代码,提高了开发效率和网站的一致性。

举个例子,如果你有一个网站,所有页面的头部和脚部布局都是相同的,你就可以把这些共通部分放在父模板中,然后为网站的每个页面创建一个子模板,只定义该页面特有的内容部分。这样,无论何时需要修改通用布局,你只需在父模板中修改一次即可自动更新所有页面,极大地简化了维护工作。

了解了模板的继承,将对我们后续项目开发省很多功夫,我们可以先定义一个布局文件layout.html,方便我们后续来使用(前面部门列表也用到了它)。

定义模板:layout.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">
    <style>
        .navbar {
            border-radius: 0;
        }
    </style>
    {% block css %}

    {% endblock %}
</head>
<body>
<nav class="navbar navbar-default">
    <div class="container">

        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">用户管理系统</a>
        </div>

        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="/depart/list">部门管理</a></li>
                <li><a href="/user/list">用户管理</a></li>
                <li><a href="/pretty/list">靓号管理</a></li>

                <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="#">登录</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">张三 <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">个人资料</a></li>
                        <li><a href="#">我的信息</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">注销</a></li>
                    </ul>
                </li>

            </ul>
        </div>
    </div>
</nav>

<div>
    <div class="container">
        {% block content %}{% endblock %}
    </div>
</div>

<script src="{% static 'js/jquery.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
{% block js %}

{% endblock %}
</body>
</html>

模版继承:

{% extends 'layout.html' %}

{% block css%}
    <link rel="stylesheet" href="{% static 'plugins...min.css' %}">
    <style>
    ...
    </style>
{% endblock%}

{% block content %}
    <h1>首页</h1>
{% endblock %}

{% block js  %}
    <script src="{% static 'js/jquery.min.js' %}"></script>
{% endblock %}
3、添加部门

同样地思路,我们接着来完成添加部门:

1.在urls.py中添加部门列表的路径depart/add/,并告诉该路径指向的视图view.depart_add

urls.py

from django.urls import path
from api.views import depart,user,pretty

urlpatterns = [
    # 部门管理
    path("depart/list/", depart.depart_list),
    path("depart/add/", depart.depart_add),
]

2.在views.py中写出对应的函数,发出请求,并返回响应depart_add.html

views.py

def depart_add(request):
    """添加部门"""
    if request.method == "GET":
        return render(request, 'depart_add.html')

    # 获取用户POST提交过来的数据(title输入为空)
    title = request.POST.get("title")

    # 保存到数据库
    models.Department.objects.create(title=title)

    # 重定向回部门列表
    return redirect("/depart/list/")

3.创建templates目录下模版html文件depart_add.html,以此定义添加部门的网页结构和布局。

depart_add.html

{% extends 'layout.html' %}
{% block content %}
<div class="container">
    <div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title" style="font-weight: bold">新建部门</h3>
        </div>
        <div class="panel-body">
            <form method="post">
                {% csrf_token %}
                <div class="form-group">
                    <label for="title">标题</label>
                    <input type="text" class="form-control" id="title" placeholder="标题" name="title"/>
                </div>

                <div class="form-group">
                    <div class="col-sm-offset-2 col-sm-10">
                        <button type="submit" class="btn btn-primary">提 交</button>
                    </div>
                </div>
            </form>

        </div>
    </div>
</div>
{% endblock %}
{% endblock %}

效果:

在这里插入图片描述

4、编辑部门

然后,来完成编辑部门,随着思路一遍遍地路过,会越来越清晰。

1.在urls.py中添加部门列表的路径depart/edit/,并告诉该路径指向的视图view.depart_edit

urls.py

from django.urls import path
from api.views import depart,user,pretty

urlpatterns = [
    # 部门管理
    path("depart/list/", depart.depart_list),
    path("depart/add/", depart.depart_add),
    path("depart/<int:nid>/edit/", depart.depart_edit),
]

可能朋友会注意到edit这里多了个<int:nid>,其实它是一个路径转换器,用于从URL中捕获并传递一个整数参数给对应的视图函数。例如:当有一个请求的URL符合depart/<数字>/edit/的模式时,例如depart/123/edit/,Django会解析这个URL,提取出数字123,并以nid=123的形式将其传递给depart.depart_edit视图函数。

2.在views.py中写出对应的函数,发出请求,并返回响应depart_edit.html

views.py

def depart_edit(request, nid):
    """修改部门"""
    if request.method == "GET":
        # 根据nid,获取他的数据[obj,]
        row_object = models.Department.objects.filter(id=nid).first()
        return render(request, 'depart_edit.html', {"row_object": row_object})
    # 获取用户的标题
    title = request.POST.get("title")
    # 根据ID找到数据库中的数据进行更新
    models.Department.objects.filter(id=nid).update(title=title)
    # 重定向回部门列表
    return redirect("/depart/list/")

3.创建templates目录下模版html文件depart_edit.html,以此定义编辑部门的网页结构和布局。

depart_edit.html

{% extends 'layout.html' %}

{% block content %}

    <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title" style="font-weight: bold">修改部门</h3>
            </div>
            <div class="panel-body">
                <form method="post">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="title">标题</label>
                        <input type="text" class="form-control" id="title" placeholder="标题" name="title"
                               value="{{ row_object.title }}"/>
                    </div>

                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-10">
                            <button type="submit" class="btn btn-primary">提 交</button>
                        </div>
                    </div>
                </form>

            </div>
        </div>
    </div>

{% endblock %}

效果:

在这里插入图片描述

5、删除部门

最后,来完成删除部门,到这里有了前几个功能的熟悉,已经轻松许多了。

1.在urls.py中添加部门列表的路径depart/delete/,并告诉该路径指向的视图view.depart_delete

urls.py

from django.urls import path
from api.views import depart,user,pretty

urlpatterns = [
    # 部门管理
    path("depart/list/", depart.depart_list),
    path("depart/add/", depart.depart_add),
    path("depart/<int:nid>/edit/", depart.depart_edit),
    path("depart/delete/", depart.depart_delete),
]

2.在views.py中写出对应的函数,发出请求,并返回响应depart_list.html,实现对部门信息的删除。

views.py

def depart_delete(request):
    """删除部门"""
    # 获取ID
    # http://127.0.0.1:8000/depart/delete/?nid=1
    nid = request.GET.get('nid')

    models.Department.objects.filter(id=nid).delete()
    # 重定向回部门列表
    return redirect("/depart/list")

3.操作templates目录下模版html文件depart_list.html

depart_list.html

{% extends 'layout.html' %}
{% block content %}
    <div class="container">
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/depart/add/">
                <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
                新建部门
            </a>
        </div>

        <div class="panel panel-default">
            <!-- Default panel contents -->
            <div class="panel-heading">
                <span class="glyphicon glyphicon-list" aria-hidden="true"></span>
                部门列表
            </div>

            <!-- Table -->
            <table class="table table-bordered">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>名称</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in queryset %}
                <tr>
                    <th>{{ obj.id }}</th>
                    <td>{{ obj.title }}</td>
                    <td>
                        <a class="btn btn-primary btn-xs" href="/depart/{{ obj.id  }}/edit/">编辑</a>
                        <a class="btn btn-danger btn-xs" href="/depart/delete/?nid={{ obj.id }}">删除</a>
                    </td>
                </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
            <ul class="pagination">
            {{ page_string }}
        </ul>
    </div>
{% endblock %}

效果:

在这里插入图片描述

6、整体效果

在这里插入图片描述

关于部门管理的实现就到这里,后续会继续实现用户管理、靓号管理、管理员管理、账户登录、以及Ajax等内容。

很感谢你能看到这里,如有相关疑问,还请下方评论留言。
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
希望本篇内容能对大家有所帮助,如果大家喜欢的话,请动动手点个赞和关注吧,非常感谢你们的支持!

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

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

相关文章

下载chromedrive,使用自动化

1、先看一下自己浏览器的版本 2、访问 https://googlechromelabs.github.io/chrome-for-testing/

java中Volatile关键字的原理

Volitile的主要作用就是保持内存可见性和防止指令重排序。我分别说一下这两个作用的实现原理 1.保持内存可见性的实现原理 volatile内存可见性主要通过lock前缀指令实现的&#xff0c;它会锁定当前内存区域的缓存&#xff0c;并且立即将当前缓存的数据写入到主内存&#xff0…

【Linux】linuxCNC+Qt+Opencascade+kdl+hal 实时6轴机器人控制器

CNC机器人 程序框架 机器人模型 笔记&#xff1a; debian重启后 无法打开共享目录 最新版搜狗输入法安装后不支持中文&#xff0c;需要安装旧版本的 sogoupinyin_4.0.1.2800_x86_64.deb可用 数控机器人在哪些领域应用有优势 数控机器人在多个领域都展现出了显著的优势&#xff…

IAB视频广告标准《数字视频和有线电视广告格式指南》之 概述- IAB受众和技术标准 - 我为什么要翻译介绍美国人工智能科技公司IAB系列(2)

第二篇 - 概述- IAB受众和技术标准 本文目录 一、IAB技术实验室简介 二、概述及IAB受众 三、资源- IAB倡导的相关视频广告技术标准 四、案例分享-介绍一家数字化营销服务公司 - SproutSocial 五、数字营销工兵观察 六、资料来源及推荐阅读 一、IAB技术实验室简介 随着近…

高频面试必备(Java研发岗),一线互联网架构师设计思想解读开源框架

BeanFactory 和 ApplicationContext 有什么区别&#xff1f; 如何用基于 XML 配置的方式配置 Spring&#xff1f; 如何用基于 Java 配置的方式配置 Spring&#xff1f; 请解释 Spring Bean 的生命周期&#xff1f; Tomcat Tomcat 的缺省端口是多少&#xff0c;怎么修改&…

C++学习随笔(5)——类和对象的深窥

本章我们来学习一下更深入了解一下类和对象&#xff01; 目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载…

Sui技术帮助Studio Mirai成功实现创意愿景

Brian和Ben Li兄弟对艺术充满热情&#xff0c;通过共同创立的研发工作室Studio Mirai&#xff0c;他们正在探索Web3技术与创意产业的交集。 Studio Mirai的第一个头像类项目&#xff08;profile picture&#xff0c;PFP&#xff09;Tamashi存在于Nozomi World中&#xff0c;这…

2024-3-13,14(CSS)

1.复合选择器 有两个或者多个基础选择器&#xff0c;通过不同的方式组合而成。 目的是更加准确高效的选择目标元素&#xff08;标签&#xff09; 分类&#xff1a; 后代选择器&#xff1a;选中某个元素的所有后代元素 写法&#xff1a;父选择器 子选择器 {CSS属性}&#x…

Pycharm / idea上传项目到 Github 报错

报错内容: gitgithub.com: Permission denied (publickey).翻译–>gitgithub.com:权限被拒绝(公钥). 出现上述报错的原因:   客户端与服务端的ssh key不匹配   客户端与服务端未生成 ssh key 登录上Github查看ssh key是否存在&#xff0c;如果存在&#xff0c;那么可以对…

蓝桥杯单片机快速开发笔记——定时器

一、基本原理&#xff1a; 定时器的作用&#xff1a; 定时器是一种用于产生精确时间延时的模块&#xff0c;可以在程序中用来进行时间控制、计时等操作。 定时器的工作原理&#xff1a; 51单片机的定时器是通过内部的计数器来实现的&#xff0c;计数器每隔一个固定的时间周期自…

windows 安装 gitlab-runner CICD

点击搜索图标 手动输入PowerShell, 右键点击管理员权限打开&#xff0c; 一、安装 安装 gitlab runner 文档参考地址 1、下载exe执行文件 我这里是 win64 https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe 2、创建 gitla…

通过OceanBase 3.x中not in无法走hash连接的变化,来看OB优化器的发展

作者简介&#xff1a; 张瑞远&#xff0c;曾从事银行、证券数仓设计、开发、优化类工作&#xff0c;现主要从事电信级IT系统及数据库的规划设计、架构设计、运维实施、运维服务、故障处理、性能优化等工作。 持有Orale OCM,MySQL OCP及国产代表数据库认证。 获得的专业技能与认…

基于单片机的电子琴设计

基于单片机的电子琴设计 摘 要 读书、看电影、听音乐&#xff0c;都是最常见的丰富内心世界的良剂。听音乐&#xff0c;作为陶冶情操、提升境界最便捷的方式&#xff0c;正受到越来越多人们的欢迎。音乐可以很轻松的融入各种场合&#xff0c;给人们带来很轻松的氛围&#xff…

Pytorch从零开始实战21

Pytorch从零开始实战——Pix2Pix理论与实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——Pix2Pix理论与实战内容介绍数据集加载模型实现开始训练总结 内容介绍 Pix2Pix是一种用于用于图像翻译的通用框架&#xff0c;即图像到图像的转换。…

多人语聊房社交APP开发需要有哪些功能呢?

随着移动互联网的快速发展&#xff0c;社交APP已经成为人们日常生活中不可或缺的一部分。而随着语音社交的兴起&#xff0c;多人语聊房社交APP也逐渐受到了用户的青睐。在开发多人语聊房社交APP时&#xff0c;需要具备一系列功能&#xff0c;以满足用户的需求并提供良好的使用体…

大米自动化生产线的运作原理与科技创新

在当今科技飞速发展的时代&#xff0c;自动化生产线已经成为各个行业提高效率、降低成本的重要工具。而在粮食产业中&#xff0c;大米的自动化生产线更是以其独特的魅力&#xff0c;引领着粮食加工业的转型升级。星派将带您深入了解大米自动化生产线的运作原理&#xff0c;以及…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:XComponent)

可用于EGL/OpenGLES和媒体数据写入&#xff0c;并显示在XComponent组件。 说明&#xff1a; 该组件从API Version 8 开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 构造参数type为"surface"时不支持。 从API version …

点云配准论文阅读1-Research on Three-Dimensional Point Cloud Registration Algorithm

Research on Three-Dimensional Point Cloud Registration Algorithm三维点云配准算法研究 Publisher: IEEE发行者 &#xff1a; IEEE Cite This引用此内容 PDF Yuqing Zhang; Shilong Sun; Jingjing Shang; Minghan Yang张玉清;孙世龙; 尚晶晶;杨明翰 Abstract: Accordi…

gin框架教程笔记

参考 官方中文文档&#xff1a;https://gin-gonic.com/zh-cn/docs/introduction/ 但是示例截图少 https://www.kancloud.cn/shuangdeyu/gin_book/949411 https://www.topgoer.com/gin%E6%A1%86%E6%9E%B6/ 这个网站不光有gin框架 适合阅读 吉米老师的 &#xff1a;https://www…