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

DRF的认证、权限、限流、序列化、反序列化

DRF的认证、权限、限流、序列化、反序列化

  • 一、认证
    • 1、直接用,用户授权
    • 2、认证组件源码
  • 二、权限
    • 1. 直接使用,用户权限
    • 2.权限组件源码
  • 三、序列化
    • 1. 序列化
      • 1.1 自定义Serailizer类序列化
      • 1.2 在视图APIView中使用
      • 1.3 自定义ModelSerializer类序列化
      • 1.4 不同格式的字段序列化
          • 1.4.1 自定义字段
          • 1.4.2 日期自定义格式
          • 1.4.3 自定义方法字段
          • 1.4.4 嵌套,针对:一对多,多对多的情况
          • 1.4.5 继承
    • 2. 序列化-源码流程
  • 四、反序列化
    • 1. 反序列化流程
    • 2. 数据校验
      • 2.1数据校验是要在视图中校验的。但要在序列化类中写好校验规则。
      • 2.2序列化类校验规则
        • 2.2.1内置校验规则
        • 2.2.2 正则校验规则
        • 2.2.3 钩子函数
        • 2.24 ModelSerializer校验规则
        • 2.2.5 字段属性(read_only,write_only)
        • 2.2.6对校验的总结
    • 3.序列化字段与模型字段的总结
      • 3.1 对于chioces与序列化、反序列化、模型字段名一致
    • 4. 数据校验-源码流程
  • 五、模型查询的常规操作

一、认证

1、直接用,用户授权

  • 实现方法

    • 编写 ->认证组件

    • 应用组件

  • 编写 ->认证组件

from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
class 认证类(BaseAuthentication):def authenticate(self,request):1、 获取用户信息1.1 可以从URL中获取,xx/xx/xx/?token=....request.query_params(token) 来获取token值1.2 可以从请求头中获取request.META.get("HTTP_AUTHORIZATION")# AUTHORIZATION传递过来的key1.3 可以从请求体中获取request.data.get(token)2、校验用户信息的合法性3、返回结果- 3.1 正确,返回元组(用户信息,认证信息如token)- 3.2 错误,raise抛出错误信息raise AuthenticationFailed({key:vaule})#注:可以用字典提示错误- 3.3 错误返回None->多个认证类 [1,类2....]return user,authdef authenticate_header(self,request):return "token"#认证失败状态应该是401,如果authenticate_header不返回值,就是403

​ BaseAuthentication源码是:

class BaseAuthentication:#注:只要在django中出现raise NotImplementedError(),就必须使用该方法,不然会出错!(重定义方法)。子类约束。def authenticate(self,request):raise NotImplementedError("必顺要写的函数。")def authenticate_header(self,request):pass
  • 应用组件
    • 局部
from rest_framework.views import APIView
from rest_framework.response import Response
#在视图类中添加
class 视图类名(APIView):authentication_classes = [认证类1,认证类2,认证类3.....]
  • 全局(在setting中设置)

    REST_FRAMEWORK = {"UNAUTHENTICATED_USER":None,#是让没有用户时为None,默认是AnyOne,"DEFAULT_AUTHENTICATION_CLASSES":["自定义认证类的位置"]
    }
    # 注:在配置全局时,不能写在视图类中。视图类还没有加载完。
    

    在全局配置时,如果要让某个视图不进行认证,就在视图类中把authentication_classes=[]

  • 注:

    • 多个认证类
      多个认证类是或的关系,但返回的值是None,前面的认证成功,后面的就不认证了。如果都不认证成功,一般最后一个为抛出异常类。
      抛出异常类

      class NoAuthentictions(BaseAuthentication):def authenticate(self,request):raise AuthenticationFailed({key:vaule})def authenticate_header(self,request):return 'Token'
      

回顾
请添加图片描述

2、认证组件源码

二、权限

1. 直接使用,用户权限

  • 权限组件说明
    在这里插入图片描述

  • 权限组件编写

