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

基于Django的权限管理平台

目录

单元一:项目准备

任务一:创建项目

1.1配置 DRF 模型

任务二:设置CSRF令牌

2.1创建app包

2.2检查浏览器Cookies权限

2.3获取cookies

单元二:用户平台

任务一:用户数据模型搭建

1.1创建user模块

1.2生成并执行迁移文件

任务二:列表分页功能

2.1技术栈

2.2知识解析

2.3功能实现

任务三:添加功能

3.1技术栈

3.2功能实现

任务四:修改功能

4.1技术栈

4.2功能实现

任务五:更新修改功能

5.1功能实现

任务六:删除功能

6.1技术栈

6.2功能实现

任务七:重置密码功能

7.1技术栈

7.2功能实现

任务八:状态更新功能

任务九:用户分配角色功能

单元三:角色平台

任务一:分页查询功能

1.1技术栈

1.2功能实现

任务二:角色的更新修改功能

2.1功能实现

任务三:删除管理功能

任务四:权限菜单树

4.1技术栈

4.2功能实现

任务五:根据角色分配菜单功能

5.1技术栈

5.2功能实现

单元四:菜单平台

任务一:菜单分页功能

任务二:菜单的添加修改功能

任务三:树形菜单查询

3.1技术栈

3.2功能实现

单元五:登录平台

6.1技术栈

6.2功能实现


单元一:项目准备

任务一:创建项目

和上述一样

1.1配置 DRF 模型

接下来,使用 DRF 来创建序列化器、视图和 URL 路由,以提供对上述模型的 API 访问。

安装 DRF

可以通 过 pip 进行安装:

pip install djangorestframework

然后,在 settings.py 文件中添加 rest_framework 到INSTALLED_APPS 列表中: INSTALLED_APPS = [ ... 'rest_framework', ]

任务二:设置CSRF令牌

2.1创建app包

见 Django框架 | 0基础入门学习博客,这里不在赘述。

2.2检查浏览器Cookies权限

允许Cookies使用

 

2.3获取cookies

通过写测试函数,在函数中强制生成令牌

使用get_token(request)生成CSRF令牌,通过set_cookie将令牌设置到响应头

# 测试class Testview(View):def get(self,request):response = JsonResponse({"code":200,"msg":"测试"})response.set_cookie('csrftoken', get_token(request))return response

在Postman中进行测试,获取CSRF令牌,如果没有进行CSRF令牌设置,后续会出问题。

 在Postman的Headers中填入SCRF令牌

注意,不能设置成普通的Token,X- 是必要的 

单元二:用户平台

任务一:用户数据模型搭建

1.1创建user模块

设置user实体类,在实体类中定义数据库表的字段

verbose_name:可读文字,用于管理员后台显示

from django.db import models# user实体类
class user(models.Model):username=models.CharField(max_length=100,null=True,unique=True,verbose_name="用户姓名")password=models.CharField(max_length=100,null=True,verbose_name='密码')avater=models.CharField(max_length=255,null=True,verbose_name="用户头像")email=models.CharField(max_length=100,null=True,verbose_name="用户邮箱")phonenumber=models.CharField(max_length=12,null=True,verbose_name="用户手机号")login_date = models.DateField(null=True, verbose_name="最后登录时间")status = models.IntegerField(null=True, verbose_name="帐号状态(0 正常 1 停用)")create_time = models.DateField(null=True, verbose_name="创建时间", )update_time = models.DateField(null=True, verbose_name="更新时间")remark = models.CharField(max_length=500, null=True, verbose_name="备注")class Meta:db_table = "user"

1.2生成并执行迁移文件

生成迁移文件:

manager.py 命令工具:makemigrations user 生成迁移文件

执行迁移文件:

 manager.py 命令工具:migrate user  

刷新查看数据库表

 

任务二:列表分页功能

2.1技术栈

1.Django View:基于类的视图处理HTTP请求

2. Django Paginator:分页工具,实现数据分页逻辑

