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

第11次:用户注册(完整版)

第一步:定义用户模型类

class User(AbstractUser):mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')class Meta:db_table = 'tb_user'verbose_name = '用户'verbose_name_plural = verbose_namedef __str__(self):return self.username

第二步:在配置文件中配置自定义User模型类,用自定义的User模型类代替Django自带的User模型类

#dev.py
# 指定本项目用户模型类,让Django自带的User类不起作用
AUTH_USER_MODEL = 'users.User'

第三步:生成数据表

python .\manage.py makemigrations
python .\manage.py migrate

第四步:定义视图类,处理注册时请求

import refrom django.db import DatabaseError
from django.http import HttpResponseForbidden
from django.shortcuts import render, redirect
from django.urls import reverse
from django.views import View# from xiaoyu_mall.apps.users.models import User    应用目录变更后不要使用这种方式来导包
# 推荐使用如下的相对路径来导包
from .models import Userclass RegisterView(View):# get请求,def get(self, request):return render(request, 'register.html')def post(self, request):# 第一步:接收请求参数username = request.POST.get('username')password = request.POST.get('password')password2 = request.POST.get('password2')mobile = request.POST.get('mobile')allow = request.POST.get('allow')# 第二步:判断参数是否完整if not all([username, password, mobile, allow]):return HttpResponseForbidden('缺少必要参数')# 用户名长度校验if not re.match(r'^[a-zA-Z0-9_-]{5,20}$', username):return HttpResponseForbidden('请输入5-20个字符的用户名')# 检验密码格式if not re.match(r'^[0-9A-Za-z]{8,20}$', password):return HttpResponseForbidden('请输入8-20位的密码')# 检验两次密码一致if password != password2:return HttpResponseForbidden('两次密码不一致')# 校验手机号if not re.match(r'^1[3-9]{9}$', mobile):return HttpResponseForbidden('请输入正确的手机号')# 提醒勾选协议if allow != 'on':return HttpResponseForbidden('请勾选协议')# 第三步:保存注册数据try:User.objects.create_user(username=username, password=password, mobile=mobile)except DatabaseError:return render(request, 'register.html', {'register_errmsg': '注册失败'})# 返回注册结果return redirect(reverse('contents:index'))

第五步:定义根路由和子路由

#根路由
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),# 导入path('', include('users.urls', namespace='users')),
]
from django.urls import path
# 变更了应用所在目录之后,不要使用这种方式导包
# from xiaoyu_mall.apps.users import views
# 推荐使用如下的相对路径来导包
from . import views
# 设置命名空间
app_name = 'users'
urlpatterns = [path('register/', views.RegisterView.as_view(), name='register'),
]

第六步:注册过程中的前端校验与后端校验

  • 前端校验使用vue-2.5.16.js实现,预先校验表单数据的合法性,定义在register.js中
  1. 用户名与手机号先要经过前端正则校验后,再向后端发送查询请求,确定数据库中没有重复数据之后再保存。
  2. 密码要在先在前端正则检验
  3. 要校验确认密码与密码是否一致
  4. 要校验手机号的格式
  5. 要校验是否勾选协议

在static/js/目录下创建register.js

