当前位置: 首页 > news >正文

【Django】教程-5-ModelForm增删改查+规则校验【正则+钩子函数】

【Django】教程-1-安装+创建项目+目录结构介绍
【Django】教程-2-前端-目录结构介绍
【Django】教程-3-数据库相关介绍
【Django】教程-4-一个增删改查的Demo

11. ModelForm

  • 11.1 models.py

from django.utils import timezone
from django.db import models# 数据库,表对应关系
class Department(models.Model):"""部门表"""title = models.CharField(verbose_name="部门名称", max_length=32)create_time = models.DateTimeField(verbose_name="创建时间", default=timezone.now)# 数据状态status_choices = ((1, "已删除"),(0, "可用"),)status = models.SmallIntegerField(verbose_name="状态", choices=status_choices, default=0)# 重写toString方法def __str__(self):return self.titleclass UserInfo(models.Model):'''用户表'''name = models.CharField(verbose_name="姓名", max_length=32)password = models.CharField(verbose_name="密码", max_length=64)age = models.IntegerField(verbose_name="年龄")create_time = models.DateTimeField(verbose_name="创建时间", default=timezone.now)depart = models.ForeignKey(verbose_name="部门", to="Department", to_field="id", null=True, blank=True,on_delete=models.SET_NULL)# 在django中做的约束gender_choices = ((1, "男"),(2, "女"),)gender = models.SmallIntegerField(verbose_name="性别", choices=gender_choices, default=1)# 数据状态status_choices = ((1, "已删除"),(0, "可用"),)status = models.SmallIntegerField(verbose_name="数据状态", choices=status_choices, default=0)
  • 11.1 forms.py

from django import forms
from .models import Department, UserInfoclass DepartmentForm(forms.ModelForm):class Meta:model = Departmentfields = "__all__"class UserModelForm(forms.ModelForm):name = forms.CharField(min_length=8, label="用户名")class Meta:model = UserInfo# fields = ['name', 'password', 'age', 'gender']fields = "__all__"# 排除哪个字段# exclude = ['status']# 样式重写 def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():if name == "status":continuefield.widget.attrs = {"class": "form-control", "placeholder": field.label}
  • 11.1 urls.py

from django.urls import path
from appTang import views# 映射关系,视图--->函数
urlpatterns = [path('user/modelform/add', views.user_modelform_add),path('user/modelform/edit/<int:nid>/', views.user_modelform_edit),]
  • 11.1 user_model_add.html

