Django学习笔记(2)

创建app

在这里插入图片描述
属于自动执行了python manage.py
直接在里面运行startapp app01就可以创建app01的项目了
之后在setting.py中注册app01

INSTALLED_APPS = ["django.contrib.admin","django.contrib.auth","django.contrib.contenttypes","django.contrib.sessions","django.contrib.messages","django.contrib.staticfiles",'app01.apps.App01Config'
]

创建表

class Department(models.Model):"""部门表"""id=models.BigAutoField(verbose_name="ID",primary_key=True)#系统默认自己创建title=models.CharField(verbose_name="标题(备注)",max_length=32)class UserInfo(models.Model):name=models.CharField(verbose_name="姓名",max_length=16)password=models.CharField(verbose_name="密码",max_length=64)age=models.IntegerField(verbose_name="年龄")account=models.DecimalField(verbose_name="账户余额",max_digits=10,decimal_places=2,default=0)#10位数字,小数位是2create_time=models.DateTimeField(verbose_name="入职时间")#to表示与哪张表相连#to_fields表示与哪一列相连#写depart后Django会自动生成depart_id#on_delete=models.CASCADE级联删除#置空删除on_delete=models.SET_NULLdepart=models.ForeignKey(to="Department",to_field="id",on_delete=models.CASCADE)

其中用户中加入部门数据,如果是正常开始用ID,对于特别大的公司用字符串名称,这样可以防止连表的时间消耗,属于用空间换时间。

在这里插入图片描述

部门列表

###前端页面
在这里插入图片描述

