drf知识--10
接口文档
# 后端把接口写好后:
登录接口:/api/v1/login ---> post---name pwd
注册接口
查询所有图书带过滤接口# 前后端需要做对接,对接第一个东西就是这个接口文档,前端照着接口文档开发
公司3个人,每个人开发了10个接口,3个人都要同时写接口文档
# 接口文档的编写形式:
1、world,md,编写,大家都可以操作,写完放在git,公司的文档管理平台上
2、第三方的接口文档平台(收费) https://www.showdoc.com.cn/
3、公司自己开发接口文档平台 : 就跟第三方很像
4、公司使用开源的接口文档平台,搭建
YAPI:百度开源的、 https://zhuanlan.zhihu.com/p/366025001
5、项目自动生成接口文档--drf
coreapi、swagger# 接口文档的规范:
描述、地址、请求方式、编码方式
请求参数--参数解释,必传,参数类型
请求体--参数解释,必传,参数类型
返回示例--返回数据字段解释
错误码解释
# 使用coreapi自动生成接口文档:
* 安装: pip install coreapi总路由: from django.contrib import admin from rest_framework.documentation import include_docs_urls from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('docs/', include_docs_urls(title='站点页面标题')),path('app/',include('app01.urls')), ]app01路由: from rest_framework.routers import SimpleRouter from . import views router=SimpleRouter() router.register('books', views.BookView, 'books') router.register('pubilsh',views.PublishView,'pulish') urlpatterns = [ ] urlpatterns += router.urls
视图类加注释: class BookView(GenericViewSet, ListModelMixin):'''返回所有图书接口'''queryset = Book.objects.all()serializer_class = BookSerializer# throttle_classes = [CommonThrottling]# throttle_classes = [MyThrottling] class PublishView(ListModelMixin, RetrieveModelMixin, CreateModelMixin, GenericViewSet):"""list:返回出版社列表数据retrieve:返回出版社详情数据create:新增出版社"""queryset = Book.objects.all()serializer_class = BookSerializer
序列化类: class BookSerializer(serializers.ModelSerializer):class Meta:model = Bookfields = ['id', 'name', 'price', 'publish', 'authors', 'publish_detail', 'author_list']extra_kwargs = {'name': {'help_text':"出版社名字",'required':False},'publish': {'write_only': True,'help_text':"出版社id号"},'authors': {'write_only': True},'publish_detail': {'read_only': True},'author_list': {'read_only': True},}
配置文件: INSTALLED_APPS = [...'app01.apps.App01Config','rest_framework','rest_framework_simplejwt', ]REST_FRAMEWORK = {'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', }
*表模型或序列化类的字段上写 help_text--->会显示在接口文档的字段介绍上
*访问地址: http://127.0.0.1:8000/docs/
jwt介绍
# 概念:JWT全名Json web token ,常被用于认证,它是一个前端登录认证的方案,是token 的一种,jwt本质就是token
# cookie,session,token发展史: https://www.cnblogs.com/liuqingzheng/articles/17858187.html# token:
*不在服务端存储(session在服务端存储)
*token 有三段,需要有个加密方式和秘钥,来签发token,和验证token
# jwt-token串,构成:三段式,使用 . 分割,base64编码eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ # 第一段:头部:header -eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9-声明加密算法,公司信息...# 第二段:荷载:payload -eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9-用户id,用户信息,token过期时间exp,token签发时间iat...# 第三段:签名 signature -TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ-通过某种加密方式+秘钥,把头和荷载加密后得到-使用它,做到防篡改,防伪造
base64的编码和解码
# base64 是编码解码方式,不是加密方式
import json import base64 user_info={'user_id':999,'username':'lqz'} # 转成字符串,使用base64编码 user_info_str=json.dumps(user_info) print(user_info_str)# 使用base64编码--->bytes格式 res=base64.b64encode(user_info_str.encode('utf-8')) print(res) # eyJ1c2VyX2lkIjogOTk5LCAidXNlcm5hbWUiOiAibHF6In0=#base64解码 res=base64.b64decode('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9') print(res)
# base64特点:
大小写数字组合,有时候,结尾会带 =
base64编码后的字符串,一定是4个倍数,如果不足,用 = 补齐,最多补3个=# base64实际用途:
1、用在jwt中
2、前后端交互,可能使用base64编码后交互
百度登录:密码先加密,使用base64编码,向后端发送
3、图片使用base64 前后端传递 12306就是
jwt的快速使用
# JWT是前后端登录认证的方式:
登录 --签发token(登录接口)
1 用户携带用户名,密码到后端
2 校验用户名密码是否正确,如果正确
3 签发token,按照jwt逻辑生成三段,返回给前端
认证token---认证类
1 用户访问我们需要登录的接口
2 携带token过来--请求头,请求地址...
3 后端验证用户携带的token,是否被篡改,是否是伪造的,如果没问题
4 认证通过,继续后续的逻辑# jwt快速使用:
1、安装, drf中借助于第三方:
pip install djangorestframework-simplejwt2、路由层:
from rest_framework.routers import SimpleRouter from rest_framework_simplejwt.views import token_obtain_pair, token_verify, token_refresh from . import views from django.urls import pathrouter=SimpleRouter() router.register('books', views.BookView, 'books') router.register('pubilsh',views.PublishView,'pulish') urlpatterns = [path('login/', token_obtain_pair), # 登录,签发token-r-》只有这个用的多path('verify/', token_verify), # 验证token 是否有效path('refresh/', token_refresh), # token有过期时间,过期不能使用,在过期之前,可以刷新 ]
3、配置文件:
INSTALLED_APPS = [...'app01.apps.App01Config','rest_framework','rest_framework_simplejwt', ]import datetime SIMPLE_JWT = {# token有效时长'ACCESS_TOKEN_LIFETIME': datetime.timedelta(minutes=30),# token刷新后的有效时间'REFRESH_TOKEN_LIFETIME': datetime.timedelta(days=1), }
4、迁移表,创建超级用户--- createsuperuser
5、测试登录接口,验证接口,刷新接口# 双token认证:
access,真正使用的token
refresh:用来更新access
access过期时间很短,过期后,需要重新生成access的token保证token的安全只要没过期,之前签发的access [token] 和后来刷新签发的token都能用
双token认证
# 单token:
用户登录,签发token----有过期时间
3 minute----重新登录
7 天,7天都不需要登录---被别人截货到---不安全
# 双token:
用户登录,签发了两个token,目前的verify验证接口,只要是它签的token,都会认证通过
access:过期时间短 3分
refresh:过期时间长7天
用户正常用:都用access,不用refresh
* access一旦过期,可以通过refresh这个token,调用刷新接口,再签发一个access
* 通过refresh再次签发token这个过程,是不需要登录的,对用户就无感知
后续再用access这个token发送请求
优点:access一旦被别人截取到,拿着模拟发送请求,只能在有效时间内,很快就会失效# 认证类:不能使用refresh的token
人脸识别逻辑
# 人脸识别---登录---登录后还要签发token
登录:
1 用户名密码
2 手机号验证码
3 一键登录
4 扫码登录
5 人脸登录
# 登录成功了,付款,付大额,弹出人脸识别,做二次认证
登录里的认证类
# 认证类:局部配置、全局配置
局部配置:必须配合权限类
class BookView(APIView):# 局部加:认证类--->带来认证信息,会校验,不带认证信息,不管,需要配合一个权限类使用authentication_classes = [JWTAuthentication] # 认证类permission_classes = [IsAuthenticated] # 权限类,没登录的用户没权限
# 前端访问:格式必须如下,放在请求头中
Authorization :Bearer access的token
全局使用:它写的登录,去除了认证REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework_simplejwt.authentication.JWTAuthentication', # 认证类],'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated', # 权限类],}
# 验证使用 refresh的token能不能认证通过
定制返回格式
# 1 我们的目标,定制返回格式
{code:100,msg:'登录成功',username:'lqz',access:asdfasdf.asdfasdf.asdfasdfrefresh:asdfas.ere.we}
# 2 顺便看了一下荷载内容
access和refresh是有区分的# 第二段:荷载:payload eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9 用户id,用户信息,token过期时间exp,token签发时间iat...
# 3 步骤
写个序列化类: # 重写validate ,返回什么,前端看到什么 from rest_framework_simplejwt.serializers import TokenObtainPairSerializer from rest_framework_simplejwt.views import TokenObtainPairView class MyTokenObtainPairSerializer(TokenObtainPairSerializer):# 往荷载中加东西@classmethoddef get_token(cls, user): # user就是登录成功,查到的用户token = super().get_token(user) # 签发tokentoken['name'] = user.username # 往荷载中加用户名return tokendef validate(self, attrs): # 全局钩子old_data = super().validate(attrs)data = {'code': 100,'msg': '登录成功成功','username': self.user.username,'refresh': old_data['refresh'],'access': old_data['access']}return data
配置文件配置 SIMPLE_JWT = {"TOKEN_OBTAIN_SERIALIZER": "app01.serializer.MyTokenObtainPairSerializer", }
视图层: # 定制返回格式(单纯做定制) from rest_framework.response import Response from rest_framework.views import APIViewclass BookView(APIView):def get(self, request):return Response("好多书啊")
路由层: from rest_framework_simplejwt.views import token_obtain_pair, token_verify, token_refresh from django.urls import path urlpatterns = [path('login/', token_obtain_pair), # 登录,签发token-r-》只有这个用的多path('verify/', token_verify), # 验证token 是否有效path('refresh/', token_refresh), # token有过期时间,过期不能使用,在过期之前,可以刷新 ]
多方式登录之面条版
# 用户输入:用户名或手机号或邮箱 +密码 都能登录,签发token
username:手机号/邮箱/名password:xxx
# 使用auth的user表
# 新建项目没问题,如果是老项目,迁移过数据了,按照如下操作:
1 删库
2 删除项目中app的迁移文件
3 删除源码中 admin和auth中得迁移记录
4 扩写auth的user表
5 重新迁移# 面条版登录(简单版)
moedels.py from django.db import models from django.contrib.auth.models import AbstractUserclass User(AbstractUser):mobile = models.CharField(max_length=24)icon = models.ImageField(upload_to='icon', default='icon/default.png')
# 迁移表格: python manage.py makemigrations python manage.pymigrate # 创建超级用户: python manage.py createsuperuser
class UserView(APIView):authentication_classes = ()permission_classes = ()def post(self, request):# 1 request取出用户名和密码username = request.data.get('username')password = request.data.get('password')# 2 使用正则判断用用户名是邮箱,手机号还是用户名,分别去查询当前用户if re.match(r'^1[3-9][0-9]{9}$', username):user = User.objects.filter(mobile=username).first()elif re.match(r'^.+@.+$', username):user = User.objects.filter(email=username).first()else:user = User.objects.filter(username=username).first()if user and user.check_password(password):# 3 校验密码# 4 签发tokenrefresh = TokenObtainPairSerializer.get_token(user)# 5 返回给前端return Response({'code': 100, 'msg': '成功', 'access': str(refresh.access_token), 'refresh': str(refresh)})else:return Response({'code': 101, 'msg': '用户名或密码错误'})
urls.py path('books/', views.UserView.as_view())
多方式登录之升级版1
views.py from rest_framework.response import Response from rest_framework.generics import GenericAPIView from .serializer import LoginSerializerclass UserView(GenericAPIView):authentication_classes = ()permission_classes = ()serializer_class = LoginSerializerdef post(self, request):ser = self.get_serializer(data=request.data)if ser.is_valid(): # 会执行字段自己的校验(没有),执行局部钩子(没有),执行全局钩子(写了:校验用户,签发token)# context 是视图类和序列化列之间沟通的桥梁access = ser.context.get('access')refresh = ser.context.get('refresh')username = ser.context.get('username')return Response({'code': 100, 'msg': '成功', 'username': username, 'access': access, 'refresh': refresh})else:return Response({'code': 101, 'msg': '用户名或密码错误11'})
serializers.py from rest_framework import serializers from .models import User import re from rest_framework.exceptions import ValidationError from rest_framework_simplejwt.serializers import TokenObtainPairSerializerclass LoginSerializer(serializers.Serializer):username = serializers.CharField()password = serializers.CharField()def validate(self, attrs): # 写全局钩子# 校验用户,签发tokenusername = attrs.get('username')password = attrs.get('password')# 2 使用正则判断用用户名是邮箱,手机号还是用户名,分别去查询当前用户if re.match(r'^1[3-9][0-9]{9}$', username):user = User.objects.filter(mobile=username).first()elif re.match(r'^.+@.+$', username):user = User.objects.filter(email=username).first()else:user = User.objects.filter(username=username).first()if user and user.check_password(password):# 3 校验密码# 4 签发tokenrefresh = TokenObtainPairSerializer.get_token(user)self.context['access'] = str(refresh.access_token)self.context['refresh'] = str(refresh)self.context['username'] = user.usernamereturn attrselse:raise ValidationError('用户名或密码错误')
多方式登录之升级版2
# 直接在序列化类里输出格式
views.py class UserView(GenericAPIView):authentication_classes = ()permission_classes = ()serializer_class = LoginSerializerdef post(self, request):ser = LoginSerializer(data=request.data)if ser.is_valid(): # 会执行字段自己的校验(没有),执行局部钩子(没有),执行全局钩子(写了:校验用户,签发token)# ser.validated_data # 字典,校验过后的数据return Response(ser.validated_data )else:return Response({'code': 101, 'msg': '用户名或密码错误11'})
serializers.py class LoginSerializer(serializers.Serializer):username = serializers.CharField()password = serializers.CharField()def validate(self, attrs): # 写全局钩子 # 校验用户,签发tokenusername = attrs.get('username')password = attrs.get('password')# 2 使用正则判断用用户名是邮箱,手机号还是用户名,分别去查询当前用户if re.match(r'^1[3-9][0-9]{9}$', username):user = User.objects.filter(mobile=username).first()elif re.match(r'^.+@.+$', username):user = User.objects.filter(email=username).first()else:user = User.objects.filter(username=username).first()if user and user.check_password(password):# 3 校验密码# 4 签发tokenrefresh = TokenObtainPairSerializer.get_token(user)data = {'code': 100,'msg': '登录成功成功','username': self.user.username,'refresh':str(refresh),'access': str(refresh.access_token)}return dataelse:raise ValidationError('用户名或密码错误')
今日思维导图:
相关文章:
drf知识--10
接口文档 # 后端把接口写好后: 登录接口:/api/v1/login ---> post---name pwd 注册接口 查询所有图书带过滤接口 # 前后端需要做对接,对接第一个东西就是这个接口文档,前端照着接口文档开发 公司3个人ÿ…...
探索 Vue 实例方法的魅力:提升 Vue 开发技能(下)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
mysql死锁排查
查看正在进行中的事务 SELECT * FROM information_schema.INNODB_TRX;字段解释trx_id唯一事务id号,只读事务和非锁事务是不会创建id的trx_state事务的执行状态,值一般分为:RUNNING, LOCK WAIT, ROLLING BACK, and COMMITTING.trx_started事务…...
若依项目(ruoy-vue)多模块依赖情况简要分析
主pom文件关键点分析 properties标签声明变量信息:版本号、编码类型、java版本spring-boot依赖形式:spring-boot-dependencies、pom、importdependencies中添加本项目内部模块,同时在modules中声明模块packaging打包选择pom设置打包maven-co…...
【普中开发板】基于51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+设计报告+讲解视频)
基于普中开发板51单片机的篮球计分器液晶LCD1602显示 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接(可点击): 基于51单片机的篮球计分器液晶LCD1602显示 ( pr…...
按照层次遍历结果打印完全二叉树
按照层次遍历结果打印完全二叉树 按照推论结果: l 层首个节点位置 2h-l - 1l 层节点间距:2h-l1 - 1 编码实现 public static<E> void print(BinaryTree<E> tree) {List<List<Node<E>>> levelNodeList levelOrderTraver…...
基于SpringBoot的药店管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的药店管理系统,java项目…...
Java 泛型深入解析
Java 中的泛型是一种强大的编程特性,允许我们编写更加通用和类型安全的代码。本篇博客将深入探讨 Java 泛型的各个方面,包括泛型类、泛型方法、泛型接口以及泛型通配符。 1. 泛型类 首先,让我们看一个简单的泛型类的例子。在下面的代码中&a…...
Apache Doris (六十): Doris - 物化视图
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录...
【javaweb】tomcat9.0中的HttpServlet
2023年12月28日,周四晚上 目录 什么是HttpServlet tomcat中的HttpServlet由谁产生 什么是HttpServlet 在Tomcat中,HttpServlet 是 Java Servlet API 中的一个抽象类,用于简化基于HTTP协议的Servlet的开发。HttpServlet 扩展了 GenericServ…...
数据结构学习笔记——查找算法中的树形查找(B树、B+树)
目录 前言一、B树(一)B树的概念(二)B树的性质(三)B树的高度(四)B树的查找(五)B树的插入(六)B树的删除 二、B树(一…...
python包chromadb安装失败总结
1,背景: 最近在学习langchain的课程,里面创建自己的知识库的Retrieval模块中,需要用到向量数据库。 所以按照官方的教程(vectorstores),准备使用chroma的向量数据库。图片来源 2,问…...
机器学习(四) -- 模型评估(2)
系列文章目录 机器学习(一) -- 概述 机器学习(二) -- 数据预处理(1-3) 机器学习(三) -- 特征工程(1-2) 机器学习(四) -- 模型评估…...
泊松分布与二项分布的可加性
泊松分布与二项分布的可加性 泊松分布的可加性 例 : 设 X , Y X,Y X,Y 相互独立 , X ∼ P ( λ 1 ) X\sim P(\lambda_1) X∼P(λ1) , Y ∼ P ( λ 2 ) Y\sim P(\lambda_2) Y∼P(λ2) , 求证 Z X Y ZXY ZXY 服从参数为 λ 1 λ 2 \lambda_1 \lambda_2 λ1λ2 …...
【PostgreSQL】约束-排他约束
【PostgreSQL】约束链接 检查 唯一 主键 外键 排他 排他约束 排他约束是一种数据库约束,用于确保某一列或多个列中的值在每一条记录中都是唯一的。这意味着任何两条记录都不能具有相同的值。 排他约束可以在数据库中创建唯一索引或唯一约束来实现。当尝试插入或更…...
Java重修第一天—学习数组
1. 认识数组 建议1.5倍速学习,并且关闭弹幕。 数组的定义:数组是一个容器,用来存储一批同种类型的数据。 下述图:是生成数字数组和字符串数组。 为什么有了变量还需要定义数组呢?为了解决在某些场景下,变…...
【C#】知识点实践序列之Lock的锁定代码块
大家好,我是全栈小5,欢迎来到《小5讲堂之知识点实践序列》文章。 2024年第1篇文章,此篇文章是C#知识点实践序列之Lock知识点,博主能力有限,理解水平有限,若有不对之处望指正! 本篇验证Lock锁定代…...
StringBad ditto (motto)
第12章 类和动态内存分配 StringBad ditto (motto): // calls StringBad (comst StringBad &) StringBad metoo - motto: // calls StringBad (const StringBad &) StringBad also StringBad (motto): // calls StringBad (const StringBad &) StringBad * pStri…...
Redis缓存击穿、缓存雪崩、缓存穿透
缓存击穿(某个热点key缓存失效) 概念 缓存中没有但数据库中有的数据,假如是热点数据,那key在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力增大和缓存雪崩的…...
【PCB专题】Allegro封装更新焊盘
在PCB封装的绘制中,有时会出现需要更新焊盘的情况。比如在制作封装的过程中发现焊盘做的不对而使用PAD_Designer重新更新了焊盘。 那在PCB中如何更新已经修改过的焊盘呢? 打开封装,选择Tools->Padstack->Refresh... 选择Refresh all …...
ES6之Reflect详解
✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…...
文件监控-IT安全管理软件
文件监控和IT安全管理软件是用于保护企业数据和网络安全的工具。这些工具可以帮助企业监控文件的变化,防止未经授权的访问和修改,并确保数据的安全性和完整性。 一、具有哪些功能 文件监控软件可以实时监控文件系统的活动,包括文件的创建、修…...
达梦数据库安装超详细教程(小白篇)
文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。 达梦数…...
复试 || 就业day09(2024.01.04)算法篇
文章目录 前言验证外星语词典在长度 2N 的数组中找出重复 N 次的元素找到小镇的法官查找共用字符数组的相对排序分发饼干分发糖果区间选点(AcWing)最大不相交区间数量(AcWing)无重叠区间关于重写小于号 前言 💫你好,我是辰chen,本文旨在准备考…...
Win10电脑关闭OneDrive自动同步的方法
在Win10电脑操作过程中,用户想要关闭OneDrive的自动同步功能,但不知道具体要怎么操作?首先用户需要打开OneDrive,然后点击关闭默认情况下将文档保存到OneDrive选项保存,最后关闭在这台电脑上同步设置保存就好了。接下来…...
linux(centos)相关
文件架构: bin--binary--二进制命令,可直接执行 sbin systembin系统二进制命令,超级管理员 lib 库目录 类似dll文件 lib64 64位系统相关的库文件 usr 用户文件 boot 引导分区的文件,链接,系统启动等 dev device设备目录…...
外贸网站显示不安全警告怎么办?消除网站不安全警告超全指南
外贸网站显示不安全警告怎么办?当用户访问你的网站,而您的网站没有部署SSL证书实现HTTPS加密时,网站就会显示不安全警告,这种警告,不仅有可能阻止用户继续浏览网站,影响网站声誉,还有可能影响网…...
Java:HeapMemory和DirectMemory配置与使用介绍
目录 一、Heap内存 1、查看Heap内存配置的最大值 2、配置Heap内存最大值的方式 3、配置Heap内存最小值的方式 4、查看已使用Heap内存的方式 5、查看未使用Heap内存的方式 二、Direct内存 1、查看Direct内存配置的最大值 2、配置Direct内存最大值的方式 3、获取Direct…...
记 -bash: docker-compose: command not found 的问题解决
docker-compose: command not found 错误表明系统无法找到 docker-compose 命令。这可能是因为 docker-compose 并未正确安装,或者其可执行文件的路径未包含在系统的 PATH 变量中。 以下是我遇到时解决方法: 确保 Docker 和 Docker Compose 已安装&…...
分享10篇优秀论文,涉及图神经网络、大模型优化、表格分析
引言 第38届AAAI人工智能年度会议将于2024年2月在加拿大温哥华举行。今天给大家分享十篇AAAI2024论文,主要涉及图神经网络,大模型幻觉、中文书法文字生成、表格数据分析、KGs错误检测、多模态Prompt、思维图生成等。 论文获取方式,回复&am…...
四合一做网站/西安seo招聘
1.如何计算一个函数运行的时间 import time #导入time模块starttime.time() #返回从unix诞生到现在为止的时间,单位是秒 print(start) def haha():print("希望你开心")endtime.time() print(end)print(end-start)输出: RESTART: C:/Users/d…...
公司微信网站建设方案/东莞seo排名优化
点击上方“后端技术精选”,选择“置顶公众号”技术文章第一时间送达!作者:jajiancnblogs.com/jajian/p/10051901.htmlJSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格式࿰…...
深圳网站建设制作哪家便宜/自己如何制作网站
创建link server链接服务器碰到的问题及解决办法参考文章: (1)创建link server链接服务器碰到的问题及解决办法 (2)https://www.cnblogs.com/mcgrady/p/4798609.html 备忘一下。...
卖挂的网站怎么做/手机怎么建自己的网站
Android 资源(Resources)访问有许多东西用来构建一个优秀的 Android 应用程序。除了应用程序的编码,你需要关注各种各样的资源,诸如你用到的各种静态内容,如位图,颜色,布局定义,用户界面字符串,…...
亚马逊网站托管怎么做/百度统计平台
曾几何时,高冷的Mac用户淡淡的嘲讽了装了XX安全卫士、安全浏览器及杀毒的低贱的Windows用户。Mac OS似乎一直自带光环,贴着稳定、安全的标签。然而Mac OS真的永不中毒吗?事实真相似乎并不那么美好。Mac OS会不会中毒当然会。首先要承认的是&a…...
苏州企业网站建设服务中心/东莞搜索排名提升
为什么80%的码农都做不了架构师?>>> Mybatis sql改写 近期有项目需要,需要把update转化成insert,网上搜索了下发现mybatis的拦截器可以实现该功能。 一、mybatis拦截器 实现一个拦截器拦截所有update方法 import java.sql.SQLExc…...