from rest_framework.permissions import BasePermissionclass 权限类名(BasePermission):messge={.....}#权限失败是返回的错误信息def has_permission(self,request,view):1. 获取请求中的数据2. 校验3. 返回值3.1 返回True 表示校验通过3.2 返回False 表示校验没通过return True | False
  • 权限组件的使用

    • 局部使用(在视图中添加)
    from rest_framework.views import APIViewclass 视图类名(APIView):permission_classes = [权限类名1,权限类名2,权限类名3....]#权限类名是一个且的关系,前面的是False后面的就不再执行了。
    
    • 全局(setting.py)中

    • REST_FRAMEWORK = {"UNAUTHENTICATED_USER":None,#是让没有用户时为None,默认是AnyOne,"DEFAULT_AUTHENTICATION_CLASSES":["自定义认证类的位置"],"DEFAULT_PERMISSION_CLASSES":["自己定义的权限类位置"]#可以是一个列表
      }
      # 注:在配置全局时,不能写在视图类中。视图类还没有加载完。
      
  • 权限或组件的编写

    系统默认的是且关系,而不是或的关系,以下是或的关第编写

#要在APIView中编写代码
from rest_framework.views import APIViewclass 自定义或权限关系类名(APIView):def check_permission(self,request):permission_objects = self.get_permissions()for permission in permission_objects:if permission.has_permission(request,self):returnelse:self.permission_denied(request,message=getattr(permission_objects[0],'message',None),code=getattr(permission_objects[0],'code',None))
for...in...:....
else:....
#当循环完后,有返回False时,才执行else

在视图类中,继承自定义或权限关系类名

2.权限组件源码

三、序列化

1. 序列化

序列化,从数据库获取Query_Set或数据对像 ->JSON

序列化的流程

路由->视图->去数据库获取对象或QuerySet -> 序列化器的类转换成列表、字典、有序字典 -> JSON处理

1.1 自定义Serailizer类序列化

from rest_framework import serializers
class 序列化类名(serializers.Serializer):字段 = serializers.类型()...#字段要与数据库中的一致

1.2 在视图APIView中使用

from rest_framework.views import APIView
frrom rest_framework.response import Response
class 视图类名(APIView):1. 获取数据库的数据instance2. 序列化数据ser = 序列化类名(instance = instance,many=True | False)#True是Query_Set,False是数据对像#ser.data才是真正的将数据对象或Query_set转化为JSON格式3.返回JSON数据return Response(ser.data)

关于序列化类many的说明

  • many=False是单个对象的序列化
  • many=True时是Query_set的序列化,它是加了下个for循环,再调用单个对象序列化

1.3 自定义ModelSerializer类序列化

由于序列化时,字段与模型中的字段是一样的,所以将其集中

from from rest_framework.serializers import ModelSerializer
class 自定义ModelSerializer类名(ModelSerializer):class Meta:model = 模型类名fields = [字段类名列表] | "__all__"#所有字段都返回

1.4 不同格式的字段序列化

1.4.1 自定义字段

在modelserializer的字段自定制

from from rest_framework.serializers import ModelSerialize
from from rest_framework.serializers
class 自定义ModelSerializer类名(ModelSerializer):字段 = serailizes.类型(source="数据库的字段")#自定义字段,要在field中添加自定义字段名class Meta:model = 模型类名fields = [字段类名列表] | "__all__"#所有字段都返回

注:

  • source是数据库的字段
  • source支持对象的访问,如obj.字段.外键字段名 | obj.get_字段_display#get_字段_display运行时会自动加上括号
  • 在fields中要添加自定义字段名,可以不与数据名一致

1.source对接的是数据库。2.支持orm对数据库的操作。3.带有函数的不用加括号。

1.4.2 日期自定义格式
from from rest_framework.serializers import ModelSerialize
from from rest_framework.serializers 
class 自定义ModelSerializer类名(ModelSerializer):日期字段 = serailizes.DateTimeField(format="%y-%m-%d") #日期格式显式class Meta:model = 模型类名fields = [字段类名列表] | "__all__"#所有字段都返回
1.4.3 自定义方法字段
from from rest_framework.serializers import ModelSerialize
from from rest_framework.serializers 
class 自定义ModelSerializer类名(ModelSerializer):自定义方法字段 = serailizes.SerializerMethodField()class Meta:model = 模型类名fields = [字段类名列表] | "__all__"#所有字段都返回def get_自定义方法字段(self,obj):obj是对象值retrun 序列化的值
1.4.4 嵌套,针对:一对多,多对多的情况
from from rest_framework.serializers import ModelSerialize
from from rest_framework.serializers class 一对多类名(ModelSerializer):class Meta:model = 模型类名fields = [字段类名列表] | "__all__"#所有字段都返回class 多对多类名(ModelSerializer):class Meta:model = 模型类名fields = [字段类名列表] | "__all__"#所有字段都返回class 自定义ModelSerializer类名(ModelSerializer):一对多字段名 = 一对多类名()多对多字段名 = 多对多类名()class Meta:model = 模型类名fields = [字段类名列表]
1.4.5 继承
from from rest_framework.serializers import ModelSerialize
from from rest_framework.serializers class 继承类名(ModelSerializer):class Meta:model = 模型类名fields = [字段类名列表] | "__all__"#所有字段都返回class 自定义ModelSerializer类名(ModelSerializer,继承类名):class Meta:model = 模型类名fields = [字段类名列表,可以添加自定义类名中的字段]