{% 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>
</head>
<body><nav class="navbar navbar-default"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><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><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li><a href="#">Link</a></li></ul><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><srcipt src="{% static 'js/jquery-3.6.0.min.js' %}"></srcipt>
<srcipt src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></srcipt>
</body>
</html>

上面的导航栏代码在导航栏代码中找到的,加入后修改成上面的部分,记得最上面加入{% load static %}。
在这里插入图片描述

<div><div class="container"><div style = "margin-bottom: 10px"><a class="btn btn-primary" href="">新建部门</a></div><div class="panel panel-default"><!-- Default panel contents --><div class="panel-heading">Panel heading</div><!-- Table --><table class="table table-bordered"><thead><tr><th>#</th><th>First Name</th><th>Last Name</th><th>Username</th></tr></thead><tbody><tr><th scope="row">1</th><td>Mark</td><td>Otto</td><td>@mdo</td></tr><tr><th scope="row">2</th><td>Jacob</td><td>Thornton</td><td>@fat</td></tr><tr><th scope="row">3</th><td>Larry</td><td>the Bird</td><td>@twitter</td></tr></tbody></table></div></div>
</div>

在这里插入图片描述

新增

在depart_list中增加跳转地址

<a class="btn btn-primary" href="/depart/add/" >
{#              target="_blank"  在新的页面产生#}<span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>新建部门</a>

新建一个depart_add.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>
</head>
<body>
<nav class="navbar navbar-default"><div class="container"><!--改为居中--><!-- Brand and toggle get grouped for better mobile display --><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><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li><a href="/depart/list/">部门管理</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><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><div><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">新建面板</h3></div><div class="panel-body"><form><div class="form-group"><label for="exampleInputEmail1">标题</label><input type="text" class="form-control" id="exampleInputEmail1" placeholder="标题" name="title"></div><button type="submit" class="btn btn-primary">保存</button></form></div>
</div>
</div>
<srcipt src="{% static 'js/jquery-3.6.0.min.js' %}"></srcipt>
<srcipt src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></srcipt>
</body>
</html>

在表单中增加post修改的方式

<form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">标题</label><input type="text" class="form-control" id="exampleInputEmail1" placeholder="标题" name="title"></div><button type="submit" class="btn btn-primary">保存</button>
</form>

添加后端代码

def depart_add(request):"'添加部门'"if request.method=="GET":return render(request,"depart_add.html")#获取post中的数据title=request.POST.get("title")models.Department.objects.create(title=title)return redirect("/depart/list")

修改部门

在urls.py中采用

    path("depart/<int:nid>/edit/",views.depart_edit)

的路径方法

def depart_edit(request,nid):if request.method=="GET":queryset=models.Department.objects.filter(id=nid)title=queryset.first().titlereturn render(request,"depart_edit.html",{"title":title})title2=request.POST.get("title")models.Department.objects.filter(id=nid).update(title=title2)return redirect("/depart/list")
{% 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>
</head>
<body>
<nav class="navbar navbar-default"><div class="container"><!--改为居中--><!-- Brand and toggle get grouped for better mobile display --><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><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li><a href="/depart/list">部门管理</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><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><div><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">修改面板</h3></div><div class="panel-body"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">标题</label><input type="text" class="form-control" id="exampleInputEmail1" placeholder="标题" name="title" value="{{ title }}"></div><button type="submit" class="btn btn-primary">保存</button></form></div>
</div>
</div>
<srcipt src="{% static 'js/jquery-3.6.0.min.js' %}"></srcipt>
<srcipt src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></srcipt>
</body>
</html>

模板继承

创建一个模板网页,把需要重复的部分放进模板layout.html中,使用{% block content %} {% endblock %}编写其他需要改写的地方,其中content是变量名

{% 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>
</head>
<body><nav class="navbar navbar-default"><div class="container"><!--改为居中--><!-- Brand and toggle get grouped for better mobile display --><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><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li><a href="/depart/list">部门管理</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><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><div>{%  block content %}{% endblock %}
</div>
<srcipt src="{% static 'js/jquery-3.6.0.min.js' %}"></srcipt>
<srcipt src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></srcipt>
</body>
</html>

例如编辑网页中更改成如下

{% extends "layout.html" %}{% block content %}<div><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">修改面板</h3></div><div class="panel-body"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">标题</label><input type="text" class="form-control" id="exampleInputEmail1" placeholder="标题" name="title" value="{{ title }}"></div><button type="submit" class="btn btn-primary">保存</button></form></div>
</div>
</div>{% endblock %}

用户管理

在创建user_list.html后,在其中加入后端的数据,需要一些函数的支持,但是模板语法不支持函数()的,所以需要进行省略括号的写法,但是对于一些传参的函数就需要进行改写

{{ obj.create_time|date:“Y-m-d H:i:s” }}是obj.create_time.strftime(‘%Y-%m-%d %H:%M:%S’)的改写

obj.get_gender_display()在前端中的模板语法去掉括号就行了。

总体界面

{% extends "layout.html" %}{% block content %}<div><div class="container"><div style = "margin-bottom: 10px"><a class="btn btn-primary" href="/user/add/" >
{#              target="_blank"  在新的页面产生#}<span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>新建用户</a></div><div class="panel panel-default"><!-- Default panel contents --><div class="panel-heading"><span class="glyphicon glyphicon-th-list" aria-hidden="true"> 用户管理</span></div><!-- Table --><table class="table table-bordered"><thead><tr><th>#</th><th>ID</th><th>姓名</th><th>年龄</th><th>工资</th><th>入职时间</th><th>性别</th><th>部门</th><th>操作</th></tr></thead><tbody>{% for obj in queryset %}<tr><th scope="row">{{ obj.id }}</th><td>{{ obj.id }}</td><td>{{ obj.name }}</td><td>{{ obj.age }}</td><td>{{ obj.account }}</td><td>{{ obj.create_time|date:"Y-m-d" }}</td>
{#            obj.create_time.strftime('%Y-%m-%d %H:%M:%S')#}<td>{{ obj.get_gender_display }}
{#                模板语法中不能加括号,所以有函数的也不需要加括号#}</td><td>{{ obj.depart.title }}</td><td><a class = "btn btn-primary btn-xs" href="/user/{{ obj.id }}/edit/">编辑</a><a class = "btn btn-danger btn-xs" href="/user/delete/?nid={{ obj.id }}">删除</a></td></tr>{% endfor %}</tbody></table></div></div>
</div>{% endblock %}

后端

def user_list(request):queryset=models.UserInfo.objects.all()print(type(queryset))for obj in queryset:print(obj.name,obj.age,obj.account,obj.get_gender_display(),obj.password,obj.create_time.strftime('%Y-%m-%d %H:%M:%S'))return render(request,"user_list.html",{"queryset":queryset})

在这里插入图片描述

新建用户

传统方法

{% extends "layout.html" %}{% block content %}
<div><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">新建面板</h3></div><div class="panel-body" ><form method="post">{% csrf_token %}<div class="form-group"><label>姓名</label><input type="text" class="form-control" placeholder="姓名" name="name" ><label>年龄</label><input type="text" class="form-control" placeholder="年龄" name="age" ><label>工资</label><input type="text" class="form-control" placeholder="工资" name="account" ><label>性别</label><input type="text" class="form-control" placeholder="性别" name="gender" ><label>所属部门ID</label><input type="text" class="form-control" placeholder="所属部门ID" name="depart_id" ><label>密码</label><input type="text" class="form-control" placeholder="密码" name="password" ></div><button type="submit" class="btn btn-primary">保存</button></form></div>
</div>
</div>{% endblock %}
def user_add(request):if request.method=="GET":return render(request,"user_add.html")name=request.POST.get("name")age = request.POST.get("age")account = request.POST.get("account")gender = request.POST.get("gender")depart_id = request.POST.get("depart_id")password = request.POST.get("password")create_time=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())models.UserInfo.objects.create(name=name,age=age,account=account,gender=gender,password=password,create_time=create_time,depart_id=depart_id)return redirect("/user/list/")

在这里插入图片描述

改进

  • 用户提交的数据没有校验
  • 错误的页面上应该有错误的提示
  • 每一个字段都需要重写一遍
  • 关联的数据需要手动展示在前端页面
    采用Django组件
    Form组件
    ModelForm组件

ModelForm 组件

class UserModelForm(forms.ModelForm):class Meta:model=models.UserInfofields=["name","age","account","gender","depart","password"]
def user_modelform_add(request):"""modelForm版本的添加用户"""form=UserModelForm()return render(request,"user_add_modelform.html",{"form":form})
{% extends "layout.html" %}{% block content %}
<div><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">新建面板</h3></div><div class="panel-body" ><form method="post">{% csrf_token %}{% for field in form %}{{ field.label }}:{{ field }}<br>{% endfor %}<button type="submit" class="btn btn-primary">保存</button></form></div>
</div>
</div>{% endblock %}

在这里插入图片描述
但是其中部门是下面这样的

在这里插入图片描述
利用重写Department类的方法__str__()

class Department(models.Model):"""部门表"""id=models.BigAutoField(verbose_name="ID",primary_key=True)#系统默认自己创建title=models.CharField(verbose_name="标题(备注)",max_length=32)def __str__(self):return self.title

在这里插入图片描述

{% extends "layout.html" %}{% block content %}
<div><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">新建面板</h3></div><div class="panel-body" ><form method="post">{% csrf_token %}{% for field in form %}<div class="form-group"><label> {{ field.label }}</label>{{ field  }}</div>{% endfor %}<button type="submit" class="btn btn-primary">保存</button></form></div>
</div>
</div>{% endblock %}

在这里插入图片描述

加上样式

class UserModelForm(forms.ModelForm):class Meta:model=models.UserInfofields=["name","age","account","gender","depart","password","create_time"]# widgets={#     "name":forms.TextInput(attrs={"class":"form-control"}),#     "age": forms.TextInput(attrs={"class": "form-control"}),#     "account": forms.TextInput(attrs={"class": "form-control"}),#     "gender": forms.TextInput(attrs={"class": "form-control"}),#     "depart": forms.TextInput(attrs={"class": "form-control"}),# }def __init__(self,*args,**kwargs):super().__init__(*args,**kwargs)for name,field in self.fields.items():if name=="create_time":field.widget.attrs={"class":"form-control","value":time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()),}else:field.widget.attrs={"class":"form-control","placeholder":field.label}

在这里插入图片描述

后端中进行保存

def user_modelform_add(request):"""modelForm版本的添加用户"""if request.method=="GET":form=UserModelForm()return render(request,"user_add_modelform.html",{"form":form})#进行数据校验form=UserModelForm(data=request.POST)if form.is_valid():form.save()#将提交的数据自动保存print(form.cleaned_data)return redirect("/user/list/")else:print(form.errors)return render(request,"user_add_modelform.html",{"form":form})

在前端中加入{{ field.errors.0 }}可以显示错误信息
在这里插入图片描述
在setting.py中改成LANGUAGE_CODE = "zh-hans"便可以变成中文

在这里插入图片描述

编辑

def user_edit(request,nid):row_object = models.UserInfo.objects.filter(id=nid).first()if request.method=="GET":form=UserModelForm(instance=row_object)return render(request,"user_edit.html",{"form":form})form=UserModelForm(data=request.POST,instance=row_object)if form.is_valid():form.save()return redirect("/user/list/")return render(request, "user_edit.html", {"form": form})
{% extends "layout.html" %}{% block content %}
<div class="container">
<div><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">新建面板</h3></div><div class="panel-body" ><form method="post" novalidate>{% csrf_token %}{% for field in form %}<div class="form-group"><label> {{ field.label }}</label>{{ field  }}<span style="color: red">{{ field.errors.0 }}</span></div>{% endfor %}<button type="submit" class="btn btn-primary">保存</button></form></div>
</div>
</div></div>
{% endblock %}

在这里插入图片描述

删除

def user_delete(request):nid=request.GET.get("nid")models.UserInfo.objects.filter(id=nid).delete()return redirect("/user/list/")

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

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

相关文章

合并jar包导致gradle传递依赖失效

目录 零、背景一、合并jar包1.1、自定义一组jar包1.2、自定义合并jar的任务1.3、定义打包jar的任务 二、发布jar包2.1、未合并jar包之前的合并方式2.2、合并jar包之后的合并方式 三、发现问题3.1、确定gradle中的依赖关系3.2、对比maven是否缺失依赖3.3、对比合并前后的pom.xml…

Source Insight配置Cppcheck做静态测试(Windows)

1.安装cppcheck 先从cppcheck官方网站下载cppcheck的安装包。 注&#xff1a; &#xff08;1&#xff09;官网地址&#xff1a;https://sourceforge.net/projects/cppcheck &#xff08;2&#xff09;截止2023年8月&#xff0c;官方发布的最新版本是cppcheck-2.11-x64-Setup.…

子集-回溯方法

class Solution {//题解思路//LinkedList<Integer> path new LinkedList<>(); List<List<Integer>> results new ArrayList<>();public List<List<Integer>> subsets(int[] nums) {//主方法中调用方法同时传入指定的参数初始值bac…

【数据挖掘】使用 Python 分析公共数据【01/10】

一、说明 本文讨论了如何使用 Python 使用 Pandas 库分析官方 COVID-19 病例数据。您将看到如何从实际数据集中收集见解&#xff0c;发现乍一看可能不那么明显的信息。特别是&#xff0c;本文中提供的示例说明了如何获取有关疾病在不同国家/地区传播速度的信息。 二、准备您的…

【计算机视觉|生成对抗】改进的生成对抗网络(GANs)训练技术

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Improved Techniques for Training GANs 链接&#xff1a;[1606.03498v1] Improved Techniques for Training GANs (arxiv.org) 摘要 本文介绍了一系列应用于生成对抗网络&#xff08;G…

ICCV23 | Ada3D:利用动态推理挖掘3D感知任务中数据冗余性

​ 论文地址&#xff1a;https://arxiv.org/abs/2307.08209 项目主页&#xff1a;https://a-suozhang.xyz/ada3d.github.io/ 01. 背景与动因 3D检测(3D Detection)任务是自动驾驶任务中的重要任务。由于自动驾驶任务的安全性至关重要(safety-critic)&#xff0c;对感知算法的延…

数据结构-->栈

&#x1f495;休对故人思故国&#xff0c;且将新火试新茶&#xff0c;诗酒趁年华&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;详解链表OJ题 前言&#xff1a; 前面已经学习过顺序表&#xff0c;链表。他们都是线性表&#xff0c;今天要学习的栈也是一种线…

【C++】C 语言 和 C++ 语言中 const 关键字分析 ② ( const 常量分配内存时机 | const 常量在编译阶段分配内存 )

文章目录 一、const 常量内存分配时机二、使用如下代码验证 const 常量内存分配时机三、分析验证结果 - const 常量在编译阶段分配内存 一、const 常量内存分配时机 在上一篇博客中 , 讲到了获取 const 常量的地址 , 代码如下 : // 定义常量// 该常量定义在了 符号表 中// 符号…

leetcode 213. 打家劫舍 II

2023.8.20 本题是 打家劫舍 的进阶版&#xff0c;房屋之间形成一个环了&#xff0c;也就是第一个房屋和最后一个房屋不能一起偷了。那么能偷的情况分为下列三种&#xff1a; 不考虑偷首房间。不考虑偷尾房间。不考虑偷首尾房间。 第三种情况包含于第一和第二种情况了&#xff…

【vue3】对axios进行封装,方便更改路由并且可以改成局域网ip访问(附代码)

对axios封装是在main.js里面进行封装&#xff0c;因为main.js是一个vue项目的入口 步骤&#xff1a; 在1处创建一个axios实例为http&#xff0c;baseURL是基础地址&#xff08;根据自己的需求写&#xff09;&#xff0c;写了这个在vue界面调用后端接口时只用在post请求处写路由…

每天一道leetcode:934. 最短的桥(图论中等广度优先遍历)

今日份题目&#xff1a; 给你一个大小为 n x n 的二元矩阵 grid &#xff0c;其中 1 表示陆地&#xff0c;0 表示水域。 岛 是由四面相连的 1 形成的一个最大组&#xff0c;即不会与非组内的任何其他 1 相连。grid 中 恰好存在两座岛 。 你可以将任意数量的 0 变为 1 &#…

基于X86六轮差速移动机器人运动控制器设计与实现(二)规划控制算法

带输入约束的 MPC 路径跟踪控制 MPC 算法是一种基于控制对象模型的控制方法&#xff0c;其优势在于在控制中考虑了 系统的多种物理约束&#xff0c;同时基于模型与当前机器人的反馈信息预估出未来机器人 位姿信息的处理方法可以解决控制迟滞的问题。 4.1 MPC 路径跟踪控…

iOS 17 正式版预计 9 月中下旬发布,部分新功能延后推出

苹果公司预计将在 9 月中下旬推出 iOS 17 正式版&#xff0c;iPhone XS 及更新的机型可免费更新。这次更新包含了许多新功能&#xff0c;但是根据苹果公司的网站显示&#xff0c;并不是所有的功能都会立即可用。苹果表示有一些功能“将在今年晚些时候推出”&#xff0c;比如&am…

接口自动化yaml文件读取与写入

前言 在走进yaml文件之前大家应该都很想知道他是用来干嘛的&#xff1f; 是的是的&#xff0c;他是用来做接口自动化测试的。 我们一起来学习他吧&#xff01;——&#xff08;一定要收藏带走哦❤&#xff09; 1、yaml文件有什么作用呢&#xff1f; ①可作为配置文件使用—…

WMS仓库管理系统选择指南:如何确保您的仓库提高效率?

如何选择WMS仓库管理系统&#xff1f;仓库管理主要包括以下四个方面&#xff1a; 1.商品出入库管理 2.库存调拨 3.库存盘点 4.虚拟库存/实际库存管理 为了更好地管理仓库&#xff0c;我们需要确保基本的硬件设施得以满足&#xff0c;例如划分存储区域、使用货架以及进行员工培训…

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列…

LVS-DR模式下(RS检测)ldirectord工具实现部分节点掉点后将请求发往正常设备进行处理

基于前文的LVS-DR集群构建环境 一.下载ldirectord软件 二.将模板文件中的LVS-DR模式相关文件拷贝到/etc/ha.d主配置目录并按实际设备修改 三.配置两台RS匹配规则 四.停止RS1的http服务进行测试 RS1失去工作能力&#xff0c;RS2接替RS1 基于前文的LVS-DR集群构建环境 一.下…

Stable Diffusion:使用自己的数据集微调训练LoRA模型

Stable Diffusion&#xff1a;使用自己的数据集微调训练LoRA模型 前言前提条件相关介绍微调训练LoRA模型下载kohya_ss项目安装kohya_ss项目运行kohya_ss项目准备数据集生成关键词模型参数设置预训练模型设置文件夹设置训练参数设置 开始训练LoRA模型TensorBoard查看训练情况 测…

一篇搞懂TCP、HTTP、Socket、Socket连接池

前言&#xff1a;作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼&#xff0c;然而它们之间的关系、区别及原理并不是所有人都能理解清楚&#xff0c;这篇文章就从网络协议基础开始到Socket连接池&#xff0c;一步一步…

算法题面试实战收集

回文数字 2023-08-18 美团 一面 在不使用额外的内存空间的条件下判断一个整数是否是回文。 回文指逆序和正序完全相同。 数据范围&#xff1a; 进阶&#xff1a; 空间复杂度O(1) &#xff0c;时间复杂度 O(n) 提示&#xff1a; 负整数可以是回文吗&#xff1f;&#xff08;比如…