{% extends 'layout.html' %}{% block title %}添加用户
{% endblock %}{% block content %}<div><div class="container"><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title"><span class="glyphicon glyphicon-tag" aria-hidden="true">添加用户</span></h3></div><div class="panel panel-body">
{#                novalidate, 关掉浏览器的校验#}<form method="post" novalidate>{% csrf_token %}{% for u in user %}<div class="form-group"><label>{{ u.label }}:</label>{{ u }}<span style="color: red">{{ u.errors.0 }}</span></div>{% endfor %}<button type="submit" class="btn btn-primary">保存</button></form></div></div></div></div>{% endblock %}
  • 11.1 user_model_edit.html

{% extends 'layout.html' %}
{% block title %}编辑用户
{% endblock %}{% block content %}<div class="container"><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title"><span class="glyphicon glyphicon-tag" aria-hidden="true">编辑用户</span></h3></div><div class="panel panel-body"><form method="post" novalidate>{% csrf_token %}{% for u in user %}<div class="form-group"><label>{{ u.label }}:</label>{{ u }}<span style="color: red">{{ u.errors.0 }}</span></div>{% endfor %}<button type="submit" class="btn btn-primary">保存</button></form></div></div></div>
{% endblock %}
  • 11.1 views.py

from django.shortcuts import render, HttpResponse, redirectfrom appTang import models
from appTang.forms import DepartmentForm, UserModelForm
from appTang.models import UserInfo, Department# 用户列表
def user_list(req):"""用户展示"""# select * from userinfo order by name asc; -name 倒序user_list = UserInfo.objects.all().order_by("-name")return render(req, 'user/user_list.html', {"user_list": user_list})def user_modelform_add(req):""" modelform 方式添加用户"""if req.method == 'GET':user = UserModelForm()return render(req, 'user/user_model_add.html', {"user": user})# 用户post提交,数据校验user = UserModelForm(data=req.POST)if user.is_valid():print(user.changed_data)user.save()return redirect("/user/list")# 校验失败, 在页面上展示错误信息return render(req, 'user/user_model_add.html', {"user": user})def user_modelform_edit(req, nid):""" 用户编辑"""if req.method == 'GET':# 根据id获取要编辑,那行数据row_obj = models.UserInfo.objects.filter(id=nid).first()user = UserModelForm(instance=row_obj)return render(req, "user/user_model_edit.html", {"user": user})# 表单提交, 需要先查询到,然后实例化进去row_obj = models.UserInfo.objects.filter(id=nid).first()user = UserModelForm(data=req.POST, instance=row_obj)# 数据校验通过if user.is_valid():# 默认用户保存,用户输入的所有数据# 给数据增加其他的, 需要保存的值, user.instance.字段名 = 值user.save()return redirect("/user/list")# 否则return render(req, "user/user_model_edit.html", {"user": user})
  • 11.1 user_list.html

{% extends 'layout.html' %}{% block content %}<div><div class="container"><div style="margin-bottom: 10px"><a class="btn btn-success" href="/user/modelform/add"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>ModelForm新建用户</a></div><div class="panel panel-default"><div class="panel-heading"><span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>用户列表</div><table class="table table-bordered"><thead><tr><th>#</th><th>姓名</th><th>密码</th><th>年龄</th><th>部门</th><th>创建时间</th><th>性别</th><th>状态</th><th>操作</th></tr></thead><tbody>{% for i in user_list %}<tr><td>{{ i.id }}</td><td>{{ i.name }}</td><td>{{ i.password }}</td><td>{{ i.age }}</td><td>{% if i.depart %}{{ i.depart.title }}{% endif %}</td><td>{{ i.create_time|date:"Y-m-d H:i:s" }}</td><td>{{ i.get_gender_display }}</td><td>{{ i.get_status_display }}</td><td><a class="btn btn-primary btn-xs" href="/user/modelform/edit/{{ i.id }}">MF编辑</a><a class="btn btn-danger  btn-xs" href="/user/del?nid={{ i.id }}">删除</a></td></tr>{% endfor %}</tbody></table></div></div></div>{% endblock %}
  • 11.1 layout.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}{% endblock %}</title><link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.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><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li><a href="/user/list">用户管理</a></li><li><a href="/department/list">部门管理</a></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="查询"></div><button type="submit" class="btn btn-default">查询</button></form><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></div>
</nav><div>{% block content %}{% endblock %}
</div><script src="{ % static 'js/jquery-3.7.1.js %'}"></script>
<script src="{ % static 'plugins/bootstrap-3.4.1/js/bootstrap.js %'}"></script></body>
</html>

11.2 forms.py格式校验