let vm = new Vue({el: '#app',// 修改Vue读取变量的语法delimiters: ['[[', ']]'],data: {username: '',		// 用户名password: '', 		// 密码password2: '',		// 确认密码mobile: '',			// 手机号allow: '',			// 同意协议uuid: '',image_code_url: '',	// 图形验证码image_code: '',error_name: false,error_password: false,error_password2: false,error_mobile: false,error_allow: false,error_image_code: false,error_name_message: '',		// 用户名错误提示error_mobile_message: '',	// 手机错误提示error_image_code_message: '',},mounted(){// 界面获取图形验证码this.generate_image_code();},methods: {// 生成图形验证码generate_image_code(){// 生成UUID。generateUUID() : 封装在common.js文件中,需要提前引入this.uuid = generateUUID();// 拼接图形验证码请求地址this.image_code_url = "/image_codes/" + this.uuid + "/";},// 校验用户名check_username(){// 准备正则表达式let re = /^[a-zA-Z0-9_-]{5,20}$/;// 正则表达式匹配用户名if (re.test(this.username)) {this.error_name = false;} else {this.error_name_message = '请输入5-20个字符的用户名';this.error_name = true;}// 检查用户名是否重名注册if (this.error_name == false) {let url = '/usernames/' + this.username + '/count/';axios.get(url,{responseType: 'json'}).then(response => {if (response.data.count == 1) {this.error_name_message = '用户名已存在';this.error_name = true;} else {this.error_name = false;}}).catch(error => {console.log(error.response);})}},// 校验密码check_password(){let re = /^[0-9A-Za-z]{8,20}$/;if (re.test(this.password)) {this.error_password = false;} else {this.error_password = true;}},// 校验确认密码check_password2(){// 判断两次密码是否一致if(this.password != this.password2) {this.error_password2 = true;} else {this.error_password2 = false;}},// 校验手机号check_mobile(){let re = /^1[3-9]\d{9}$/;if(re.test(this.mobile)) {this.error_mobile = false;} else {this.error_mobile_message = '您输入的手机号格式不正确';this.error_mobile = true;}// 检查手机号是否重复注册if (this.error_mobile == false) {let url = '/mobiles/'+ this.mobile + '/count/';axios.get(url, {responseType: 'json'}).then(response => {if (response.data.count == 1) {this.error_mobile_message = '手机号已存在';this.error_mobile = true;} else {this.error_mobile = false;}}).catch(error => {console.log(error.response);})}},// 检查图形验证码check_image_code(){if(this.image_code.length != 4) {this.error_image_code_message = '请填写图片验证码';this.error_image_code = true;} else {this.error_image_code = false;}},// 校验是否勾选协议check_allow(){if(!this.allow) {this.error_allow = true;} else {this.error_allow = false;}},// 监听表单提交事件on_submit(){this.check_username();this.check_password();this.check_password2();this.check_mobile();this.check_allow();if(this.error_name == true || this.error_password == true || this.error_password2 == true|| this.error_mobile == true || this.error_allow == true) {// 禁用表单的提交window.event.returnValue = false;}},}
});

common.js

// 获取cookie
function getCookie(name) {let r = document.cookie.match("\\b" + name + "=([^;]*)\\b");return r ? r[1] : undefined;
}// 提取地址栏中的查询字符串
function get_query_string(name) {let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');let r = window.location.search.substr(1).match(reg);if (r != null) {return decodeURI(r[2]);}return null;
}// 生成uuid
function generateUUID() {let d = new Date().getTime();if(window.performance && typeof window.performance.now === "function"){d += performance.now(); //use high-precision timer if available}let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {let r = (d + Math.random()*16)%16 | 0;d = Math.floor(d/16);return (c=='x' ? r : (r&0x3|0x8)).toString(16);});return uuid;
}
  • 后端校验通过视图来实现,通过查询数据库校验用户名、手机号在系统中的是否唯一。

users应用下views.py

from xiaoyu_mall.utils.response_code import RETCODEclass MobileCountView(View):"""手机号唯一性校验"""def get(self, request, mobile):count = User.objects.filter(mobile=mobile).count()return JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'count': count})class UsernameCountView(View):"""判断用户名是否重复注册"""def get(self, request, username):count = User.objects.filter(username=username).count()return JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'count': count})

上面代码用的状态码定义在xiaoyu_mall/xiaoyu_mall/utils/response_code.py中