3. QuerySet API: 数据库查询集操作(如.all().order_by()

4. JSON 数据处理: 解析请求体中的JSON数据

5. JsonResponse: 返回JSON格式的响应

2.2知识解析

(1) 请求数据处理

data = json.loads(request.body.decode("utf-8"))

通过request.body 获取请求体

通过decode("utf-8")解码为字符串

json.loads()解析JSON数据为Python字典

(2) 分页器逻辑

paginator = Paginator(queryset, pageSize)

userlist = paginator.page(pageNum)

Paginator: Django内置分页类

queryset: 查询集(需先排序避免分页混乱),order_by()排序

per_page: 每页条数

page(): 获取指定页码的数据页对象

2.3功能实现

class PageList(View):def post(self,request):# 1.解析请求体中的JSON数据data=json.loads(request.body.decode("utf-8"))# 2.获取分页参数pageSize=data.get("pageSize")   #每页数据量pageNum=data.get("pageNum")     #展示(第一页)第几页print(f"请求分页,每页{pageSize}条,现在是第{pageNum}页")# 构建查询并排序查询集queryset = user.objects.all().order_by('id')  # 排序# 创建分页器对象paginator=Paginator(user.objects.all(),pageSize)# 获取指定页码的数据页userlist=paginator.page(pageNum)User=list(userlist.object_list.values())total=paginator.countreturn JsonResponse({"code":200,"msg":"分页成功","data":User,"total":total})

示例:

 

任务三:添加功能

3.1技术栈

1.ORM模型(对象关系映射):通过 newlist.save() 将数据存入数据库,说明使用了 Django 的模型层。

2. RESTful API 设计:返回 JSON 格式的响应({"code": 200, "msg": 添加成功"}),方便进行前后端交互。

3.模型字段:从数据库中获取值,在赋值给模型,例如:username=data.get("username")

3.2功能实现

# 增
class AddView(View):def post(self,request):data=json.loads(request.body.decode("utf-8"))newlist=user(username=data.get("username"),password=data.get("password"),email=data.get("email"),phonenumber=data.get("phonenumber"))newlist.status=data.get("status")newlist.create_time=datetime.datetime.now()newlist.save()return JsonResponse({"code":200,"msg":"添加成功"})

示图:

 

任务四:修改功能

4.1技术栈

1. ORM(对象关系映射):通过id,查询相关的所有记录

2. Python 标准库:利用了json模块和datatime模块

3.HTTP协议:处理Post请求

4.数据库操作:查询数据在进行修改

5.前后端交互,使用restful API返回json响应

4.2功能实现

# 改
class UpdataView(View):def post(self,request):data=json.loads(request.body.decode('utf-8'))newlist=user.objects.get(id=data.get("id"))newlist.username=data.get("name")newlist.password=data.get("password")newlist.phonenumber=data.get("phonenumber")newlist.email=data.get("email")newlist.update_time=datetime.datetime.now()newlist.save()return JsonResponse({"code":200,"msg":"修改成功"})

示图:

 

任务五:更新修改功能

通过 user_id == data['id']进行判断用户是否存在。如果存在进行修改功能,如果不存在进行修改功能。

5.1功能实现

class AddorUpdata(View):def post(self, request):data = json.loads(request.body.decode("utf-8"))user_id = data.get("id")  # 使用 get() 避免 KeyError# 新增逻辑:id 不存在或为空if not user_id:newlist = user(username=data.get("username"),password=data.get("password"),email=data.get("email"),phonenumber=data.get("phonenumber"))newlist.status = data.get("status")newlist.create_time = datetime.datetime.now()newlist.save()return JsonResponse({"code": 200, "msg": "添加成功"})# 修改逻辑:id 存在else:try:newlist = user.objects.get(id=user_id)newlist.username = data.get("username")newlist.password = data.get("password")newlist.phonenumber = data.get("phonenumber")newlist.email = data.get("email")newlist.update_time = datetime.datetime.now()newlist.save()return JsonResponse({"code": 200, "msg": "修改成功"})except user.DoesNotExist:return JsonResponse({"code": 404, "msg": "用户不存在"}, status=404)

示图:

 

任务六:删除功能

6.1技术栈

1.ORM 批量删除:通过 id 列表批量删除记录,user.objects.filter(id__in=data).delete()

2. 事务管理:with transaction.atomic(): 确保删除操作的原子性(要么全部成功,要么全部回滚)

6.2功能实现

# 删除
class deleteView(View):def delete(self,request):data=json.loads(request.body.decode("utf-8"))with transaction.atomic():delresult=user.objects.filter(id__in=data).delete()print(delresult)return JsonResponse({'code':200,'msg':'删除成功'})

示图:

 

任务七:重置密码功能

7.1技术栈

1. 请求参数处理:request.GET.get('id'):从 URL 查询参数中获取 id,(如 /resetpassword/?id=12)

2.其余和上述一样

7.2功能实现


# 重置密码
class PasswordView(View):def get(self,request):newid=request.GET.get('id')print(newid)if not newid :return JsonResponse({"code":400,"msg":"没有找到相关id"})newlist=user.objects.get(id=newid)newlist.password=111111newlist.update_time=datetime.datetime.now()newlist.save()return JsonResponse({"code":200,"msg":"密码重置成功"})

示图:

 

任务八:状态更新功能


# 更新状态
class StatusView(View):def get(self,request):newid=request.GET.get('id')print(newid)if not newid  :return JsonResponse({"code":400,"msg":"没有找到相关id"})newlist=user.objects.get(id=newid)newlist.status=1newlist.password=111111newlist.update_time=datetime.datetime.now()newlist.save()return JsonResponse({"code":200,"msg":"状态重置成功"})

示图:

 

任务九:用户分配角色功能

采用先删除后全量插入的模式

# 用户分配角色功能
class GrantView(View):def post(self,request):# 1. 解析请求数据data=json.loads(request.body.decode("utf-8"))# 2. 获取用户ID和角色ID列表user_id=data.get("user_id",1)roleidList=data.get("role_id",[])print(user_id,roleidList)# 3. 删除该用户原有的所有角色关联UserRole.objects.filter(user_id=user_id).delete()# 4. 为该用户添加新的角色for roleid in roleidList:userrole=UserRole(user_id=user_id,role_id=roleid)userrole.save()return JsonResponse({"code":200,"msg":"权限功能分配成功"})

示图:

 

单元三:角色平台

任务一:分页查询功能

1.1技术栈

1.Django View:基于类的视图处理HTTP请求

2. Django Paginator:分页工具,实现数据分页逻辑

3. QuerySet API: 数据库查询集操作(如.all().order_by()

4. JSON 数据处理: 解析请求体中的JSON数据

5. JsonResponse: 返回JSON格式的响应

1.2功能实现

class PageList_role(View):def post(self,request):# 1.解析请求体中的JSON数据data=json.loads(request.body.decode("utf-8"))# 2.获取分页参数pageSize=data.get("pageSize")   #每页数据量pageNum=data.get("pageNum")     #展示(第一页)第几页print(f"请求分页,每页{pageSize}条,现在是第{pageNum}页")# 构建查询并排序查询集queryset = Role.objects.all().order_by('id')  # 排序# 创建分页器对象paginator=Paginator(Role.objects.all(),pageSize)# 获取指定页码的数据页rolelist=paginator.page(pageNum)role=list(rolelist.object_list.values())total=paginator.countreturn JsonResponse({"code":200,"msg":"分页成功","data":role,"total":total})

示图:

 

任务二:角色的更新修改功能

技术与user的一样

2.1功能实现

class AddUpdata_role(View):def post(self,request):data = json.loads(request.body.decode("utf-8"))role_id = data.get('id')if not role_id :newlist = Role(name=data.get("name"),code=data.get("code"),remark=data.get("remark"))# newlist.status = data.get("status")newlist.create_time = datetime.datetime.now()newlist.update_time=datetime.datetime.now()newlist.save()return JsonResponse({"code": 200,"msg": "添加成功"})else:try:newlist = Role.objects.get(id=role_id)newlist.name = data.get("name",Role.name)newlist.code = data.get("code",Role.code)newlist.remark = data.get("remark",Role.remark)newlist.update_time = datetime.datetime.now()newlist.save()return JsonResponse({"code": 200,"msg": "修改成功"})except Role.DoesNotExist:return JsonResponse({"code":404,"msg":"角色不存在"})

 

任务三:删除管理功能

超级管理员可以管理用户和管理员,管理员只可以管理用户,用户没有管理权限

class deleteView_role(View):def delete(self,request):data=json.loads(request.body.decode("utf-8"))with transaction.atomic():delresult=Role.objects.filter(id__in=data).delete()print(delresult)return JsonResponse({'code':200,'msg':'删除成功'})

 

 

任务四:权限菜单树

4.1技术栈

1.使用了Django REST Framework的序列化器(SysMenuSerializer)

2. buildTree方法:实现从扁平菜单列表到树形结构的转换,使用字典存储中间结果,使用两阶段处理:序列化+构建层级关系

4.2功能实现

# 权限菜单树(查询)
class MenuTreeList_role(View):# 构建权限菜单树的方法#  参数: menu_items:从数据库查询出来的所有菜单列表(包含多个 Menu )#  返回: 整理好的树形菜单结构def buildTree(self, menu_items):resultList = []    #用于存储最终的树形结构menu_dict = {}    # 创建空字典# 第一步:将所有菜单项存入字典,并初步序列化# 1.对每个菜单进行遍历for menu in menu_items:# 2.使用 SysMenuSerializer 将每个菜单对象序列化为字典serialized_menu = SysMenuSerializer(menu).data# 3.每个菜单都添加children空列表serialized_menu['children'] = []# 把每个菜单存入空字典,key:value,菜单ID:菜单对象menu_dict[menu.id] = serialized_menu# 第二步:遍历菜单字典的每一行(所有菜单项)for menu_id, menu_obj in menu_dict.items():# 在序列化好的menu中获取meun idcurrent_menu = Menu.objects.get(id=menu_id)# 获取parent_id的值parent_id = current_menu.parent_id# 判断parent_id是否为0if parent_id == 0:# 如果为0,就把它添加到存储最终的树形结构的空列表中 resultList=[] 顶级resultList.append(menu_obj)else:# 如果不为0,把它的id赋值到parentparent = menu_dict.get(parent_id)if parent:parent['children'].append(menu_obj)return resultList# 排序def get(self,request):try:menuList=Menu.objects.order_by("order_num")# 构建菜单树tree_data=self.buildTree(menuList)return JsonResponse({"code": 200,"data":tree_data# "data": serialized_data})except Exception as e:return JsonResponse({"code": 500,"msg": str(e)}, status=500)# 根据角色查询菜单功能
class MenuTree_role(View):def get(self,request):role_id=request.GET.get("role_id")rolemenu=SysRoleMenu.objects.filter(role_id=role_id).values("menu_id")menulistID=Nonefor role in rolemenu:menulistID=role['menu_id']print(menulistID)return JsonResponse({"code":200,"menuIdlist":menulistID})

 

任务五:根据角色分配菜单功能

5.1技术栈

采用"全量替换"模式(删除所有与相关id有关的数据),先删除后插入,保证权限数据的最终一致性

5.2功能实现

# 根据角色分配菜单功能
class GrantView_role(View):def post(self,request):# 1. 解析请求数据data=json.loads(request.body.decode("utf-8"))# 2. 获取菜单ID和角色ID列表role_id=data.get("role_id",1)menuidList=data.get("menu_id",[])print(role_id,menuidList)# 3. 删除该角色原有的所有菜单关联SysRoleMenu.objects.filter(role_id=role_id).delete()# 4. 为该角色添加新的菜单for menuid in menuidList:userrole=SysRoleMenu(role_id=role_id,menu_id=menuid)userrole.save()return JsonResponse({"code":200,"msg":"权限功能分配成功"})

 

单元四:菜单平台

任务一:菜单分页功能

# 分页
class PageList_menu(View):def post(self,request):# 1.解析请求体中的JSON数据data=json.loads(request.body.decode("utf-8"))# 2.获取分页参数pageSize=data.get("pageSize")   #每页数据量pageNum=data.get("pageNum")     #展示(第一页)第几页print(f"请求分页,每页{pageSize}条,现在是第{pageNum}页")# 构建查询并排序查询集queryset = Menu.objects.all().order_by('id')  # 排序# 创建分页器对象paginator=Paginator(Menu.objects.all(),pageSize)# 获取指定页码的数据页menulist=paginator.page(pageNum)menu=list(menulist.object_list.values())total=paginator.countreturn JsonResponse({"code":200,"msg":"分页成功","data":menu,"total":total})

 

任务二:菜单的添加修改功能

# 菜单修改添加
class AddorUpdata_menu(View):def post(self,request):data = json.loads(request.body.decode("utf-8"))menu_id = data['id']if menu_id == data['id']:newlist = Menu(name=data.get("name"),icon=data.get("icon"),parent_id=data.get("parent_id"),order_num=data.get("order_num"),path=data.get("path"),menu_type=data.get("menu_type"),perms=data.get("perms"),remark=data.get("remark"),component=data.get("component"))newlist.status = data.get("status")newlist.create_time = datetime.datetime.now()newlist.save()return JsonResponse({"code": 200,"msg": "添加成功"})else:newlist = Menu.objects.get(id=data.get("id"))newlist.name = data.get("name")newlist.icon = data.get("icon")newlist.parent_id = data.get("parent_id")newlist.order_num = data.get("order_num")newlist.path = data.get("path")newlist.menu_type = data.get("menu_type")newlist.perms = data.get("perms")newlist.remark = data.get("remark")newlist.component = data.get("component")newlist.update_time = datetime.datetime.now()newlist.save()return JsonResponse({"code": 200,"msg": "修改成功"})

任务三:树形菜单查询

3.1技术栈

  1. 数据序列化:使用values()直接转换为字典
  2. 数据库操作:全表查询(Menu.objects.all()),直接值转换(.values())

3.2功能实现

# 树形菜单查询
class ListAll_menu(View):def get(self,request):menulist=list(Menu.objects.all().values())print(menulist)return JsonResponse({"code":200,"msg":"查询成功","data":menulist})

 

单元五:登录平台

6.1技术栈

1.使用Django REST Framework的JWT组件(通过api_settings调用)

2.认证:基础认证通过用户名和密码进行认证,令牌认证通过JWT的生成与返回进行认证

6.2功能实现

# 登录
class loginView_user(View):def post(self, request):data = json.loads(request.body)username = data.get("username")password = data.get("password")# 使用 Django 的认证系统验证用户User=user.objects.get(username=username,password=password)if user is not None:# 生成 JWT tokenapi_payload = api_settings.JWT_PAYLOAD_HANDLERapi_encode = api_settings.JWT_ENCODE_HANDLERpayload = api_payload(User)token = api_encode(payload)return JsonResponse({"code": 200,"token": token,"msg": "登录成功"})else:return JsonResponse({"code": 400,"msg": "用户名或密码错误"})

示图:

相关文章:

基于Django的权限管理平台

目录 单元一:项目准备 任务一:创建项目 1.1配置 DRF 模型 任务二:设置CSRF令牌 2.1创建app包 2.2检查浏览器Cookies权限 2.3获取cookies 单元二:用户平台 任务一:用户数据模型搭建 1.1创建user模块 1.2生成…...

深度解析 LangChain、ReAct、ReROO 架构及其在 AI Agent 中的应用

一、LangChain 架构:模块化智能代理的核心框架 1. 架构特性与设计原理 LangChain 是构建智能代理的模块化框架,其核心通过 Chains(任务链)、Agents(代理)、Memory(记忆) 和 Tools&a…...

数据库day-07

一、实验名称和性质 子查询 验证 设计 二、实验目的 1.掌握子查询的嵌套查询; 2.掌握集合操作 3.了解EXISTS嵌套查询方法; 三、实验的软硬件环境要求 硬件环境要求: PC机(单机) 使用的软件名称、版本号以及模块…...

使用Tauri 2.3.1+Leptos 0.7.8开发桌面小程序汇总

近期断断续续学习了Rust编程,使用Tauri 2.3.1Leptos 0.7.8开发了一个自用的桌面小程序。Win10操作系统,使用VS Code及rust analyzer插件搭建的开发环境,后期开始使用Roo Code绑定DeepSeek API 辅助编程,对我这个初学者编程帮助很大…...

计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解

概述 目标检测已经取得了长足的发展,尤其是随着基于 Transformer 的模型的兴起。RF-DETR,由 Roboflow 开发,就是这样一种模型,它兼顾了速度和精度。使用 Roboflow 的工具可以让整个过程变得更加轻松。他们的平台涵盖了从上传和标…...

JS 应用算法逆向三重断点调试调用堆栈BP 插件发包安全结合

# 前置知识 1 、作用域:(本地 & 全局) 简单来说就是运行后相关的数据值 2 、调用堆栈:(由下到上) 简单来说就是代码的执行逻辑顺序 3 、常见分析调试: - 代码全局搜索 - 文件流程断点…...

从零开始在Win上添加一块QEMU开发板(四)实现简单USART

文章目录 一、前言背景二、QEMU的字符设备模拟三、USART的发送1. USART发送的QEMU字符设备模拟2. MMIO设计3. 中断连接4. 复位 三、代码验证1. 输出到serial控制台2. 输出到文件 一、前言背景 QEMU是一款开源的模拟器及虚拟机管理器。而QEMU内置支持了一些开发板,我…...

目标检测篇---faster R-CNN

目标检测系列文章 第一章 R-CNN 第二篇 Fast R-CNN 目录 目标检测系列文章📄 论文标题🧠 论文逻辑梳理1. 引言部分梳理 (动机与思想) 📝 三句话总结🔍 方法逻辑梳理🚀 关键创新点🔗 方法流程图关键疑问解答…...

【计算机视觉】CV实战项目- 深度解析FaceAI:一款全能的人脸检测与图像处理工具库

深度解析FaceAI:一款全能的人脸检测与图像处理工具库 项目概述核心功能与技术实现1. 人脸检测与识别2. 数字化妆与轮廓标识3. 性别与表情识别4. 高级图像处理 实战指南:项目运行与开发环境配置典型应用示例常见问题与解决方案 学术背景与相关研究项目扩展…...

Linux下编译opencv-4.10.0(静态链接库和动态链接库)

1. 安装依赖 在编译之前,确保系统中安装了必要的依赖工具和库。运行以下命令安装: sudo apt update sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config sudo apt-get install libavcodec-dev libavforma…...

OpenBMC:BmcWeb login创建session

OpenBMC:BmcWeb login认证-CSDN博客 完成用户的认证后,还需要为该用户创建session,从而为后续的rest api访问铺平道路 inline void handleLogin(const crow::Request& req,const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) {...auto session =persisten…...

Java高频面试之并发编程-07

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;线程之间有哪些通信方式&#xff1f; 在 Java 多线程编程中&#xff0c;线程间通信&#xff08;Inter-Thread Communica…...

四、Python编程基础04

这里写目录标题 一、集合[了解]二、函数1. 函数定义与调用2. 函数返回值 三、模块和包1. 登录案例2.登录案例优化3. 随机数案例 四、异常五、web自动化测试1、selenium介绍2、环境搭建具体安装步骤请看 3、入门案例3.1 自动化测试步骤3.2 案例 一、集合[了解] 1, 集合 set, 表…...

专家系统的一般结构解析——基于《人工智能原理与方法》的深度拓展

不同的专家系统,其功能与结构都不尽相同,但一般都包括人机接口、推理机、知识库及其管理系统、数据库及其管理系统、知识获取机构、解释机构这六个部分,如下图所示。 一、人机接口(Human-Computer Interface, HCI) (一)基本思想与定义 1. 核心思想:双向交互的桥梁 人…...

手搓雷达图(MATLAB)

看下别人做出来什么效果 话不多说&#xff0c;咱们直接开始 %% 可修改 labels {用户等级, 发帖数, 发帖频率, 点度中心度, 中介中心度, 帖子类型计分, 被列为提案数}; cluster_centers [0.8, 4.5, 3.2, 4.0, 3.8, 4.5, 4.2; % 核心用户0.2, 0.5, 0.3, 0.2, 0.1, 0.0, 0.0;…...

FastMCP与FastAPI:构建自定义MCP服务器

FastMCP与FastAPI&#xff1a;构建自定义MCP服务器 模型上下文协议(Model Context Protocol, MCP)是一种让AI模型与外部工具和服务交互的标准。本文将介绍FastMCP和FastAPI&#xff0c;并通过实例展示如何创建自定义MCP服务器。 MCP基础概念 MCP允许语言模型: 访问外部工具…...

基于 springboot+vue+elementui 的办公自动化系统设计(

基于 springbootvueelementui 的办公自动化系统设计(前端代码在oa文件夹里) 系统主要功能&#xff1a; 1、统一的信息发布平台&#xff1a;公告栏&#xff0c;公司活动&#xff0c;项目进度&#xff0c;公司周报 2、统一的文件管理平台&#xff1a;收文管理、发文管理。文件查询…...

Java发展史及版本详细说明

Java发展史及版本详细说明 1. Java 1.0&#xff08;1996年1月23日&#xff09; 核心功能&#xff1a; 首个正式版本&#xff0c;支持面向对象编程、垃圾回收、网络编程。包含基础类库&#xff08;java.lang、java.io、java.awt&#xff09;。支持Applet&#xff08;浏览器嵌入…...

高企复审奖补!2025年合肥市高新技术企业重新认定奖励补贴政策及申报条件

一、合肥市高新技术企业重新认定奖励补贴政策 &#xff08;一&#xff09;高新区高新技术企业重新认定复审补贴奖励 重新认定为国家高新技术企业的给予5万元一次性奖励。 &#xff08;二&#xff09;经开区高新技术企业重新认定复审补贴奖励 对重新认定的企业&#xff0c;给…...

elementui日历显示红点及根据日程范围判断是否有红点

生成指定日期范围内的所有日期 generateDateRange(startStr, endStr) {const dates []; 日期列表const start new Date(startStr); 日程开始日期const end new Date(endStr); 日程结束日期end.setHours(23, 59, 59, 999); 结束的那一天设置为23点59分59秒// 生成日期范围内…...

第六章 QT基础:5、QT的UDP网络编程

在 Qt 中&#xff0c;QUdpSocket 类用于实现基于 UDP 协议的网络通信。UDP&#xff08;用户数据报协议&#xff09;是一种无连接的协议&#xff0c;与 TCP 不同&#xff0c;它不需要建立连接&#xff0c;因此它的传输速度较快&#xff0c;但也不保证数据的可靠传输。 1. Qt UDP…...

JAVA设计模式——(五)享元模式(Flyweight Pattern)

JAVA设计模式——&#xff08;五&#xff09;享元模式&#xff08;Flyweight Pattern&#xff09; 概念理解实现创建内部状态定义享元工厂测试 适用性 概念 使共享对象可以有效的支持大量的细粒度对象。主要采用池技术实现。 理解 享元模式主要解决大量对象的共享&#xff0…...

电竞俱乐部护航点单小程序,和平地铁俱乐部点单系统,三角洲护航小程序,暗区突围俱乐部小程序

电竞俱乐部护航点单小程序开发&#xff0c;和平地铁俱乐部点单系统&#xff0c;三角洲护航小程序&#xff0c;暗区突围俱乐部小程序开发 端口包含&#xff1a; 超管后台&#xff0c; 老板端&#xff0c;打手端&#xff0c;商家端&#xff0c;客服端&#xff0c;管事端&#x…...

mybatis log convert使用

1. idea 搜索插件 mybatis log convert. 安装后重启idea 启动程序. 日志打印后选中输出的内容右键。这里随意选中一段日志做演示 必须要在console中复制才能使用这个日志解析 2. 还有一种用法。没找到...

[U-Net]DA-TRANSUNET

论文题目:DA-TRANSUNET: INTEGRATING SPATIAL AND CHANNEL DUAL ATTENTION WITH TRANSFORMER U-NET FOR MEDICAL IMAGE SEGMENTATION ∗ 中文题目:DA-TRANSUNET:结合空间和通道双注意力与Transformer U-NET的医学图像分割算法 0摘要 精确的医学图像分割对疾病定量和治疗评…...

AI大模型从0到1记录学习 数据结构和算法 day20

4.3 分治算法 4.3.1 概述 分治算法的基本思想为&#xff1a;将原问题递归的分解为若干个&#xff08;通常是两个以上&#xff09;规模较小、相互独立且性质相同的子问题&#xff0c;直到子问题足够简单&#xff0c;简单到可以直接求解。然后再返回结果&#xff0c;逐个解决上层…...

面阵相机中M12镜头和远心镜头的区别及性能优势

以下是关于面阵相机中M12镜头和远心镜头的区别及性能优势的详细分析&#xff0c;结合知识库内容整理如下&#xff1a; 一、M12镜头与远心镜头的核心区别 1. 设计原理与光学特性 特性M12镜头远心镜头光学设计标准镜头设计&#xff0c;无特殊光学校正&#xff0c;依赖传统光路。…...

[创业之路-385]:企业法务 - 初创公司如何做好商业秘密的管理

一、商业秘密的定义与价值 定义&#xff1a; 商业秘密是企业的核心资产&#xff0c;包括技术信息&#xff08;如算法、配方&#xff09;和经营信息&#xff08;如客户名单、定价策略&#xff09;&#xff0c;具有非公开性、商业价值、保密性三大特征。价值&#xff1a; 初创公…...

Qt5.15.2+OpenCV4.9.0开发环境搭建详细图文教程(OpenCV使用Qt自带MinGW编译的全过程,包教包会)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》 《实用硬件方案设计》 《结构建模设…...

怎么实现RAG检索相似文档排序:similarities

怎么实现RAG检索相似文档排序:similarities top_5_indices = similarities.argsort()[-5:][::-1] 这行代码的作用是从一组相似度得分中获取相似度最高的5个元素的索引。 similarities:这是一个包含了某个问题与所有文档之间余弦相似度得分的一维数组(假设 similarities 是通…...

NLP高频面试题(五十三)——深度学习正则化详解

一、动因篇 为什么要正则化? 深度神经网络通常包含数以万计甚至数以亿计的参数,模型容量极大,极易在有限的训练数据上“记住”噪声与异常样本,从而出现过拟合(overfitting)现象。过拟合导致模型在训练集上表现优异,但在测试集或真实场景中泛化能力大幅下降。正则化(r…...

2.idea查看某个类的方法名称和实现

2.idea查看某个类的方法名称和实现 ctrl鼠标左键单击类名 点击侧边栏Structure可看到方法名称的统计&#xff0c;这样直观...

FeignClient用法笔记

1. FeignClient简介 在微服务架构中总需要各个服务相互调用&#xff0c;各个服务又是以接口方式暴露&#xff0c;所以需要Http远程调用&#xff1b;为了简化调用&#xff0c;Spring Cloud OpenFeign 库提供了org.springframework.cloud.openfeign.FeignClient 注解&#xff1a…...

【Redis】 Redis中常见的数据类型(二)

文章目录 前言一、 List 列表1. List 列表简介2.命令3. 阻塞版本命令4. 内部编码5. 使用场景 二、Set 集合1. Set简单介绍2. 普通命令3 . 集合间操作4. 内部编码5. 使用场景 三、Zset 有序集合1.Zset 有序集合简介2. 普通命令3. 集合间操作4. 内部编码5. 使用场景 结语 前言 在…...

电力作业安全工器具全解析:分类、配置与检查要点

在电力行业&#xff0c;每一次作业都面临潜在危险&#xff0c;安全工器具是保障作业人员生命安全的关键。今天&#xff0c;金能电力带大家深入了解电力作业中常见的安全工器具&#xff0c;以及它们的检查与使用要点。 电力作业中安全工器具种类繁多。绝缘安全工器具因直接关联带…...

PowerBI-使用参数动态修改数据源路径

PowerBI-使用参数动态修改数据源路径 在PowerQuery中可以使用参数&#xff0c;通过参数我们可以将多个文件路径相同的字符串进行替换。 以一个案例分享下过程&#xff1a; 第一步&#xff0c;导入一个含有多个sheet表的EXCEL工作薄&#xff0c;点击转换数据&#xff0c;如图…...

Temperature

模型中Temperature参数的详细解释 ​​Temperature​​ 是生成模型&#xff08;如GPT、LLaMA等&#xff09;中用于控制输出多样性和随机性的关键超参数。它通过调整模型预测概率分布的平滑程度&#xff0c;直接影响生成文本的创造性与稳定性。 模型中Temperature参数的详细解…...

C++ 日志系统实战第二步:不定参数函数解析

全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的项目笔记吧~ 相关技术知识补充 不定参宏函数 在 C 语言中&#xff0c;不定参宏函数是一种强大的工具&#xff0c;它允许宏接受可变数量的参数&#xff0c;类似于不定参函数&#…...

【高并发】 MySQL锁优化策略

在数据库高并发场景中&#xff0c;行锁、表锁和高并发处理是密切相关的概念&#xff0c;它们共同影响着系统的并发性能和数据一致性。以下是三者的详细解释及高并发处理的策略&#xff1a; 1. 行锁&#xff08;Row-Level Locking&#xff09; 行锁是数据库中最小的锁粒度&…...

C语言——填充矩阵

C语言——填充矩阵 一、问题描述二、格式要求1.输入形式2.输出形式3.样例 三、实验代码 一、问题描述 编程实现自动填充nn矩阵元素数值&#xff0c;填充规则为&#xff1a;从第一行最后一列矩阵元素开始按逆时针方向螺旋式填充数值1&#xff0c;2&#xff0c;…&#xff0c;nn…...

CSS3 基础(背景-文本效果)

二、背景效果 属性功能示例值说明background设置背景颜色或渐变background: linear-gradient(45deg, #4CAF50, #FF5722);设置背景颜色、图片或渐变效果。background-size调整背景图片大小background-size: cover;设置背景图片的显示大小&#xff0c;如 cover 或 contain。back…...

点云配准算法之NDT算法原理详解

一、算法概述 NDT&#xff08;Normal Distributions Transform&#xff09;最初用于2D激光雷达地图构建&#xff08;Biber & Straer, 2003&#xff09;&#xff0c;后扩展为3D点云配准。它将点云数据空间划分为网格单元&#xff08;Voxel&#xff09;&#xff0c;在每个体…...

springboot在eclipse里面运行 run as 是Java Application还是 Maven

在 Eclipse 里运行 Spring Boot 项目时&#xff0c;既可以选择以“Java Application”方式运行&#xff0c;也可以通过 Maven 命令来运行&#xff0c;下面为你详细介绍这两种方式及适用场景。 以“Java Application”方式运行 操作步骤 在项目中找到带有 SpringBootApplicat…...

Redis 基础和高级用法入门

redis 是什么&#xff1f; Redis是一个远程内存数据库&#xff0c;它不仅性能强劲&#xff0c;而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构&#xff0c;各式各样的问题都可以很自然地映射到这些数据结构上&#xff1a…...

使用vue2开发一个在线旅游预订平台-前端静态网站项目练习

hello,大家好&#xff0c;今天给大家再分享一个前端vue2练习项目-在线旅游预订平台。我们在学习编程的时候&#xff0c;除了学习编程的基础知识&#xff0c;为了让我们快速的掌握一门编程技术&#xff0c;肯定离不开各种项目的练习&#xff0c;今天分享的这个前端练习项目&…...

Ext Direct 功能与使用详解

Ext Direct 是 Ext JS 框架中的一个功能模块,旨在简化前端 JavaScript 应用与后端服务器之间的通信。其核心思想是通过远程过程调用(RPC)协议,将服务器端的方法透明地映射为前端可直接调用的 JavaScript 函数,从而减少手动编写 Ajax 请求和处理响应的代码量。 一、Ext Dir…...

Android移动应用开发入门示例:Activity跳转界面

介绍如何使用LinearLayout布局实现基本的UI设计&#xff0c;并实现两个Activity之间的跳转&#xff0c;适合刚接触Android Studio的新手学习。我们将使用Java语言开发&#xff0c;布局采用XML文件。以下为完整源码与运行说明&#xff1a; 案例前的准备工作&#xff1a; 1.1XM…...

【hadoop】HBase分布式数据库安装部署

一、HBase集群的安装与配置 步骤&#xff1a; 1、使用XFTP将HBase安装包hbase-1.2.0-bin.tar.gz发送到master机器的主目录。 2、解压安装包&#xff1a; tar -zxvf ~/hbase-1.2.0-bin.tar.gz 3、修改文件夹的名字&#xff0c;将其改为hbase&#xff0c;或者创建软连接也可…...

理解npm的工作原理:优化你的项目依赖管理流程

目录 什么是npm npm核心功能 npm 常用指令及其作用 执行npm i 发生了什么? 1. 解析命令与参数 2. 检查依赖文件 3. 依赖版本解析与树构建 4. 缓存检查与包下载 5. 解压包到 node_modules 6. 更新 package-lock.json 7. 处理特殊依赖类型 8. 执行生命周期脚本 9. …...

【Python笔记 04】输入函数、转义字符

一、Input 输入函数 prompt是提示&#xff0c;会在控制台显示&#xff0c;用作提示函数。 name input("请输入您的姓名&#xff1a;") print (name)提示你输入任意信息&#xff1a; 输入input test后回车&#xff0c;他输出input test 二、常用的转义字符 只讲…...