from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from .models import Department, UserInfoclass DepartmentForm(forms.ModelForm):class Meta:model = Departmentfields = "__all__"# 添加的 ModelForm
class UserModelForm(forms.ModelForm):name = forms.CharField(min_length=2, label="用户名")# 定义密码正则表达式和验证器password_regex = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$'password_validator = RegexValidator( regex=password_regex,message="密码必须包含至少一个小写字母、一个大写字母、一个数字和一个特殊字符。")password = forms.CharField(label="密码", validators=[password_validator],widget=forms.PasswordInput)class Meta:model = UserInfo# fields = ['name', 'password', 'age', 'gender']fields = "__all__"# 排除哪个字段# exclude = ['status']# widgets = {"name": forms.TextInput(attrs={"class": "form-control"}),#            "password": forms.PasswordInput(attrs={"class": "form-control"})}# 验证方式2 : 定义钩子方法, clean_字段名(self)def clean_age(self):txt_age = self.cleaned_data["age"]if txt_age<=18:#验证不通过raise ValidationError("未成年不允许!")# 验证通过return txt_age# 不允许重名,去数据库查询,校验!def clean_name(self):txt_name = self.cleaned_data["name"]if models.UserInfo.objects.filter(name=txt_name).exists():raise ValidationError("---重名了!---")# 验证通过return txt_namedef __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():if name == "status":continuefield.widget.attrs = {"class": "form-control", "placeholder": field.label}
# 编辑的 ModelForm
class UserModelEditForm(forms.ModelForm):# 定义name不可编辑 name = forms.CharField(disabled=True, label="用户名")password_regex = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$'password_validator = RegexValidator(regex=password_regex,message="密码必须包含至少一个小写字母、一个大写字母、一个数字和一个特殊字符。")password = forms.CharField(label="密码",validators=[password_validator],widget=forms.PasswordInput)class Meta:model = UserInfofields = "__all__"# 排除哪个字段exclude = ['status']def clean_age(self):txt_age = self.cleaned_data["age"]if txt_age<=18:raise ValidationError("未成年不允许!")return txt_agedef __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():if name == "status":continueif name == "depart":# 过滤掉 status=1 的数据self.fields['depart'].queryset = Department.objects.exclude(status=1)# 设置默认选项的标签为 请选择self.fields['depart'].empty_label = "请选择"field.widget.attrs = {"class": "form-control", "placeholder": field.label}
# 添加  - 不允许重名,去数据库查询,校验!def clean_name(self):txt_name = self.cleaned_data["name"]if models.UserInfo.objects.filter(name=txt_name).exists():raise ValidationError("---重名了!---")# 验证通过return txt_name
# 编辑 - 排除自己,校验    def clean_name(self):# print(self.instance.pk)txt_name = self.cleaned_data["name"]if models.UserInfo.objects.exclude(id=self.instance.pk).filter(name=txt_name).exists():raise ValidationError("---重名了!---")# 验证通过return txt_name

相关文章:

【Django】教程-5-ModelForm增删改查+规则校验【正则+钩子函数】

【Django】教程-1-安装创建项目目录结构介绍 【Django】教程-2-前端-目录结构介绍 【Django】教程-3-数据库相关介绍 【Django】教程-4-一个增删改查的Demo 11. ModelForm 11.1 models.py from django.utils import timezone from django.db import models# 数据库&#xff…...

JavaScript中 == 和 === 区别

== 运算符 它是相等运算符,用于比较两个 值 是否相等 ( 如果两个值的类型不同,它会尝试将它们转换为相同的类型,然后再比较。) 示例: console.log(1 == 1); // true,因为1被转换为数字1,所以相等 console.log(1 == true); // true,因为true被转换为数字1,所以相等…...

使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI

使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI 本篇摘要16. 使用LangChain Agents构建Gradio及Gradio Tool16.3 使用Langchain agents构建Gradio UI16.3.1 创建代理16.3.2 创建Gradio UI16.3.3 运行demo参考文献本章目录如下: 《使…...

scikit-surprise 智能推荐模块使用说明

目录 1、前言 2、算法 3、数据集 3.1 three built-in datasets are available: 3.2 Load a dataset from a pandas dataframe. 3.3 Load a dataset from a (custom) file. 3.4 Load a dataset where folds (for cross-validation) are predefined by some files. 4、pre…...

基于python开发的邮箱合并群发工具

智能邮件群发系统 一个基于Python和PyQt5开发的智能邮件群发工具&#xff0c;支持Word模板和Excel数据源的自动匹配&#xff0c;具有现代化UI界面和友好的用户体验。 Github项目地址&#xff1a;https://github.com/liugang926/Auto-mail-sent.git dist目录有编译好的exe程序&…...

分治算法之凸包问题

1. 算法思路 基本思想 利用分治策略解决凸包问题主要分为两大步骤&#xff1a; 分解&#xff08;Divide&#xff09;&#xff1a; 将所有点按照 x 坐标排序&#xff0c;并将点集分为左右两部分。 递归地对左右两部分分别求解凸包。 合并&#xff08;Conquer/Merge&#xf…...

OpenBMC:BmcWeb 处理http请求3 字典树查找节点

