网站建设是什么工作/seo关键词
Django Rest Framework学习
一、初识DRF组件
1.1 FBV和CBV
-
FBV:function based view
from django.shortcuts import render, HttpResponse # 这种是基于FBV模式 函数模式实现Views函数 def login(request):if request.method == 'GET':return HttpResponse("Get请求。。。。")return HttpResponse("POST请求。。。。")
在FBV下调函数不加(),例如path(‘login/’, views.Login)url是映射,指向这块空间
-
CBV:class based view
1.app目录下的views.py下
from django.shortcuts import render, HttpResponse from django.views import View # 类要继承django的view模块 class LoginView(View):# 这个函数是固定写法,必须叫getdef get(self):return HttpResponse("get请求。。。。")# 这个函数是固定写法,必须叫postdef post(self):return HttpResponse("post请求。。。。")
2.urls.py下使用 django的view
from django.contrib import admin from django.urls import path from userapp import views urlpatterns = [# path('admin/', admin.site.urls),path('login/', views.LoginView.as_view()), ] '''path('login/', views.LoginView.as_view()),相当于:path('login/', View.view),一旦浏览器发起get请求 /login/ ————> View.view()def view(request, *args, **kwargs):self = cls(**initkwargs)return self.dispatch(request, *args, **kwargs)然后view()去调用dispatch()方法def dispatch(self, request, *args, **kwargs):if request.method.lower() in self.http_method_names:handler = getattr(self, request.method.lower(), self.http_method_not_allowed)else:handler = self.http_method_not_allowed# 返回loginview里的get、post方法return handler(request, *args, **kwargs) '''
在CBV模式下重要的是as_view()
1.2 类、面向对象基础
运算符的应用
代码:能看懂这个就能理解操作符优先级
class B(object):def __init__(self, name, age):self.name = nameself.age = ageself.foo()def foo(self):print("B foo....")
class Animal(B):foo = 100def foo(self):print("A foo...")foo = 100
scd = Animal("dfdk", 23)
反射:getattr()函数
class Animal(object):def __init__(self, name, age):self.name = nameself.age = age
ads = Animal("hdsdf", 23)
atrr = input(">>>查看ads的哪个属性:")
print(getattr(ads, atrr))
反射二 getattr 方法执行通过实例对象(ads)去调用Animal类的属性和方法
getattract(self(实列对象),类中的函数)
class Animal(object):def __init__(self, name, age):self.name = nameself.age = agedef foo(self):print("foo zhixingl")
ads = Animal("hdsdf", 23)atrr = input(">>>查看ads的哪个属性:")
print(getattr(ads, atrr))
getattr(ads, "foo")()
1.重载(overloading method)
是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。重载是让类以统一的方式处理不同类型数据的一种手段。函数重载主要是为了解决两个问题。
1.可变参数类型。
2.可变参数个数。
另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。
好吧,那么对于情况 1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。
那么对于情况 2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。
好了,鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函数重载了。
2.方法重写(overiding method)
子类不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖
class LoginView(View):def dispatch(self, request, *args, **kwargs):print("dispatch....")# 在重写方法后,在引用父类方法需要使用super()super().dispatch(request, *args, **kwargs)
1.3 前后端分离模式
-
前后端不分离模式:
- 将数据库的数据直接嵌入模板中 实现方法是使用模板语法
- views.py里要返回页面 使用render(),HttpResponse,redirct()
-
前后端分离模式:
- 使用后端的数据,queryset ,序列化(将数据库的数据传到客户端页面)、反序列化(将客户端的数据返回并保存到数据库)
1.4 API
目前市面上大多数公司开发人员使用的接口实现规范主要有:restful(基于Http协议)、RPC(基于TCP协议)性能好一些。
-
RPC (Remote Procedure Call)远程过程调用【远程服务调用】,从字面上理解就是访问/调用远程服务端提供的API接口
-
restful :面向资源开发
符合restful 规范 urls路由:
/books/get ----- > 查看所有资源逻辑post ----- > 添加逻辑 /books/1get ----- > 查看单个资源逻辑delete ----- > 删除单个资源逻辑put ----- > 更新单个资源逻辑patch ----- > 更新资源逻辑
1.5 drf的使用
-
在setting.py 的INSTALLED_APPS下添加” rest_framework“
-
在urls路由中
from django.contrib import admin from django.urls import path from userapp.views import LoginView from drfdemo import views urlpatterns = [# path('admin/', admin.site.urls),path('login/', LoginView.as_view()),path('student/', views.StudentView.as_view()), ] 因为DRF框架的views的类视图继承的是rest_framework的APIView类 所以 path('student/', views.StudentView.as_view()),中调用的是rest_framework的方法 ''' 类视图继承的是rest_framework的APIView类def as_view(cls, **initkwargs):########第二步调用django的View类里的as_view()函数 #######view = super().as_view(**initkwargs)view.cls = clsview.initkwargs = initkwargs#####第三步 在View.as_view中返回view函数(dispatch()方法)def view(request, *args, **kwargs):self = cls(**initkwargs)这个self指的是APIViewreturn self.dispatch(request, *args, **kwargs)#####第四步 调用APIView的dispatch方法,因为APIView中有自己的dispatch()方法#####第五步 看看APIView的dispatch方法的实现def dispatch(self, request, *args, **kwargs):self.args = argsself.kwargs = kwargs##### 构建新的request对象request = self.initialize_request(request, *args, **kwargs)self.request = requestself.headers = self.default_response_headers # deprecate?##### 执行三个组件 权限、认证(验证有点像Django的modelForms)、限流self.initial(request, *args, **kwargs)##### 分发逻辑(使用getattr()反射去StudentView下找到相关的函数并执行)handler = getattr(self, request.method.lower(), self.http_method_not_allowed)handler = self.http_method_not_allowed# 返回loginview里的get、post方法return handler(request, *args, **kwargs) '''
-
views.py文件
from django.shortcuts import render, HttpResponse # from django.views import View # 序列化器和检验数据的功能 from rest_framework.views import APIView # Create your views here. class StudentView(APIView):def get(self, request):# 查看get请求传回来的数据 request.GETprint(request.GET, type(request.GET))print(request.query_params)return HttpResponse("LoginView:get请求。。。。")def post(self, request):# 查看post请求传回来的数据 使用request.dataprint(request.data, type(request.data))return HttpResponse("LoginView:post请求。。。。")def delete(self, request):return HttpResponse("LoginView:delete请求。。。。")
请求参数的反序列化,
-
request.data
返回解析之后的请求体数据,类似于Django里的request.POST和request.FILES属性:
- 包含了解析之后的文件和非文件数据
- 包含了对POST、PUT、PATCH请求方式解析后的数据
- 利用了REST Framework的parsers解析器,不仅支持表单类型数据,也支持JSON数据
-
request.query_params
与DJango标准的request.GET相同,只是更换了更正确的名称而已
-
request._request
获取django封装的Request对象
-
-
序列化
-
创建序列化类
from rest_framework import serializers # 序列化类的构建 class StudentSerializer(serializers.Serializer):name = serializers.CharField()sex = serializers.BooleanField()age = serializers.IntegerField()class_num = serializers.CharField()
-
创建序列化对象
class StudentView(APIView):def get(self, request):# 查看get请求传回来的数据 request.GETprint(request.GET, type(request.GET))print(request.query_params)# 获取数据库里的所有数据,序列化对象studentstudent = models.Student.objects.all()StudentSerializer(instance=student,)return HttpResponse("LoginView:get请求。。。。")
-
Serializer的创建好序列化对象构造方法(默认many=false)
many = True 表示序列化多个数据对象
student = models.Student.objects.all()# 可能是多个数据对象所以使用many=True StudentSerializer(instance=student, data=empty,many=True )# many =True 表示多个序列化数据
说明:
1)用序列化时,将模型类对象传入instance参数
2)用反序列化时,将要被反序列化的数据传入data参数
3)除了instance参数、data参数外,构造的Serializer对象时还可以通过context参数额外添加数据,如
StudentSerializer(instance=student, context={"request":request} )
-
序列化器的使用
序列化器的使用分为两个阶段
- 处理客户端请求时,使用序列化器可以完成对数据的反序列化
- 处理服务端响应时,使用序列化器可以完成对数据的序列化
-
响应器
from rest_framework.response import Response return Response(serializer.data)
-
queryset\instance 转换为JSON/xml/yaml格式
-
-
反序列化(添加数据)
-
校验
def post(self, request):# 查看post请求传回来的数据 使用request.dataprint(request.data, type(request.data))serializer = StudentSerializer(data=request.data)# 验证方法一try:serializer.is_valid(raise_exception=True)# 将数据库插入数据库models.Student.objects.create(**serializer.validated_data)except:return Response(serializer.errors)# 验证方法二if serializer.is_valid():models.Student.objects.create(**serializer.validated_data)return Response(serializer.errors)
-
1.6 由Django开发API View开发
from django.shortcuts import render
import json
from django.http import HttpResponse, JsonResponse
from django.views import View
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
# Create your views here.courser_list = {'name': '课程','price': 999.1
}# FBV
@csrf_exempt
def course_list(request):if request.method == "GET":# return HttpResponse(json.dump(courser_list), content_type='application/json')return JsonResponse(courser_list)course = json.loads(request.body.decode('utf-8'))return JsonResponse(course, safe=False)# CBV
@method_decorator(csrf_exempt, name='dispatch')
class CourseList(View):def get(self,request):return JsonResponse(courser_list)def post(self, request):course = json.loads(request.body.decode('utf-8'))return JsonResponse(course, safe=False)
1.7 由DRF 开发API view
-
函数式编程(Function Based View)
""" 一、DRF函数式编程 FBV (Function Based View)""" @api_view(["GET", "POST"]) def course_list(request):if request.method == 'GET':course = Course.objects.all()sercourse = SerializerCourse(instance=course, many=True) # 序列化return Response(data=sercourse.data, status=status.HTTP_200_OK)elif request.method == 'POST':s = SerializerCourse(data=request.data) # 反序列化if s.is_valid():s.save(teacher=request.user)return Response(data=s.data, status=status.HTTP_201_CREATED)return Response(s.errors, status=status.HTTP_400_BAD_REQUEST)
-
类试图编程(Classed Based View)
views.pyfrom rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework import status # 状态码 from rest_framework.views import APIView from drfapp import models from .models import Course from .serializers import SerializerCourse"""二、类视图 CLass Based View""" class CourseList(APIView):def get(self, request):# 查看get请求传回来的数据 request.GETprint(request.GET, type(request.GET))print(request.query_params)# 获取数据库里的所有数据,序列化对象students = models.Course.objects.all()ser = SerializerCourse(instance=s, many=True)return Response(data=ser.data)def post(self,request):s = SerializerCourse(data=request.data) # 反序列化if s.is_valid():s.save()print(type(request.data),type(s.data))return Response(data=s.data, status=status.HTTP_201_CREATED)return Response(s.errors, status=status.HTTP_400_BAD_REQUEST)class CourseDetailList(APIView):@staticmethoddef get_objects(id):""":param id: 课程id:return: 返回课程这个课程id的查询数据对象"""try:return models.Course.objects.get(id=id)except Course.DoesNotExist:returndef get(self, request, id):# 查看get请求传回来的数据 request.GET# 获取数据库里的所有数据,序列化对象studentobj = self.get_objects(id=id)# 如果没查询的结果if not obj:return Response(data={'msg': "此课程不存在"}, status=status.HTTP_404_NOT_FOUND)s = SerializerCourse(instance=obj, many=False)print(type(request.data), type(s.data))return Response(data=s.data, status=status.HTTP_200_OK)def put(self, request, id):""":param request::param id::return:"""obj = self.get_objects(id=id)# 如果没查询的结果if not obj:return Response(data={'msg': "此课程不存在"}, status=status.HTTP_404_NOT_FOUND)s = SerializerCourse(instance=obj, data=request.data)if s.is_valid():s.save()print(type(request.data), type(s.data))return Response(data=s.data, status=status.HTTP_201_CREATED)return Response(s.errors, status=status.HTTP_400_BAD_REQUEST)def delete(self, request, id):obj = self.get_objects(id=id)# 如果没查询的结果if not obj:return Response(data={'msg': "此课程不存在"}, status=status.HTTP_404_NOT_FOUND)obj.delete()return Response(status=status.HTTP_204_NO_CONTENT)urls.py from django.urls import path, re_path, include from drfapp import viewsurlpatterns = [path("cbv/list/", views.CourseList.as_view()),path("cbv/list/<int:id>/", views.CourseDetailList.as_view()) ]
-
通用类视图(Generic Classed Based View)
# 通用类导包 from rest_framework import generics"""三、通用类视图 Generic CLass Based View""" class GCourseList(generics.ListCreateAPIView):queryset = models.Course.objects.all()serializer_class = SerializerCourse# from rest_framework import mixins # from rest_framework.generics import GenericAPIView # class GCourseDetailList((mixins.RetrieveModelMixin, # mixins.UpdateModelMixin, # mixins.DestroyModelMixin, # GenericAPIView)): class GCourseDetailList(generics.RetrieveUpdateDestroyAPIView):queryset = models.Course.objects.all()serializer_class = SerializerCourseurls.py from django.urls import path, re_path, include from drfapp import viewsurlpatterns = [# Class Based Viewpath("cbv/list/", views.CourseList.as_view()),path("cbv/list/<int:id>/", views.CourseDetailList.as_view()),# Generic Class Based Viewpath("gcbv/list/", views.GCourseList.as_view()),# 注意:这里的<int:pk>要固定写成pkpath("gcbv/list/<int:pk>/", views.GCourseDetailList.as_view()) ]
put和patch的区别:
put需要写全部字段并全部更新 patch 只需要写部分需要更新的字段并添加要更改的值
-
DRF的视图集viewsets
- 方法一使用原始创建路由 url
from django.urls import path, re_path, include from drfapp import viewsurlpatterns = [# Class Based Viewpath("cbv/list/", views.CourseList.as_view()),path("cbv/list/<int:id>/", views.CourseDetailList.as_view()),# Generic Class Based Viewpath("gcbv/list/", views.GCourseList.as_view()),path("gcbv/list/<int:pk>/", views.GCourseDetailList.as_view()),# DRF viewsets ######## 方法一:# get的值是:viewsets.ModelViewSet继承的ListModelMixin.list# post值:viewsets.ModelViewSet继承的CreateModelMixin.create# get的值是:viewsets.ModelViewSet继承的RetrieveModelMixin.retrieve# put值:viewsets.ModelViewSet继承的UpdateModelMixin.update# patch值:viewsets.ModelViewSet继承的UpdateModelMixin.partial_update# put值:viewsets.ModelViewSet继承的DestroyModelMixin.destroypath("viewsets/", views.CourseViewSet.as_view({"get": "list", "post": "create"})),path("viewsets/<int:pk>/", views.CourseViewSet.as_view({"get": "retrieve", "put": "update", "patch": "partial_update", "delete": "destroy"})) ]
-
DRF的视图集viewsets 方法一使用原始创建路由 url
- 方法二 使用DRF的routers创建路由 url
from django.urls import path, re_path, include from drfapp import views# DRF viewsets ######## 方法二使用DRF的路由: from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register(prefix="viewsets", viewset=views.CourseViewSet)urlpatterns = [path("", include(router.urls)) ]
1.8 权限与认证
-
认证: 认证 是指一个用户登录时对其身份的校验、认证; 在setting.py进行drf权限配置 (认证是最先被执行的 然后再权限检测)
'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework.authentication.BasicAuthentication','rest_framework.authentication.SessionAuthentication','rest_framework.authentication.TokenAuthentication']
-
Token验证的生成方式
-
使用Django的manage.py生成Token
生成Token的命令 python manage.py drf_create_token admin
-
使用Django的信号机制生成Token
第一步 settings.文件下INSTALLED_APPS = [ 'rest_framework.authtoken', # DRF 自带的Token认证 ] 第二步 views.py文件下 # 通过信号机制生成Token from django.db.models.signals import post_save from django.dispatch import receiver # django的user模型类 from django.conf import settings from rest_framework.authtoken.models import Token# 通过信号机制生成token @receiver(post_save, sender=settings.AUTH_USER_MODEL) #Django的信号机制 def generate_token(sender, instance=None, created=False, **kwargs):"""创建用户时自动生成token:param sender::param instance::param created::param kwargs::return:"""if created:Token.objects.create(user=instance)第三步 drf_kan项目的总路由:drf_kan/urls.py from rest_framework.authtoken import views urlpatterns = [path('api-token-auth', views.obtain_auth_token), # 获取Token的接口 ]
-
-
权限:权限是指一个登录验证通过的用户能够访问哪些接口API,或者时对某个API接口能够拿到什么级别权限的数据
'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated',],
1.9 生成API接口文档
-
方法一
# 第一步 在settings.py中 # DRF的全局配置 REST_FRAMEWORK = {'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema',} #第二步 在drf_kan项目的总路由:drf_kan/urls.py文件中 from rest_framework.schemas import get_schema_view # 概要 生成接口文档的包schema_view = get_schema_view(title="DRF API Document", description="xxxx") urlpatterns = [path('schema/', schema_view),]
-
方法二
# 第一步 在settings.py中 # DRF的全局配置 REST_FRAMEWORK = {# 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema','DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',} #第二步 在drf_kan项目的总路由:drf_kan/urls.py文件中 from rest_framework.documentation import include_docs_urls # 生成接口文档的包urlpatterns = [path('docs/', include_docs_urls(title="DRF API Document", description="DRF快速入门"))]
toSchema’,}
#第二步
在drf_kan项目的总路由:drf_kan/urls.py文件中
from rest_framework.schemas import get_schema_view # 概要 生成接口文档的包
schema_view = get_schema_view(title=“DRF API Document”, description=“xxxx”)
urlpatterns = [
path(‘schema/’, schema_view),
]
- 方法二```python
# 第一步
在settings.py中
# DRF的全局配置
REST_FRAMEWORK = {# 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema','DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',}
#第二步
在drf_kan项目的总路由:drf_kan/urls.py文件中
from rest_framework.documentation import include_docs_urls # 生成接口文档的包urlpatterns = [path('docs/', include_docs_urls(title="DRF API Document", description="DRF快速入门"))]
相关文章:

DRF(Django Rest Framework)框架基于restAPI协议规范的知识点总结
Django Rest Framework学习 一、初识DRF组件 1.1 FBV和CBV FBV:function based view from django.shortcuts import render, HttpResponse # 这种是基于FBV模式 函数模式实现Views函数 def login(request):if request.method GET:return HttpResponse("Get…...

Linux磁盘与文件系统管理
目录 在linux系统中使用硬盘 磁盘的数据结构 磁盘接口类型 字母含义 MBR磁盘分区 分区类型 分区的缺点 文件系统的 文件系统有什么作用 文件系统的修复 检测并确认新磁盘 参看磁盘信息 查看磁盘信息 添加磁盘 查看添加磁盘情况:sda系统磁盘ÿ…...

数字魔法AI绘画的艺术奇迹-用Stable Diffusion挑战无限可能【文末送书-12】
文章目录 前言一. 技术原理1.1 发展历程 二.对艺术领域的影响三. 挑战与机遇四.AI魔法绘画:用Stable Diffusion挑战无限可能【文末送书-12】4.1 粉丝福利:文末推荐与福利免费包邮送书! 前言 随着人工智能技术的迅猛发展,AI在各个…...

【docker实战】02 用docker安装mysql
本示例采用bitnami的镜像进行安装MySQL 一、镜像搜索 先搜索一下mysql有哪些镜像 [rootlocalhost ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql …...

循环渲染ForEach
目录 1、接口说明 2、键值生成规则 3、组件创建规则 3.1、首次渲染 3.2、非首次渲染 4、使用场景 4.1、数据源不变 4.2、数据源组项发生变化 4.3、数据源数组项子属性变化 5、反例 5.1、渲染结果非预期 5.2、渲染性能降低 Android开发中我们有ListView组件、GridVi…...

纷享销客华为云:如何让企业多一个选择?
纷享销客携手华为云推出多项联合解决方案,为企业的数字化提供了一个新选择。12月12日,纷享销客&华为云联合解决方案发布会在北京举办。本次发布会以“「CRM云」让企业多一个选择”为主题,来自行业头部企业的CEO、CIO、业务负责人等&#…...

前端实现断点续传文件
公司要求实现的功能,大概思路是将上传的文件通过jsZip压缩后,进行切片,留一下总切片,当前片,并把这些数据给后端,至于前端的校验,是由Md5完成的,验证文件唯一性,这样下次…...

复试 || 就业day01(2023.12.27)算法篇
文章目录 前言两数之和存在重复元素 II好数对的数目总持续时间可被 60 整除的歌曲 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫文章题目大多来自于 leetcode,当然也可能来自洛谷或其他刷题平台 Ὂ…...

JavaWeb——JQuery
文章目录 JQuery 是什么?jQuery 的原理示意图JQuery 基本开发步骤jQuery 对象和 DOM 对象将dom对象转为JQuery对象jQuery 对象转成 DOM 对象jQuery 选择器基本选择器基础过滤选择器JQuery 是什么? 基本介绍 jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理…...

Python教程:查询Py模块的版本号,有哪些方法?
1.查看模块内部的版本信息:如果你已经导入了该模块,可以查看模块内部的__version__属性来获取版本信息。例如,对于pandas模块,可以运行import pandas和print(pandas.version)来获取版本信息。 import pandas print(pandas.__vers…...

第一节 初始化项目
系列文章目录 第一节 初始化项目 文章目录 操作步骤 总结 操作步骤 打开cmd 输入 vue ui 在打开的网页中点击“创建”,复制文件夹路径并粘贴点击“在此创建新项目” 输入项目名称 点击下一步选择手动配置 选择babel、router、vuex、css pre-processors、 linter建…...

idea提示unable to import maven project
问题描述: idea导入maven依赖时提示unable to import maven project 打开log日志如下: 问题原因以及解决方案: maven版本与idea版本不兼容,切换maven版本即可...

【Spring】SpringBoot日志
文章目录 什么是日志日志的用途日志的使用如何打印日志日志级别日志框架门面模式(外观模式)日志级别的使用配置日志级别日志持久化配置日志的存储目录配置日志文件名配置日志文件分割 更简单的日志输出 什么是日志 在计算机领域,日志是一个记…...

HTML+CSS制作动漫绿巨人
🎀效果展示 🎀代码展示 <!DOCTYPE html> <html lang="en" > <head>...

AGV智能搬运机器人-替代人工工位让物流行业降本增效
在当今快速发展的世界中,物流业面临着巨大的挑战,包括提高效率、降低成本和优化工作流程。为了应对这些挑战,一种新型的自动化设备——智能搬运机器人正在崭露头角。本文将通过一个具体的案例来展示富唯智能转运机器人在实际应用中的价值。 案…...

【办公技巧】怎么批量提取文件名到excel
Excel是大家经常用来制作表格的文件,比如输入文件名,如果有大量文件需要输入,用张贴复制或者手动输入的方式还是很费时间的,今天和大家分享如何批量提取文件名。 打开需要提取文件名的文件夹,选中所有文件,…...

uniapp实现前端银行卡隐藏中间的数字,及隐藏姓名后两位
Vue 实现前端银行卡隐藏中间的数字 主要应用了 filters过滤器 来实现效果 实现效果,如图: <template><div><div style"background-color: #f4f4f4;margin:50px 0 0 460px;width:900px;height:300px;"><p>原来&#…...

HPCC:高精度拥塞控制
HPCC:高精度拥塞控制 文章目录 HPCC:高精度拥塞控制摘要1 引言1.1 背景1.2 现有CC的局限性1.3 HPCC的提出 2 研究动机2.1 大型RDMA部署2.2 RDMA目标2.3 当前RDMA CC中的权衡DCQCNTIMELY 2.4 下一代高速CC 3 技术方案3.1 INT3.2 HPCC设计3.3 HPPC的参数 4…...

centos 配置 git 连接 github
centos 配置 git 连接 github 首先安装 git 创建 ssh key ssh-keygen -t rsa复制公钥 cat ~/.ssh/id_rsa.pub # 打印出公钥内容然后复制配置 github 登录网页 github 账号;进入 setting;点击 SSH and GPG keys,点击 New SSH keytitile 随便填…...

SpringBoot发布项目到docker
Dockerfile FROM openjdk:11 # 作者 MAINTAINER chenxiaodong<2774398338qq.com># 安装 vim # RUN yum -y install vim# 环境变量 # 进入容器后的默认工作目录 ENV WORKPATH /usr/local/webapp ENV EXECFILE Docker2Application-0.0.1-SNAPSHOT.jarRUN mkdir -p $WORKPA…...

sheng的学习笔记-卷积神经网络
源自吴恩达的深度学习课程,仅用于笔记,便于自行复习 导论 1)什么是卷积神经网络 卷积神经网络,也就是convolutional neural networks (简称CNN),使用卷积算法的神经网络,常用于计…...

数据库:园林题库软件(《中国古代园林史》答题卷一 )
《中国古代园林史》答题卷一 填空题 1、中国古代园林曾被誉为“世界园林之母”。国际风景园林师联合会(IFLA)的创始人、著名风景园林师和教育家杰里柯爵士( Sir Geoffrey Alan Jellicoe)把中国古代园林和西亚园林以及古希腊园林列为世界三大园林体系之首。 2、中国古代园林是…...

upset 绘制
好久没有更新,今天来一个upset图的绘制 1.1 安装包 #绘制upset的包现在看来有三个 ## UpSet ### 最基本的upsetR包,使用方便,但是扩展不方便 devtools::install_github("hms-dbmi/UpSetR") ## complex-upset ### UpSet的升级款 支持ggplot2 devtools::install_git…...

声明 | 为打击假冒账号、恶意抄袭账号等诈骗活动,提升本账号权威,本博主特此郑重声明
声明 | 为打击假冒账号、恶意抄袭账号诈骗活动,提升本账号权威,本博主特此郑重声明 一、本账号为《机器学习之心》博主CSDN唯一官方账号,唯一联系方式见文章底部。 二、《机器学习之心》博主未授权任何第三方账号进行模型合作、程序设计、源…...

云计算:OpenStack 配置二层物理网卡为三层桥的接口
目录 一、理论 1.OpenStack 二、实验 1. Linux系统修改网卡 2.OpenStack 配置二层物理网卡为三层桥的接口 一、理论 1.OpenStack (1)概念 OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。由NASA(美国国家航空…...

Python sanic框架钉钉和第三方打卡机实现
同样还是需要开通钉钉应用这里就不错多说了 第一步:梳理逻辑流程 前提:打卡的机器是使用postgres数据库,由于因为某些原因,钉钉userId 我已经提前获取到了存放到数据库里。 1.用户打卡成功后,我们应该监听数据库进行查询…...

微信小程序性能优化
1. 代码包不包含插件大小超过 1.5 M 建议:小程序代码包单个包大小限制为2M。因此我们建议开发者在开发时,如果遇到单包体积大于1.5M的情况,可以采取分包的方式,把部分代码拆分到分包去,降低单个包的体积,提…...

java并发编程六 ReentrantLock,锁的活跃性
多把锁 一间大屋子有两个功能:睡觉、学习,互不相干。 现在小南要学习,小女要睡觉,但如果只用一间屋子(一个对象锁)的话,那么并发度很低 解决方法是准备多个房间(多个对象锁…...

深度学习 | DRNN、BRNN、LSTM、GRU
1、深度循环神经网络 1.1、基本思想 能捕捉数据中更复杂模式并更好地处理长期依赖关系。 深度分层模型比浅层模型更有效率。 Deep RNN比传统RNN表征能力更强。 那么该如何引入深层结构呢? 传统的RNN在每个时间步的迭代都可以分为三个部分: 1.2、三种深层…...

代理模式:中间者的故事
代理模式:中间者的故事 介绍需求分析代理模式代码实现代理模式整理和用途第一种用途第二种用途第三种用途第四种用途 总结 介绍 本文引用《大话设计模式》第七章节的内容进行学习分析,仅供学习使用 需求:小明拜托自己好朋友小王给他朋友小美…...