2. 序列化-源码流程

四、反序列化

1. 反序列化流程

路由-> 视图-> request.data ->校验(序列化器的类)->操作(数据库db,序列化器的类)

2. 数据校验

2.1数据校验是要在视图中校验的。但要在序列化类中写好校验规则。

from rest_framework.views import APIView
frrom rest_framework.response import Response
class 视图类名(APIViewdef post(self,request,*arg,**kwarg)1. 获取数据库的数据2. 数据校验ser = 序列化类名(data = request.data)ser.is_valid()#返回的是True或False业务编写校验通过后,可以能完ser.validated_data获取校验后的数据,返回是OrderadDict数据集。校验失败后,可以能完ser.errors获取错误信息,返回字典{字段:[ErrorDetail(错误提示)]}3.返回JSON数据return Response(ser.data)ser.is_valid(raise_exception=True)#成功可以利用值。抛出异常 raise ValidationError(self.errors)
注:不用判断,直接返回值,或返回错误值。

2.2序列化类校验规则

内置校验规则与正则校验规则

2.2.1内置校验规则

required = True | False 是否必须校验规则。

max_length = nu 最大长度

min_length = nu 最小长度

2.2.2 正则校验规则
var = serializers.CharField(validators=[RegesValidator(正则表达式,messege = "错误提示语!"),])
2.2.3 钩子函数
from rest_framework import serializer
from rest_framework import exceptions
#在序列化式子中编写
class 钩子函数类名(serilizers.Serializer):字段 = serializer.类型()...def validate_字段名(self,value):业务逻辑#value是传过来的值raise exceptions.ValidationError("校验失败时,错误提示语!")return value#也可以改变相关的值,返回给ser.validated_data中相应字段值defm validate(self,attr):attr是ser.validated_data的值所有字段校验通过了,最后校验这个函数。raise excptions.ValidationError("全局钩子校验失败时提示语。")#返回为{"non_field_errors":[ErrorDetail(string='....',code='invalid')]}#api_setting.NON_FIELD_ERRORS_KEYF表示指定全局,错误提示语Key可以setting.py 中添加"NON_FIELD_ERRORS_KEYF":'字符串'return attr#也可以对attr中的字典数据进行操作
2.24 ModelSerializer校验规则
from rest_framework import serializer
from rest_framework import exceptions
#在序列化式子中编写
class 钩子函数类名(serilizers.ModelSerializer):class Meta:model = 数据库名fields = [字段列表] | "__all__"extra_keargs = {字段:{"validators":[RegexValidator(正则,messegs:"错误提示语")]},字段:{内置规则}如:{"max_length":50},...}

在ModelSerializer中model对应的是数据库的字段,但不会把django模型中的限定语句加到序列化类中来,这时我们要自己加。可以用extra_kwargs={

字段:{…}

}

ModelSerializer的主要功能:

  • 可以简化模型字段与序列化字段的编写。
  • 可以将校验通过的数据,直接保存到数据库中。ser.save()
  • ser.save()有两个小问题(字段少了,字段多了)
    • 字段少了,可以在ser.save(少了的字段=value,…)
    • 字段多了,可以用ser.validated_data.pop(字段名)删除多余的字段数据。注:用pop删除后会返回删除的值。也可以用del ser.validated_data.get(字段名),用del 不返回值。
    • 用ser.save()是要序列化validated_data中的字段名与模型中的必存字段要一致。
    • ser没有使用save()时,ser.validated_data中没有id,但保存后就有了id。所以ser.data就可以序列化取值了。
2.2.5 字段属性(read_only,write_only)
  • read_only=Ture表示只序列化,不反序列化。
  • write_only=True表示只反序列化,不序列化。
  • 注:不能同时使用read_only、write_only。
  • 对于嵌套类时,也可以用read_only、write_only。
2.2.6对校验的总结

3.序列化字段与模型字段的总结

  • 序列化与模型取值这二个是独立的过程,模型取出的值后,再与序列化对接。序列化依据模型取出的数来进行操作,得到想要的结果。
  • 序列化时每一个字段依据模型取出的值操作来得到想要的结果。字段要与模型字段为依据来操作,就与source有关。注:默认source与序列化字段一致,特别指定时,可以不一样。为了得到想要的值就拓展了以下方法:
    • source=模型取值操作的方法一样
    • 自定义方法字段 = serailizes.SerializerMethodField()->def get_自定义方法字段(self,value)->返回就是JSON想要的结果。(注:默认read_only=True)
    • 嵌套类->使用时要关联模型类字段如:source=关联模型类字段
  • 反序列化与模型存值这二个是独立的过程,先获得前端传来的数据request.data.再校验->校验的过程,其实就是将取到的值与自身的校验规则是否合法,如果合法相应字段再与模型实例化,注模型实例化可以少字段。这就带来两个问题,反序列化的字段多了或少了。多了、少了都不能存入数据库中。所以要注意以下三个方面:
    • 多了要删除,可以看前面的(ModelSerializer的主要功能)
    • 少了要添加,可以看前面的(ModelSerializer的主要功能)
    • 保证ser.validated_data与模型中必存字段一致。

其实反序列化——>数据校验——>数据存储与模型数据存储是两个过程。它们只用ser.save()连结起来了。

3.1 对于chioces与序列化、反序列化、模型字段名一致

from collections import OrdereDict
from rest_framework.fields import SkipField
from rest_framework.relations import PKOnlyObjectclass NbHookSerializer(object):def to_representation(self,instance):ret = OrderedDcit()fields = self._readable_fieldsfor field in fields:if hasattr(self,"nb_%s"% field.field_name):value = getattr(self,'nb_%s'%field.field_name)(instance)ret[field.field_name] = valueelse:try:attribute = field.get_attribute(instance)except SkipField:continuecheck_for_none = attribute.pk if isinstance(attribute,PKOnlyObject) else attributeif check_for_none is None:ret[field.field_name] = Noneelse:ret[field.field_name] = field.to_representation(attribute)return ret

使用时,可以用类的继承-在写序列化时使用。继承要注意,要写在先,因为类的继承优先级是先到后。

4. 数据校验-源码流程

五、模型查询的常规操作

  1. 对象.get_字段_display() #chioces显示后面的字段
  2. 对象.字段.字段#针对于一对多、多对多的情况
  3. filter(id__in=id列表)对于多个值的查询
  4. 对象添加值->对象.字段.set([id列表])#多对多的情况使用。

相关文章:

DRF的认证、权限、限流、序列化、反序列化

DRF的认证、权限、限流、序列化、反序列化 一、认证1、直接用,用户授权2、认证组件源码 二、权限1. 直接使用,用户权限2.权限组件源码 三、序列化1. 序列化1.1 自定义Serailizer类序列化1.2 在视图APIView中使用1.3 自定义ModelSerializer类序列化1.4 不…...

解决:Cannot read properties of undefined (reading ‘validate‘)问题

问题&#xff1a;Element UI使用表单校验功能控制台出现Cannot read properties of undefined (reading validate)报错 解决&#xff1a;在 <el-form :model"form" :rules"rules">添加 ref"form"&#xff0c;form为自定义的表单名称 <…...

关于IP地址发展历程的详细探讨

IP地址的发展历程是一段不断演进、适应网络技术发展的历史。自互联网诞生以来&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;扮演了至关重要的角色。以下是对IP地址发展历程的详细探讨。 在互联网的初期&#xff0c;主机数量相对较少&#xff0c;IP地址主要用于区分不…...

【LeetCode热题100】【二叉树】将有序数组转换为二叉搜索树

题目链接&#xff1a;108. 将有序数组转换为二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 取中间的数作为根节点&#xff0c;左边的数递归转换&#xff0c;右边的数递归转换 class Solution { public:TreeNode *sortedArrayToBST(vector<int> &nums) {retur…...

文心一言和GPT-4全面比较

自大型语言模型出现以来&#xff0c;人工智能在自然语言处理方面取得了显著进步。文心一言和GPT-4是当前最先进的两款语言模型&#xff0c;在业内广受关注。两者都具有强大的能力&#xff0c;但各有特点和优势。本文将从多个方面对这两个模型进行全面比较&#xff0c;以帮助读者…...

Mac的终端配置

Mac的终端配置 参考教程包管理工具 - Homebrew出现的问题用虚拟环境解决方案&#xff1a;直接将解释器的路径放过去错误方法&#xff1a;用find查找到虚拟环境安装的路径&#xff0c;其链接的是brew安装的python路径 编辑器没有报错&#xff0c;但是运行过程中仍然找不到pandas…...

制作一个RISC-V的操作系统十-Trap和Exception(流 mtvec mepc mcause mtval mstatus trap完整流程)

文章目录 流mtvecmepcmcausemtvalmstatustrap 初始化trap的top half&#xff08;硬件完成&#xff09;trap的bottom half&#xff08;软件完成&#xff09;从trap返回代码实现 流 控制流&#xff1a;程序控制的执行流 trap分为中断和异常 mtvec base&#xff1a;存储trap入…...

【爬虫开发】爬虫从0到1全知识md笔记第4篇:Selenium课程概要,selenium的介绍【附代码文档】

爬虫开发从0到1全知识教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;爬虫课程概要&#xff0c;爬虫基础爬虫概述,,http协议复习。requests模块&#xff0c;requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. request…...

对一个时间序列中的每个元素按照指定精度向上取整

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对一个时间序列中的每个元素 按照指定精度向上取整 例如&#xff1a;对小时处理&#xff0c; 则9:01处理为10:00 Series.dt.ceil() 选择题 以下代码的输出结果中正确的是? import pandas as…...

51单片机+TN901非接触式红外测温设计论文与源码PCB等资料

1、摘要 温度测量技术应用十分广泛&#xff0c;而且在现代设备故障检测领域中也是一项非常重要的技术。但在某些应用领域中&#xff0c;要求测量温度用的传感器不能与被测物体相接触&#xff0c;这就需要一种非接触的测温方式来满足上述测温需求。本论文正是应上述实际需求而设…...

AI创业项目:AI旅游规划定制师

在当前的旅游市场中&#xff0c;个性化旅游规划成为越来越多旅行者的需求。然而&#xff0c;现行的定制旅行服务主要依赖于人工定制师&#xff0c;这一模式面临着信息不透明、价格弹性大等挑战。定制师在客户与服务供应商之间掌握着信息差&#xff0c;依靠这一优势获得收益&…...

win 安装 Stable Diffusion

注&#xff1a;本人使用的是 RTX2060 - 6G版 特别提醒&#xff1a;安装一定要 CUDA 和 PyTorch 版本能配套用&#xff0c;不然会有生成保存问题(我是这样的)&#xff0c;装完用 python -m xformers.info 这个看对应的版本 建议&#xff1a;有些命令安装在venv 虚拟机中做&…...

STM32F407+FreeRTOS+LWIP UDP组播

开发环境介绍&#xff1a; MCU&#xff1a;STM32F407ZET6 网卡&#xff1a;LAN8720A LWIP版本&#xff1a;V1.1.0 FreeRTOS 版本&#xff1a;V10.2.1 LAN8720A硬件原理图&#xff1a; 硬件连接说明&#xff1a; MII_RX_CLK/RMII_REF_CLK ------>PA1 …...

(源码+部署+讲解)基于Spring Boot + Vue的车位租赁系统设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f;…...

Lecture 2~4 About Filter

文章目录 空间域上的滤波器- 线性滤波器盒状滤波器Box Filter锐化Sharpening相关运算 vs. 卷积运算 Correlation vs. Convolution - 非线性滤波器高斯滤波器Gaussian filter - 实际问题- 纹理texture 频域上的滤波器 滤波的应用- 模板匹配- 图像金字塔 空间域上的滤波器 图像…...

【LINUX】Linux 命令大全:系统管理与网络操作指南

开始之前 Linux命令行&#xff0c;也称为终端&#xff0c;是Linux最强大的特性之一。通过命令行&#xff0c;用户可以执行几乎所有的任务&#xff0c;比如文件操作、程序安装、系统监控和网络配置等。了解这些基本命令&#xff0c;将帮助你更好地掌握Linux系统。 文件和目录操…...

Day50 动态规划 part11

Day50 动态规划 part11 123.买卖股票的最佳时机III 我的思路&#xff1a; 这道题考虑了交易次数 j&#xff08;最大次数为2&#xff09;&#xff0c;以及某天 i 应该买or卖股票&#xff08;两种状态&#xff09; 用三维数组表示 dp[i][j][0] – 第i天结束时&#xff0c;交易j…...

Docker 搭建私有镜像仓库

一、镜像仓库简介 Docker的镜像仓库是一个用于存储和管理Docker镜像的中央位置。镜像仓库的主要作用是提供一个集中的地方&#xff0c;让用户可以上传、下载、删除和共享Docker镜像。镜像仓库又可以分为公共镜像仓库和私有仓库镜像仓库&#xff1a; 公共镜像仓库 Docker Hub 是…...

Nginx反向代理与Tomcat实现ssm项目前后端分离部署

Nginx nginx是一款http和支持反向代理的web服务器&#xff0c;以其优越的性能被广泛使用。以下是百度百科的介绍。 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.…...

element UI 日期选择器 当前年份之前不可选

<el-date-pickertype"year"format"YYYY"value-format"YYYY"v-model"declareYear"placeholder"请选择年份":disabled-date"disabledDateFun"/>function disabledDateFun(time) {if (time.getFullYear() <…...

windows wireshark抓包rtmp推流出现TCP Retransmission

解决办法&#xff1a;tcp.port1935 && !(tcp.analysis.retransmission)...

C++之std::initializer_list详解

相关文章系列&#xff1a; C/C中{}的用法总结(全)_c {}-CSDN博客 目录 1.引言 2.容器的初始化 3.函数中使用std::initializer_list 4.自定义类型中使用std::initializer_list 5.迭代std::initializer_list 6. 在模板中使用std::initializer_list 7.std::initializer_lis…...

4月9日学习记录

[GXYCTF 2019]禁止套娃 涉及知识点&#xff1a;git泄露&#xff0c;无参数RCE 打开环境&#xff0c;源码什么的都没有&#xff0c;扫描后台看看 扫描发现存在git泄露 用githack下载查看得到一串源码 <?php include "flag.php"; echo "flag在哪里呢&#…...

解析快手滑块验证码的逆向工程

快手滑块验证码是一种常见的反机器人验证方式&#xff0c;通过模拟用户拖动滑块来验证用户身份。本文将介绍如何逆向工程快手滑块验证码的加密算法和轨迹生成方式&#xff0c;并提供详细的代码实现。 1. 加密算法解析 首先&#xff0c;我们需要了解滑块验证码生成时所用的加密…...

mysql运维知识总结

1. 日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过 程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&…...

【目标检测】-入门知识

1、回归与分类问题 回归问题是指给定输入变量(特征)和一个连续的输出变量(标签),建立一个函数来预测输出变量的值。换句话说,回归问题的目标是预测一个连续的输出值,例如预测房价、股票价格、销售额等。回归问题通常使用回归分析技术,例如线性回归、多项式回归、决策树…...

翻译笔实现文字识别功能的原理

翻译笔作为一种便携式设备&#xff0c;近年来在语言学习、旅游、商务交流等领域中逐渐受到人们的青睐。其核心功能之一便是文字识别&#xff0c;即将纸质或电子文档中的文字快速、准确地转化为机器可读的文本格式。那么&#xff0c;翻译笔是如何实现这一神奇功能的呢&#xff1…...

文件批量重命名,繁体中文秒变简体中文,轻松实现高效翻译

在数字化时代&#xff0c;我们的工作、学习和生活都离不开电脑文件。随着时间的推移&#xff0c;文件数量不断增加&#xff0c;管理起来变得越来越困难。你是否曾经为如何高效、有序地管理文件而烦恼&#xff1f;现在&#xff0c;有一款强大的文件批量重命名工具&#xff0c;它…...

UML学习

UML(Unified Modeling Language)&#xff1a;统一建模语言&#xff0c;提供了一套符号和规则来帮助分析师和设计师表达系统的架构、行为和交互 类图&#xff1a;描绘类、接口之间的关系(继承、实现、关联、依赖等)以及类的内部结构(属性和方法)&#xff0c;直观展现系统的静态…...

【话题:工作生活】2022年工作总结--疫情下的上海,疫情中的我。

现在是阳历2023年11月27日星期一&#xff0c;我再次开始撰写自己的年终工作总结。希望再过1、2个月&#xff0c;这份年终总结能够出炉&#xff0c;与大家相遇。 给自己定个小目标&#xff0c;年终的工作生活总结坚持写10年。我2017年毕业&#xff0c;之后就开始写每年的年终总结…...