OpenBMC:BmcWeb 处理http请求2 查找路由对象-CSDN博客 findRouteByPerMethod实际上是调用了perMethod.trie.find(url);来查找路由对象的 class Trie {struct FindResult{unsigned ruleIndex;std::vector<std::string> params;};FindResult findHelper(const std::string…...

音频进阶学习二十五——脉冲响应不变法实现低通滤波器

文章目录 前言一、脉冲响应不变法1.定义2.模拟系统冲激响应的周期采样3.模拟系统和数字系统的频域响应关系1&#xff09;S域和Z域的关系2&#xff09;幅频响应的关系 4.通过有理函数设计滤波器5.总结 二、低通滤波器的设计实例1.给定数字滤波器指标2.转换模拟滤波器指标3.模拟滤…...

Linux中输入输出管理技巧

一、输入输出使用到的系统资源 1、字符设备&#xff08;Character Devices&#xff09; 什么是字符设备 字符设备是 Linux 中的一类设备&#xff0c;支持以字符为单位进行数据传输。与块设备不同&#xff0c;字符设备不需要缓 冲区&#xff0c;即数据是逐字节直接传递的。典…...

wireshark抓包工具的使用

下载地址&#xff1a;https://www.wireshark.org/#downloadLink 安装方式&#xff0c;一路next。 使用方式 第一步启动后选择你要抓包的网卡&#xff0c;ipconfig 可以查看你的默认网卡&#xff0c;我的是 以太网 双击进入。 筛选操作&#xff08;快速筛选方式&#xff09…...

javaweb自用笔记:文件上传案例、登录(统一拦截)案例

文件上传 或者说新建一个类配置好信息&#xff0c;然后到aliOssUtils里面用getter、setter方法获取到配置项 登录&#xff08;统一拦截&#xff09; 前端要json格式的数据&#xff0c;捕获到异常后前端可以显示错误&#xff08;对不起&#xff0c;操作失败&#xff0c;请联系管…...

【区块链安全 | 第十七篇】类型之引用类型(一)

文章目录 引用类型数据存储位置分配行为 数组特殊数组&#xff1a;bytes 和 string 类型bytes.concat 和 string.concat 的功能分配 memory 数组数组字面量&#xff08;Array Literals&#xff09;二维数组字面量数组成员&#xff08;Array Members&#xff09;悬空引用&#x…...

2025国内DevOps新手突围指南:从Gitee零门槛入门到工具链深度对比

对于刚接触DevOps的新手&#xff0c;推荐优先选择Gitee DevOps平台&#xff0c;其次是Jenkins和GitLab。Gitee DevOps作为国内领先的一站式研发效能平台&#xff0c;深度融合代码托管、持续集成/持续交付&#xff08;CI/CD&#xff09;、项目协作等功能&#xff0c;不仅界面简洁…...

【C语言】文件操作(2)

一、文件的随机读写 在前面我们学习了文件的顺序读写的函数&#xff0c;那么当我们要读取某个指定位置的内容的时候&#xff0c;是否只能顺序的读取到这个内容&#xff1f;还有在对文件进行输入的时候&#xff0c;需要对指定的位置进行写入&#xff0c;那么此时应该怎么办呢&a…...

将内网的IP地址映射到外网的几种方案

文章目录 1. 背景与目标2. 核心方案选型3. 方案A&#xff1a;路由器端口映射&#xff08;详细步骤&#xff09;3.1 前置条件3.2 配置流程3.3 验证访问 4. 方案B&#xff1a;云平台NAT网关配置&#xff08;以阿里云为例&#xff09;4.1 前置条件4.2 配置流程4.3 验证访问 5. 方案…...

基于深度学习的图像超分辨率技术研究与实现

一、引言 在数字图像处理领域,图像超分辨率技术一直是一个备受关注的热点话题。随着人们对图像质量要求的不断提高,如何将低分辨率图像提升到高分辨率,同时保持图像的细节和清晰度,成为了一个极具挑战性的问题。传统的图像超分辨率技术主要依赖于插值方法,如双线性插值、双…...

A股复权计算_权息数据整理

目录 前置&#xff1a; 步骤&#xff1a; 1 以通达信为参照 2 从优矿获取所需数据 2.1 股票配股信息 2.2 股票分红信息 2.3 股票拆股信息 3 合并数据&#xff0c;制成权息数据表 权息数据截止20250329.7z 视频 前置&#xff1a; 1 本系列将以 “A股复权计算_” 开头…...

如何进行Prompt调优?

一. 神奇的咒语 在输入prompt前&#xff0c;加入下面这一段“神奇的咒语”&#xff0c;中文或者英文&#xff0c;就能帮你优化提示词。 I want you to become my Expert Prompt Creator. Your goal is to help me craft the best possible prompt for my needs. The prompt yo…...

Git Tag 详解:版本管理与实战指南

文章目录 Git Tag 详解&#xff1a;版本管理与实战指南1. Git Tag 的类型2. Git Tag 的常见操作(1) 创建标签① 创建轻量标签② 创建附注标签③ 给指定的提交打标签 (2) 查看标签(3) 删除标签(4) 推送标签到远程① 推送单个标签② 推送所有标签 (5) 删除远程标签 3. 使用 Tag 的…...

从零开始打造HTML5拼图游戏:一个Canvas实战项目

从零开始打造HTML5拼图游戏&#xff1a;一个Canvas实战项目 先看效果&#xff1a; 你是否曾经被那些精美的网页拼图游戏所吸引&#xff1f;用 HTML5 的 Canvas 技术&#xff0c;从零开始&#xff0c;教你怎么画图、处理鼠标事件&#xff0c;还有游戏的核心逻辑&#xff0c…...

【数据分享】2000—2024年我国乡镇的逐年归一化植被指数(NDVI)数据(年最大值/Shp/Excel格式)

之前我们分享过2000-2024年我国逐年的归一化植被指数&#xff08;NDVI&#xff09;栅格数据&#xff0c;该逐年数据是取的当年月归一化植被指数&#xff08;NDVI&#xff09;的年最大值&#xff01;另外&#xff0c;我们基于此年度栅格数据按照行政区划取平均值&#xff0c;得到…...

设计模式 Day 2:工厂方法模式(Factory Method Pattern)详解

继 Day 1 学习了单例模式之后&#xff0c;今天我们继续深入对象创建型设计模式——工厂方法模式&#xff08;Factory Method&#xff09;。工厂方法模式为对象创建提供了更大的灵活性和扩展性&#xff0c;是实际开发中使用频率极高的一种设计模式。 一方面&#xff0c;我们将简…...

TensorFlow SegFormer 实战训练代码解析

一、SegFormer 实战训练代码解析 SegFormer 是一个轻量级、高效的语义分割模型&#xff0c;结合了 ViT&#xff08;视觉 Transformer&#xff09; 和 CNN 的高效特征提取能力&#xff0c;适用于边缘 AI 设备&#xff08;如 Jetson Orin&#xff09;。下面&#xff0c;我们深入…...

51c嵌入式~单片机~合集7~※

我自己的原文哦~ https://blog.51cto.com/whaosoft/13692314 一、芯片工作的心脏--晶振 在振荡器中采用一个特殊的元件——石英晶体&#xff0c;它可以产生频率高度稳定的交流信号&#xff0c;这种采用石英晶体的振荡器称为晶体振荡器&#xff0c;简称晶振。 制作方法 …...

私有知识库 Coco AI 实战(一):Linux 平台部署

Coco AI 是一个完全开源、跨平台的统一搜索和生产力工具&#xff0c;能够连接各种数据源&#xff0c;包括应用程序、文件、Google Drive、Notion、Yuque、Hugo 等&#xff0c;帮助用户快速智能地访问他们的信息。通过集成 DeepSeek 等大型模型&#xff0c;Coco AI 实现了智能个…...

大模型高质量rag构建:A Cheat Sheet and Some Recipes For Building Advanced RAG

原文&#xff1a;A Cheat Sheet and Some Recipes For Building Advanced RAG — LlamaIndex - Build Knowledge Assistants over your Enterprise DataLlamaIndex is a simple, flexible framework for building knowledge assistants using LLMs connected to your enterpris…...

LeetCode 78.子集

问题描述 给定一个不含重复元素的整数数组 nums&#xff0c;返回其所有可能的子集&#xff08;幂集&#xff09;。 示例 输入&#xff1a; nums [1,2,3] 输出&#xff1a; [ [], [1], [1,2], [1,2,3], [1,3], [2], [2,3], [3] ]解法&#xff1a;回溯算法 回溯是一种 暴力…...

变量(Variable)

免责声明 如有异议请在评论区友好交流&#xff0c;或者私信 内容纯属个人见解&#xff0c;仅供学习参考 如若从事非法行业请勿食用 如有雷同纯属巧合 版权问题请直接联系本人进行删改 前言 提示&#xff1a;从小学解方程变量x&#xff0c;到中学阶段函数自变量x因变量y&…...

【STM32】最后一刷-江科大Flash闪存-学习笔记

FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;可以对程序存储器和选项字节进行擦除和编程&#xff0c;&#xff08;系统存储器用于存储原厂写入的BootLoader程序&#xff0c;用于串口…...

Dify 深度集成 MCP实现灾害应急响应

一、架构设计 1.1 分层架构 #mermaid-svg-5dVNjmixTX17cCfg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5dVNjmixTX17cCfg .error-icon{fill:#552222;}#mermaid-svg-5dVNjmixTX17cCfg .error-text{fill:#552222…...

2025 年上半年软考信息系统项目管理师备考计划

2025 年上半年软考信息系统项目管理师备考计划​ 2025 年上半年软考信息系统项目管理师考试时间为 5 月 24 日 - 27 日&#xff0c;从现在开始备考&#xff0c;需合理规划&#xff0c;高效学习。以下为详细备考计划&#xff1a;​ 一、基础学习阶段&#xff08;现在 - 4 月上…...

Scikit-learn使用指南

1. Scikit-learn 简介 定义&#xff1a; Scikit-learn&#xff08;简称 sklearn&#xff09;是基于 Python 的开源机器学习库&#xff0c;提供了一系列算法和工具&#xff0c;用于数据挖掘、数据预处理、分类、回归、聚类、模型评估等任务。特点&#xff1a; 基于 NumPy、SciP…...

学习大模型需要具备哪些技术、知识和基础

数学基础 概率论与数理统计&#xff1a;用于理解模型中的不确定性、概率分布&#xff0c;以及进行数据的统计分析、评估模型的性能等。例如&#xff0c;通过概率分布来描述模型预测结果的可信度&#xff0c;利用统计方法对数据进行抽样、估计模型的参数等。线性代数&#xff1…...

十五届蓝桥杯省赛Java B组(持续更新..)

目录 十五届蓝桥杯省赛Java B组第一题&#xff1a;报数第二题&#xff1a;类斐波那契数第三题&#xff1a;分布式队列第四题&#xff1a;食堂第五题&#xff1a;最优分组第六题&#xff1a;星际旅行第七题&#xff1a;LITS游戏第八题&#xff1a;拼十字 十五届蓝桥杯省赛Java B…...

Flink SQL Client bug ---datagen connector

原始sql语句如下 CREATE TABLE test_source (event_time TIMESTAMP(3), -- 事件时间&#xff08;精确到毫秒&#xff09;click INT, -- 随机数值字段WATERMARK FOR event_time AS event_time - INTERVAL 5 SECOND WITH (connector datagen, …...

股指期货的多头套期保值是什么意思?

多头套期保值&#xff0c;又叫“买入套期保值”&#xff0c;听起来很复杂&#xff0c;其实很简单。它的核心就是“提前锁定价格&#xff0c;防止未来价格上涨”。 举个例子&#xff0c;假设你是一家工厂的老板&#xff0c;过几个月要买一批原材料。现在原材料的价格是100元/吨…...

hadoop集群配置-scp命令

scp 命令用于在不同主机之间复制文件或目录&#xff0c;在Hadoop集群配置中常用于将配置文件或相关资源分发到各个节点。以下是 scp 命令的基本用法和在Hadoop集群配置中的示例&#xff1a; 基本语法 scp [-r] [源文件或目录] [目标用户目标主机:目标路径] - -r &#xff1a;…...

Redis 源码硬核解析系列专题 - 结语:从源码看Redis的设计哲学

1. 引言 通过前七篇的源码解析,我们从Redis的整体架构、核心数据结构、事件驱动模型,到内存管理、持久化、主从复制与集群模式,逐步揭开了Redis高性能与简洁性的秘密。本篇将总结这些技术细节,提炼Redis的设计哲学,并探讨如何将源码学习成果应用到实际开发中。 2. Redis的…...

解决QSharedPointer栈变量的崩溃问题

目录 参考崩溃代码现象 解决 参考 QSharedPointer的陷阱 qt中的共享指针&#xff0c;QSharedPointer类 崩溃 代码 #include <QtCore/QCoreApplication> #include <QDebug> #include <QSharedPointer>class MyClass { public:void doSomething() {qDebug…...

Lambda 表达式是什么以及如何使用

目录 &#x1f4cc; Kotlin 的 Lambda 表达式详解 &#x1f3af; 什么是 Lambda 表达式&#xff1f; &#x1f525; 1. Lambda 表达式的基本语法 ✅ 示例 1&#xff1a;Lambda 基本写法 ✅ 示例 2&#xff1a;使用 it 关键字&#xff08;单参数简化&#xff09; ✅ 示例 3…...

C++自定义迭代器

实现自己的迭代器 最近在写数据结构&#xff0c;使用类模板实现&#xff0c;碰到了一些问题&#xff0c;其中有一个就是遍历的问题&#xff0c;查阅资料最后实现了自己的迭代器&#xff0c;让我实现的数据结构能像STL一样进行for循环遍历。 类的构成 #include <stdexcept…...

PWA 中的 Service Worker:如何实现应用离线功能

前言 在当今快速发展的互联网时代&#xff0c;Progressive Web App (PWA) 正在逐步成为现代 Web 开发的主流选择。PWA 将 Web 应用和原生应用的最佳特性相结合&#xff0c;提供了丰富的用户体验。而在 PWA 的众多技术中&#xff0c;Service Worker 无疑是其核心组件之一。 作…...

dockerfile制作镜像

1.docker pull centos:centos7 2.dockerfile内容 FROM centos:centos7 #指定镜像维护的作者和邮箱 MAINTAINER csdn< **********qq.com #设置环境变量mypath ENV MYPATH /usr/local #设置进入容器的默认目录是/usr/local WORKDIR $MYPATH # 下载并替换 CentOS 镜像源 RUN …...

网络空间安全(46)DevSecOps概述

一、定义与核心理念 DevSecOps是“开发&#xff08;Development&#xff09;、安全&#xff08;Security&#xff09;和运营&#xff08;Operations&#xff09;”的结合&#xff0c;它将安全实践融入软件开发生命周期的每个阶段&#xff0c;从需求、设计、开发、测试到部署和运…...

LeetCode 211

实现支持通配符的字典树&#xff08;Trie&#xff09;&#xff1a;解决单词匹配问题 一、问题描述 我们需要设计一个数据结构&#xff0c;支持以下功能&#xff1a; 添加新单词搜索字符串是否与任何已添加的单词匹配&#xff0c;其中搜索字符串可能包含通配符 .&#xff08;…...

Docker Compose 启动jar包项目

参考文章安装Docker和Docker Compose 点击跳转 配置 创建一个文件夹存放项目例如mydata mkdir /mydata上传jar包 假设我的jar包名称为goudan.jar 编写dockerfile文件 vim app-dockerfile按键盘上的i进行编辑 # 使用jdk8 FROM openjdk:8-jre# 设置时区 上海 ENV TZAsia/Sh…...

利用deepseek直接调用其他文生图网站生成图片

这次deepseek输入中文后&#xff0c;其实翻译英文后&#xff0c;是可以丢到比如pollinations.这个网站&#xff0c;来生成图片&#xff0c;用法如下&#xff1a; 你是一个图像生成助手&#xff0c;请根据我的简单描述&#xff0c;想象并详细描述一幅完整的画面。 然后将你的详…...

远程装个Jupyter-AI协作笔记本,Jupyter容器镜像版本怎么选?安装部署教程

通过Docker下载Jupyter镜像部署&#xff0c;输入jupyter会发现 有几个版本&#xff0c;不知道怎么选&#xff1f;这几个版本有什么差别&#xff1f; 常见版本有&#xff1a; jupyter/base-notebookjupyter/minimal-notebookjupyter/scipy-notebookjupyter/datascience-notebo…...

11. 盛最多水的容器

leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 最左右两边逐步往中间走&#xff0c;每次在左右中选取小的一个或–记录最大面积 提示&#xff1a;小白个人理解&#xff0c;如有错误敬请谅解&#xff01; 二、外层配合操作…...

Selenium Web自动化如何快速又准确的定位元素路径,强调一遍是元素路径

如果文章对你有用&#xff0c;请给个赞&#xff01; 匹配的ChromeDriver和浏览器版本是更好完成自动化的基础&#xff0c;可以从这里去下载驱动程序&#xff1a; 最全ChromeDriver下载含win linux mac 最新版本134.0.6998.165 持续更新..._chromedriver 134-CSDN博客 如果你问…...