class RETCODE:OK                  = "0"IMAGECODEERR        = "4001"THROTTLINGERR       = "4002"NECESSARYPARAMERR   = "4003"USERERR             = "4004"PWDERR              = "4005"CPWDERR             = "4006"MOBILEERR           = "4007"SMSCODERR           = "4008"ALLOWERR            = "4009"SESSIONERR          = "4101"DBERR               = "5000"EMAILERR            = "5001"TELERR              = "5002"NODATAERR           = "5003"NEWPWDERR           = "5004"OPENIDERR           = "5005"PARAMERR            = "5006"STOCKERR            = "5007"err_msg = {RETCODE.OK                 : "成功",RETCODE.IMAGECODEERR       : "图形验证码错误",RETCODE.THROTTLINGERR      : "访问过于频繁",RETCODE.NECESSARYPARAMERR  : "缺少必传参数",RETCODE.USERERR            : "用户名错误",RETCODE.PWDERR             : "密码错误",RETCODE.CPWDERR            : "密码不一致",RETCODE.MOBILEERR          : "手机号错误",RETCODE.SMSCODERR          : "短信验证码有误",RETCODE.ALLOWERR           : "未勾选协议",RETCODE.SESSIONERR         : "用户未登录",RETCODE.DBERR              : "数据错误",RETCODE.EMAILERR           : "邮箱错误",RETCODE.TELERR             : "固定电话错误",RETCODE.NODATAERR          : "无数据",RETCODE.NEWPWDERR          : "新密码数据",RETCODE.OPENIDERR          : "无效的openid",RETCODE.PARAMERR           : "参数错误",RETCODE.STOCKERR           : "库存不足",
}
  • 路由配置,在users应用下urls.py中,
from django.urls import path, re_path
# 变更了应用所在目录之后,不要使用这种方式导包
# from xiaoyu_mall.apps.users import views
# 推荐使用如下的相对路径来导包
from . import views# 设置命名空间
app_name = 'users'
urlpatterns = [path('register/', views.RegisterView.as_view(), name='register'),re_path('usernames/(?P<username>[a-zA-Z0-9_-]{5,20})/count/', views.UsernameCountView.as_view()),re_path(r'mobiles/(?P<mobile>1[3-9]\d{9})/count/', views.MobileCountView.as_view()),
]

第七步:图形验证

安装依赖库

pip install pillow
pip install captcha

图形验证码要存在redis数据库中,在xiaoyu_mall/dev.py配置使用redis的2号库存图形验证码

CACHES = {"default": {  # 默认"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/0","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},"session": {  # session"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/1","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},"verify_code": {  # 保存验证码"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/2",  # 选择redis2号库"OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},
}

在verifications应用中创建constants.py,用于设置图形验证码有效期的变量

# 图形验证码有效期,单位:秒
IMAGE_CODE_REDIS_EXPIRES = 300
# 短信验证码有效期,单位:秒
SMS_CODE_REDIS_EXPIRES = 300

在verifications应用中创建verify_pic.py

from captcha.image import ImageCaptcha
import io
import random
import string# 生成随机验证码
def generate_captcha_text():captcha_text = ''.join(random.choices(string.ascii_letters +string.digits, k=4))return captcha_text# 生成验证码图片
def generate_captcha_image(text):image = ImageCaptcha()data = image.generate_image(text)img_byte_array = io.BytesIO()data.save(img_byte_array, format='PNG')binary_image = img_byte_array.getvalue()return binary_image

在verifications应用下views.py定义生成图形验证码的类视图

from django.views import View
from .verify_pic import generate_captcha_text,generate_captcha_image
from django_redis import get_redis_connection
from . import constants
from django.http import HttpResponse
import logging# 日志记录器
logger = logging.getLogger('django')class ImageCodeView(View):def get(self, request, uuid):text = generate_captcha_text()image = generate_captcha_image(text)# print(text)  # 输出生成的验证码redis_conn = get_redis_connection('verify_code')  # 保存图形验证码# setex 保存到redis中 并设置生存时间redis_conn.setex('img_%s' % uuid,constants.IMAGE_CODE_REDIS_EXPIRES, text)# 响应图形验证码return HttpResponse(image, content_type='image/jpg')

配置根路由

from django.contrib import admin
from django.urls import path, includefrom xiaoyu_mall.apps import verificationsurlpatterns = [path('admin/', admin.site.urls),# 导入path('', include('users.urls', namespace='users')),path('', include('contents.urls', namespace='contents')),path('',include('verifications.urls')),
]

配置verifications应用下子路由

from django.urls import path, re_path
# 变更了应用所在目录之后,不要使用这种方式导包
# from xiaoyu_mall.apps.users import views
# 推荐使用如下的相对路径来导包
from . import viewsurlpatterns = [path('image_codes/<uuid:uuid>', views.ImageCodeView.as_view(), name='register'),
]

相关文章:

第11次:用户注册(完整版)

第一步&#xff1a;定义用户模型类 class User(AbstractUser):mobile models.CharField(max_length11, uniqueTrue, verbose_name手机号)class Meta:db_table tb_userverbose_name 用户verbose_name_plural verbose_namedef __str__(self):return self.username第二步&…...

论文速读《Embodied-R: 基于强化学习激活预训练模型具身空间推理能力》

项目主页&#xff1a;https://embodiedcity.github.io/Embodied-R/ 论文链接&#xff1a;https://arxiv.org/pdf/2504.12680 代码链接&#xff1a;https://github.com/EmbodiedCity/Embodied-R.code 0. 简介 具身智能是通用人工智能的重要组成部分。我们希望预训练模型不仅能在…...

VMware Fusion安装win11 arm;使用Mac远程连接到Win

目录 背景步骤1. 安装Fusion2. 下载Win113. 安装Win113.1 初始步骤3.2 进入安装 4. 安装Windows APP 背景 最近国补太火热了&#xff0c;让Macbook来到6000这个价位。实在没忍住&#xff0c;最后入手了一台M3芯片的Macbook Air&#xff08;jd6799&#xff09;。 既然运维出身&…...

【ARM】DS-试用授权离线激活

1、 文档目标 解决客户无法在公司网络管控下进行ARM DS 试用激活&#xff0c;记录解决方案。 2、 问题场景 客户在ARM DS激活时无法连接到ARM认证网址&#xff0c;客户公司网络管理无法开放全部网络权限&#xff0c;只能针对特定网址和网络端口可以开放或客户公司开发环境无法…...

泰迪杯特等奖案例学习资料:基于卷积神经网络与集成学习的网络问政平台留言文本挖掘与分析

(第八届“泰迪杯”数据挖掘挑战赛A题特等奖案例深度解析) 一、案例背景与核心挑战 1.1 应用场景与行业痛点 随着“互联网+政务”的推进,网络问政平台成为政府与民众沟通的重要渠道。某市问政平台日均接收留言超5000条,涉及民生、环保、交通等20余类诉求。然而,传统人工…...

基于 ReentrantReadWriteLock 实现高效并发控制

在多线程 Java 应用中,管理共享资源的访问是确保数据一致性和避免竞争条件的关键挑战。在某些场景中,多个线程需要频繁读取共享数据,而只有一个线程偶尔需要更新数据。例如,在一个网页投票系统中,大量用户可能同时查看投票结果(读操作),而投票更新(写操作)则相对较少…...

代理式AI(Agentic AI):2025年企业AI转型的催化剂

李升伟 摘译 步入2025&#xff1a;代理式AI开启企业智能化转型新纪元 随着2025年临近&#xff0c;企业已不再纠结"是否采用人工智能"&#xff0c;而是迫切追问"如何加速AI进化"。传统AI系统在敏捷性、扩展性和自主性上的局限日益显现&#xff0c;新一代技…...

MySQL中MVCC指什么?

简要回答&#xff1a; MVCC&#xff08;multi version concurrency control&#xff09;即多版本并发控制&#xff0c;为了确保多线程下数据的安全&#xff0c;可以通过undo log和ReadView来实现不同的事务隔离级别。 对于已提交读和可重复读隔离级别的事务来说&#xff0c;M…...

购物数据分析

这是一个关于电商双11美妆数据分析的项目页面&#xff0c;包含版本记录、运行代码提示、评论等功能模块的相关描述。&#xff0c;会涉及数据处理、可视化、统计分析等代码逻辑&#xff0c;用于处理美妆电商双11相关数据&#xff0c;如销售数据统计、消费者行为分析等 。 数据源…...

基于GA遗传优化的不同规模城市TSP问题求解算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 旅行商问题&#xff08;Traveling Salesman Problem&#xff0c;TSP&#xff09;是一个经典的组合优化问题&#xff0c;旨在找到一个旅行商在访问多个城市后回到起…...

Nginx 安全防护与 HTTPS 部署

目录 一. 核心安全配置 1. 隐藏版本号 2. 限制危险请求方法 3. 请求限制&#xff08;CC 攻击防御&#xff09; 4. 防盗链 二. 高级防护 1. 动态黑名单 2. nginx https 配置 2.1 https 概念 2.1.1 https 为什么不安全 2.1.2 安全通信的四大原则 2.1.3 HTTPS 通信原理…...

隐私计算框架FATE二次开发心得整理(工业场景实践)

文章目录 版本介绍隐私计算介绍前言FATE架构总体架构FateBoard架构前端架构后端架构 FateClient架构创建DAG方式DAG生成任务管理python SDK方式 FateFlow架构Eggroll架构FATE算法架构Cpn层FATE ML层 组件新增流程新增组件流程新增算法流程 版本介绍 WeBank的FATE开源版本 2.2.…...

MySQL性能调优探秘:我的实战笔记 (上篇:从EXPLAIN到SQL重写)

哈喽&#xff0c;各位技术伙伴们&#xff01;&#x1f44b; 最近我一头扎进了 MySQL 性能调优的奇妙世界&#xff0c;感觉就像打开了新世界的大门&#xff01;从一脸懵懂到现在能看懂 EXPLAIN 的“天书”&#xff0c;还能对 SQL “指点江山”&#xff0c;这个过程充满了“啊哈&…...

第15章 Python数据类型详解之分解理解:基础数据类型常见易错点和性能优化篇

文章目录 @[toc]第15章 Python数据类型详解之分解理解:基础数据类型常见易错点和性能优化一、常见易错点剖析1. 整数(`int`)2. 浮点数(`float`)3. 布尔(`bool`)4. 字符串(`str`)5. 字节(`bytes`)与字节数组(`bytearray`)二、性能优化策略1. 整数运算优化2. 浮点数…...

20250506联想Lenovo笔记本电脑的USB鼠标失效之后在WIN10下的关机的方法【触摸板被禁用】

20250506联想Lenovo笔记本电脑的USB鼠标失效之后在WIN10下的关机的方法【触摸板被禁用】 2025/5/6 20:35 缘起&#xff1a;在调试的时候&#xff0c;USB鼠标突然失效了。 由于USB转TTL电平的串口CH340经常插拔【可能接口接触不良了&#xff0c;插拔测试一下是不是串口坏掉了】。…...

【Hive入门】Hive安全管理与权限控制:审计日志全解析,构建完善的操作追踪体系

目录 引言 1 Hive审计日志概述 1.1 审计日志的核心价值 1.2 Hive审计日志类型 2 HiveServer2操作日志配置 2.1 基础配置方案 2.2 日志格式解析 2.3 日志轮转配置 3 Metastore审计配置 3.1 Metastore审计启用 3.2 审计事件类型 4 高级审计方案 4.1 与Apache Ranger…...

某团小程序mtgsig,_token 生成逻辑分析

前言 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 太久不更新 重新找回号 …...

C#问题 加载格式不正确解决方法

出现上面问题 解决办法&#xff1a;C#问题 改成x86 不要选择anycpu...

K-means

K均值算法&#xff08;K-means&#xff09;聚类 【关键词】K个种子&#xff0c;均值 一、K-means算法原理 聚类的概念&#xff1a;一种无监督的学习&#xff0c;事先不知道类别&#xff0c;自动将相似的对象归到同一个簇中。 K-Means算法是一种聚类分析&#xff08;cluster…...

凌晨三点的数据库崩溃现场

我是小明&#xff0c;一个在创业公司打杂的全栈开发者。上周四凌晨三点&#xff0c;老板突然在群里甩来一句&#xff1a;"明天早会需要用户行为分析报表&#xff0c;重点看 Q1 新注册用户的付费转化率。"我揉着眼睛打开电脑&#xff0c;对着三个屏幕发愣 —— 左边是…...

【大模型面试】大模型(LLMs)高频面题全面整理(★2025年5月最新版★)

【大模型面试】大模型&#xff08;LLMs&#xff09;高频面题全面整理&#xff08;★2025年5月最新版★&#xff09; &#x1f31f; 嗨&#xff0c;你好&#xff0c;我是 青松 &#xff01; &#x1f308; 自小刺头深草里&#xff0c;而今渐觉出蓬蒿。 本笔记适合大模型初学者和…...

C++入门基础(上)

一. C发展历史 C的起源可以追溯到1979年&#xff0c;当时Bjarne Stroustrup(本贾尼斯特劳斯特卢普&#xff0c;这个翻译的名字不同的地方可能有差异)在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务&#xff0c;特别是模拟和操作系统的开发工作…...

Nacos源码—4.Nacos集群高可用分析四

大纲 6.CAP原则与Raft协议 7.Nacos实现的Raft协议是如何写入数据的 8.Nacos实现的Raft协议是如何选举Leader节点的 9.Nacos实现的Raft协议是如何同步数据的 10.Nacos如何实现Raft协议的简版总结 8.Nacos实现的Raft协议是如何选举Leader节点的 (1)初始化RaftCore实例时会开…...

互联网大厂Java求职面试:AI与云原生下的系统设计挑战-3

互联网大厂Java求职面试&#xff1a;AI与云原生下的系统设计挑战-3 第一轮提问&#xff1a;从电商场景切入&#xff0c;聚焦分布式事务与库存一致性 面试官&#xff08;严肃&#xff09;&#xff1a;郑薪苦&#xff0c;你最近在做电商系统的促销活动&#xff0c;如何处理分布…...

【KWDB创作者计划】_通过一篇文章了解什么是 KWDB(KaiwuDB)

文章目录 &#x1f4cb; 前言&#x1f3af; 关于 KaiwuDB 组成&#x1f3af; KaiwuDB 核心架构和功能图&#x1f9e9; KaiwuDB 2.0 版本核心特性&#x1f9e9; KaiwuDB Lite 版本介绍 &#x1f3af; KaiwuDB 产品优势&#x1f3af; KaiwuDB 应用场景&#x1f9e9; 典型应用场景…...

双系统电脑中如何把ubuntu装进外接移动固态硬盘

电脑&#xff1a;win11 ubuntu22.04 实体机 虚拟机&#xff1a;VMware17 镜像文件&#xff1a;ubuntu-22.04.4-desktop-amd64.iso 或者 ubuntu20.4的镜像 外接固态硬盘1个 一、首先win11中安装vmware17 具体安装方法&#xff0c;网上很多教程 二、磁盘分区 1.在笔…...

Flink + Kafka 构建实时指标体系的实战方法论

本文聚焦于如何利用 Flink 与 Kafka 构建一套灵活、可扩展的实时指标体系,特别适用于用户行为分析、营销漏斗转化、业务实时看板等场景。 一、为什么要构建实时指标体系? 在数字化运营趋势下,分钟级指标反馈能力变得尤为重要: ✅ 营销投放实时监控 CTR / CVR ✅ 业务增长实…...

RLOO:将多次其他回答的平均reward作为baseline

RLOO&#xff1a;将多次其他回答的平均reward作为baseline TL; DR&#xff1a;基于 REINFROCE 算法&#xff0c;对于同一 prompt 在线采样 k k k 次&#xff0c;取除自己外的其他 k − 1 k-1 k−1 条回答的平均 reward 作为 baseline。 从 PPO 到 REINFORCE 众所周知&…...

在 Laravel 12 中实现 WebSocket 通信时进行身份验证

在 Laravel 12 中实现 WebSocket 通信时&#xff0c;若需在身份验证失败后主动断开客户端连接&#xff0c;需结合 频道认证机制 和 服务端主动断连操作。以下是具体实现步骤&#xff1a; 一、身份验证流程设计 WebSocket 连接的身份验证通常通过 私有频道&#xff08;Private …...

Transformer 与 LSTM 在时序回归中的实践与优化

&#x1f9e0; 深度学习混合模型&#xff1a;Transformer 与 LSTM 在时序回归中的实践与优化 在处理多特征输入、多目标输出的时序回归任务时&#xff0c;结合 Transformer 和 LSTM 的混合模型已成为一种有效的解决方案。Transformer 擅长捕捉长距离依赖关系&#xff0c;而 LS…...

Java注解

注解的底层原理&#xff1a; 注解的本质是一种继承自Annotation类的特殊接口&#xff0c;也被称为声明式接口&#xff0c;编译后会转换为一个继承自Anotation的接口&#xff0c;并生成相应的字节码文件。 注解的具体实现类是Java运行时生成的动态代理对象&#xff08;接口本身…...

Linux USB Gadget | 框架 / 复合设备实践 / Configfs 配置

注&#xff1a;本文为“Linux USB Gadget ”相关文章合辑。 图片清晰度受引文原图所限。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文 Linux USB Gadget 框架概述 2018-04-11 haoxing990 本文记录我在公司 Gadget 相关的驱动开发开发过程中的感悟。…...

Spring Boot之MCP Client开发全介绍

Spring AI MCP(模型上下文协议,Model Context Protocol)客户端启动器为 Spring Boot 应用程序中的 MCP 客户端功能提供了自动配置支持。它支持同步和异步两种客户端实现方式,并提供了多种传输选项。 MCP 客户端启动器提供以下功能: 多客户端实例管理 支持管理多个客户端实…...

nnUNet V2修改网络——暴力替换网络为Swin-Unet

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 Swin-Unet是一种基于纯Transformer的U型编码器-解码器架构,专为医学图像分割任务设计。传统方法主…...

【计网】ICMP、IP、Ethernet PDU之间的封装关系

TCP/IP体系结构 应用层RIP、OSPF、FTP运输层TCP、UDP网际层IP、ARP、ICMP网络接口层底层协议&#xff08;Ethernet&#xff09; 数据链路层 Ethernet报文格式 6Byte6Byte2Byte46~1500Byte4Byte目的MAC地址源MAC地址类型/长度数据FCS 其中&#xff0c;类型 / 长度值小于 1536…...

JSON 转换为 Word 文档

以下是一个在 Spring Boot 中实现 JSON 转 Word 的示例&#xff1a; 首先&#xff0c;需要在项目中引入相关的依赖&#xff0c;如 json 和 Apache POI 等。在 pom.xml 文件中添加以下内容&#xff1a; <!-- JSON 相关依赖 --> <dependency><groupId>com.fast…...

Kotlin Lambda优化Android事件处理

在 Kotlin 中&#xff0c;Lambda 表达式为 Android 事件处理提供了更加简洁优雅的解决方案。通过合理使用 Lambda&#xff0c;可以显著减少模板代码&#xff0c;提升代码可读性。以下是具体实现方式和应用场景&#xff1a; 一、传统方式 vs Lambda 方式对比 1. 按钮点击事件处…...

Springboot接入Deepseek模型

#实现功能&#xff1a;上下文对话、对话历史、清除会话 #本次提供项目源码压缩包&#xff0c;直接下载解压后导入idea即可正常使用 下载好源码后请在DeepSeek 开放平台中注册账号并充值1块余额,注意充值和API keys&#xff0c;API keys包含了秘钥&#xff0c;获取后复制到项目…...

量子跃迁:破解未来计算的“时空密码”​

引言&#xff1a;当量子比特撕裂“摩尔定律”的枷锁 根据德勤《Tech Trends 2025》报告&#xff0c;量子计算机可能在5-20年内成熟&#xff0c;其算力将直接威胁现有加密体系。这不仅是技术的跃迁&#xff0c;更是一场重构数字世界规则的“密码战争”。从谷歌的53量子比特悬铃…...

Spring MVC入门

本内容采用最新SpringBoot3框架版本,视频观看地址:B站视频播放 1. MVC概念 MVC是一种编程思想,它将应用分为模型(Model)、视图(View)、控制器(Controller)三个层次,这三部分以最低的耦合进行协同工作,从而提高应用的可扩展性及可维护性。 模型(Model) 模型层主要…...

【25软考网工】第五章(6)TCP和UDP协议、流量控制和拥塞控制、重点协议与端口

目录 一、TCP和UDP协议 1. TCP和UDP报文格式 1&#xff09;TCP传输控制协议 2&#xff09;UDP用户数据报协议 3&#xff09;TCP与UDP对比 4&#xff09;TCP和UDP类比 5&#xff09;应用案例 例题1#可靠传输服务层 例题2#提供可靠传输功能层 6&#xff09;TCP报文格式…...

如何修改 JAR 包中的源码

如何修改 JAR 包中的源码 前言一、准备工作二、将 JAR 当作 ZIP 打开并提取三、重写 Java 类方法 A&#xff1a;直接替换已编译的 .class方法 B&#xff1a;运行时类路径优先加载 四、修改 MyBatis&#xff08;或其他&#xff09;XML 资源五、重新打包 JAR&#xff08;命令行&a…...

【Linux网络】应用层协议HTTP

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12891150.html 目录 HTTP 协议 认识 URL urlencode 和 urldecode HTTP 协议请求与响应格式 H…...

高并发架构及场景解决方案

高并发 一、什么是高并发&#xff1f; 高并发是指系统在短时间内能够同时处理大量用户请求或任务的能力&#xff0c;是衡量分布式系统、互联网应用性能的重要指标之一。它的核心目标是确保系统在高负载下仍能稳定、高效运行&#xff0c;同时提供良好的用户体验。 1、高并发系…...

[ linux-系统 ] 常见指令2

1. man 指令 语法&#xff1a;man [选项] 命令 功能&#xff1a;查看联机手册获取帮助。 选项说明-k根据关键字搜索联机帮助。num只在第num章节找。-a显示所有章节的内容。 man是 Unix 和类 Unix 系统中的一个命令&#xff0c;用于查看操作系统和软件的手册页面&#xff08;ma…...

Spring AI快速入门

一、引入依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId> </dependency> <dependencyManagement><dependencies><dependency><groupId>o…...

TCP数据报

三次握手&#xff08;Three-Way Handshake&#xff09; 是 TCP 协议中用于建立可靠连接的过程。通过三次握手&#xff0c;客户端和服务器能够确认彼此的存在&#xff0c;并且同步各自的初始序列号&#xff0c;为后续的数据传输做好准备。三次握手确保了双方在正式传输数据前能…...

JS循环-for循环嵌套

打印5行5列星星 效果图 代码&#xff1a; // 打印出5行5列的星星for(i 1 ; i < 5 ; i ) {// 外层控制打印行for(j 1 ; j < 5 ; j ) {// 内层控制每行打印几个document.write(⭐)}document.write(<br>)} 打印侧三角 效果图 代码&#xff1a; for(i 1 ; i &l…...

【技术追踪】通过潜在扩散和先验知识增强时空疾病进展模型(MICCAI-2024)

向扩散模型中引入先验知识&#xff0c;实现疾病进展预测&#xff0c;扩散模型开始细节作业了~ 论文&#xff1a;Enhancing Spatiotemporal Disease Progression Models via Latent Diffusion and Prior Knowledge 代码&#xff1a;https://github.com/LemuelPuglisi/BrLP 0、摘…...

Linux/AndroidOS中进程间的通信线程间的同步 - 内存映射

前言 如何使用 mmap()系统调用来创建内存映射。内存映射可用于 IPC 以及其他很多方面。 1 概述 mmap()系统调用在调用进程的虚拟地址空间中创建一个新内存映射。映射分为两种。 文件映射&#xff1a;文件映射将一个文件的一部分直接映射到调用进程的虚拟内存中。一旦一个文…...