Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用、路由转换器(复习)
一 Web开发模式
1. 前后端混合开发模式
前后端混合开发模式是一种开发方式,将前端和后端的开发工作结合在一起,以加快项目的开发速度和
提高协作效率。这种模式通常用于快速原型开发、小型项目或敏捷开发中。在前后端混合开发模式中,前端和后端开发人员紧密合作,共同制定项目需求、设计界面和编写代码。
具体来说,这种模式有以下特点:1.交叉开发:前端和后端开发人员在同一时间内并行进行开发,而不是先完成一个部分再进行另一个部分的开发。
2.紧密协作:前端和后端开发人员之间需要密切合作,共同解决问题,制定接口规范,并确保前后端之间的数据交互和功能协调一致。
3.接口规范:在前后端混合开发中,明确的接口规范尤为重要。前端和后端需要约定好数据传输的格式、接口命名和参数等。
4.快速迭代:由于前后端同时进行开发,可以更快地进行迭代和调整,及时响应变化的需求。
5.敏捷开发:这种开发模式适用于敏捷开发流程,可以在项目开发周期内频繁地进行需求变更和更新。然而,前后端混合开发模式也需要注意一些问题,例如接口不稳定可能导致前后端频繁修改,
需要严格的接口文档和版本管理。此外,项目的复杂性和团队的规模也会影响这种开发模式的适用性。
2.前后端分离开发模式
前后端分离开发模式是一种软件开发方式,其中前端和后端的开发工作分开进行,彼此解耦,
通过接口进行数据交互。这种模式旨在提高开发效率、降低耦合度,并允许不同团队专注于各自领域的开发。在前后端分离开发模式中,前端和后端开发人员可以使用不同的编程语言、框架和技术来进行开发。
前端负责构建用户界面、交互和用户体验,后端负责处理业务逻辑、数据库操作和提供数据接口。主要特点包括:
1. **松耦合**:前后端之间通过接口进行数据交互,实现了松耦合的架构,使得前后端团队可以独立开发和更新。
2. **独立开发**:前端和后端可以同时进行开发,不会相互阻塞,从而加快项目的开发进度。
3. **技术多样性**:前端和后端可以选择最适合自己的技术栈,使得团队可以根据需求灵活选择合适的工具。
4. **提高效率**:前端和后端开发人员专注于各自领域的开发,提高了效率和专注度。
5. **维护方便**:由于前后端分离,当需求变更或修复问题时,只需修改相应的模块,不会影响到整个系统。
6. **适合团队合作**:不同团队可以并行开发,有助于团队协作和项目管理。然而,前后端分离也需要注意接口设计的合理性、数据传输的安全性以及接口文档的编写和维护等问题。同时,这种模式对项目的规划和架构设计有一定的要求,以确保前后端之间的协同顺畅。
二 API接口
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,
而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本-api接口:通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介-https://www.baidu.com/books/--->json 格式数据---》接口-https://www.cnblogs.com/liuqingzheng/articles/17400599.html---》返回界面-url和接口的区别:Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点-1.url:长得像返回数据的url链接https://api.map.baidu.com/place/v2/search-2.请求方式:get、post、put、patch、delete采用get方式请求上方接口-3.请求参数:json或xml格式的key-value类型数据ak:6E823f587c95f0148c19993539b99295region:上海query:肯德基output:json-4.响应结果:json或xml格式的数据-https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json-典型的api接口长这样-url地址-有请求方式-携带参数-返回格式是json,xml-前端不同编码格式:-urlencoded: body体中 :username=lqz&password=123 django的request.POST取出值-json: body体中 :{"username":"lqz","password":"123"} django的request.POST取不出值-form-data:body中格式固定:数据部分和文件部分--》request.POST能取出数据,取不出文件,文件都是从'----------------------------789048583058585187025897\r\nContent-Disposition: form-data; name="username"\r\n\r\nlqz\r\n文件二进制-django中的文件对象和原来的文件对象-django:from django.core.files.uploadedfile import InMemoryUploadedFile-原生文件:_io.BufferedWriter-django中文件类没有继承原生文件类,但是有原生文件类所有方法-装饰器模版
def warpper_request(func):def inner( *args, **kwargs):# 在执行被装饰函数前执行res = func(*args, **kwargs)# 在执行被装饰函数后执行return resreturn inner
三 restful规范
1 前后端分离要写接口---》api接口---》接口测试工具postman2 restful规范是什么,如何来的?-一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中 的规范-Roy Fielding的博士论文提出的
3 以后写接口,大致都要遵循一个规范,restful规范---》10条--》-1 数据的安全保障-》url链接一般都采用https协议进行传输--》它比http安全-2 接口特征表现--》url中带api标识-https://api.baidu.com/books/-https://www.baidu.com/api/books/-3 多数据版本共存--》url中带版本信息https://api.baidu.com/v1/bookshttps://www.baidu.com/api/v2/books-4 数据即是资源,均使用名词(可复数)-->前后台交互,交互的数据称之为资源-数据即资源,前后端交互的数据称之为资源,url尽量使用名字-https://127.0.0.1/api/v1/books/ -->表示对图书操作:增加,删除,查询,修改,都用这一个地址-https://127.0.0.1/api/v1/get_all_books/ # 不符合restful规范-https://127.0.0.1/api/v1/delete_books/# 不符合restful规范-5 资源操作由请求方式决定-get 请求获取数据(获取所有,获取单条)-post 新增数据-put 修改数据-delete 删除数据https://api.baidu.com/books - get请求:获取所有书https://api.baidu.com/books/1 - get请求:获取主键为1的书https://api.baidu.com/books - post请求:新增一本书书https://api.baidu.com/books/1 - put请求:整体修改主键为1的书https://api.baidu.com/books/1 - delete请求:删除主键为1的书-6 请求地址中带过滤条件---》只针对于搜索所有接口https://api.example.com/v1/zoos?limit=10:指定返回记录的数量https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件-7 响应状态码(两层)-http响应状态码: 1xx,2xx,3xx,4xx,5xx:https://www.sohu.com/a/278045231_120014184-404和403 和 405-301和302-1xx表示请求正在处理---》前端一般看不到-2xx 表示请求处理成功--》经常看到-201和200有什么区别-3xx:重定向-4xx:客户端错误-5xx:服务端出错-成功都返回200,而在响应体中带 状态码--->code不同公司就不一样{"code": 101,"msg": "用户名或密码错误"}-补充一:mysql 错误操作都会有个 数字(10060) 文字解释-补充二:-https://open.weibo.com/wiki/Error_code-8 响应中带错误信息{"code": 101,"msg": "用户名或密码错误"}-9 不同操作,返回格式符合如下标准GET /collection:返回资源对象的列表(数组)# [{name:西游记,price:19},{name:三国,price:19}]GET /collection/resource:返回单个资源对象 # {name:三国,price:19}POST /collection:返回新生成的资源对象# {name:三国,price:19}PUT /collection/resource:返回完整的资源对象# {name:三国演绎,price:19}DELETE /collection/resource:返回一个空文档# ---》大家都这么做{code:100msg:查询成功restult:[{name:西游记,price:19},{name:三国,price:19}]}-10 响应中带链接Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
{"status": 0,"msg": "ok","results":[{"name":"肯德基(罗餐厅)","img": "https://image.baidu.com/kfc/001.png"}...]
}
四 序列化和反序列化
序列化: 数据转换格式
序列化分两个阶段:-序列化:把我们识别的数据转换成指定的格式提供给别人-反序列化:把别人提供的数据转换/还原成我们需要的格式序列化: 把我们识别的数据转换成指定的格式提供给别人。例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,
所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。反序列化:把别人提供的数据转换/还原成我们需要的格式。例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,
这样我们才能把数据保存到数据库中
五 drf安装和快速使用
基于django编写符合restful规范的接口了假设以 Book 表为例,写它的5个接口-1 查询所有-2 新增一条-3 修改一条-4 删除一条-5 查询一条以下是使用原生django编写:
########### book的接口写成CBV更好, 先用原生Django写
'''http://127.0.0.1/books/ get查询所有http://127.0.0.1/books/ post新增一条http://127.0.0.1/books/id put新增一条http://127.0.0.1/books/id delete新增一条http://127.0.0.1/books/id get查询一条'''from django.views import View
from .models import Bookclass BookView(View):def get(self, request):books = Book.objects.all() # 查询出来的是queryset对象,不是列表books_list = []for item in books:books_list.append({'name': item.name, 'price': item.price})res = {'code': 200, 'msg': '查询成功', 'data': books_list}return JsonResponse(res)def post(self, request): # 新增一条数据name = request.POST.get('name')price = request.POST.get('price')if name and price:Book.objects.create(name=name, price=price)res = {'code': 200, 'msg': '数据添加成功'}else:res = {'code': 400, 'msg': '数据添加失败,请认真核对参数'}return JsonResponse(res)class BookDetailView(View):def put(self, request, pk):int_data_dict = json.loads(request.body)name = int_data_dict.get('name')price = int_data_dict.get('price')book = Book.objects.get(pk=pk)book.name = namebook.price = pricebook.save()return JsonResponse({'code': 100, 'msg': '查询成功', 'data': {'name': book.name, 'price': book.price}})def get(self, request, pk):book_obj = Book.objects.filter(pk=pk).first()if book_obj:res = {'code': 200, 'msg': f'图书id为{book_obj.pk}的数据查询成功','data': {'name': book_obj.name, 'price': book_obj.price}}else:res = {'code': 1006, 'msg': '暂无你查询的数据'}return JsonResponse(res)def delete(self, request, pk):book = Book.objects.filter(pk=pk).first()if book:book.delete()res = {'code': 200, 'msg': f'图书id为{pk}的数据查询删除成功'}else:res = {'code': 1007, 'msg': '你要删除的数据不存在'}return JsonResponse(res)注意:djangorestframework: drf, django的一个第三app---》方便我们快速实现符合restful规范的接口*****drf快速写接口**********
使用步骤:1 安装模块1 django 是2版本,用不了drf最新(适当降版本),他会卸载django---》装最新4.x2 djagno 3.1.12 可以使用drf最新 -django:3.1.12-drf:3.14.02 在app中注册INSTALLED_APPS = ['rest_framework', # 一定不要忘了加 ,]3 写路由from rest_framework.routers import DefaultRouterrouter = DefaultRouter()router.register('books', BookView, 'books')urlpatterns += router.urls4 写视图类from rest_framework.viewsets import ModelViewSetfrom .serializer import BookSerializerclass BookView(ModelViewSet):queryset = Book.objects.all()serializer_class = BookSerializer5 写序列化类class BookSerializer(serializers.ModelSerializer):class Meta:model = Bookfields = "__all__"
表
class User(models.Model):# char是定长,varchar是可变长username = models.CharField(max_length=32)password = models.CharField(max_length=32)class Book(models.Model):name = models.CharField(max_length=64)price = models.IntegerField()
五 路由转换器
转换器:# str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式# int,匹配正整数,包含0。# slug,匹配字母、数字以及横杠、下划线组成的字符串。# uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。# path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)path('books/<int: pk>', BookView.as_view()),
相关文章:
Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用、路由转换器(复习)
一 Web开发模式 1. 前后端混合开发模式 前后端混合开发模式是一种开发方式,将前端和后端的开发工作结合在一起,以加快项目的开发速度和 提高协作效率。这种模式通常用于快速原型开发、小型项目或敏捷开发中。在前后端混合开发模式中,前端和…...
<AMBA总线篇> AXI总线协议介绍
目录 01 AXI协议简介 AXI协议特性 AXI协议传输特性 02 AXI协议架构 AXI协议架构 write transaction(写传输) read tramsaction(读传输) Interface and interconnect 典型的AXI系统拓扑 03 文章总结 大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程…...
一个简单的Python网络爬虫教程
网络爬虫是一种自动获取网页内容的程序,它可以从互联网上的网站中提取数据并进行分析。本教程将带您逐步了解如何使用 Python 构建一个简单的网络爬虫。 注意:在进行网络爬虫时,请遵守网站的使用条款和法律法规,避免对目标网站造…...
YARN资源管理框架论述
一、简介 为了实现一个Hadoop集群的集群共享、可伸缩性和可靠性,并消除早期MapReduce框架中的JobTracker性能瓶颈,开源社区引入了统一的资源管理框架YARN。 YARN是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离&…...
Unity查找资源依赖关系
这个方法主要是发现资源乱用的情况,对应的逻辑可能要改一个才能用到自己的项目里面 [MenuItem("Tools/Prefab/查找选中资源依赖关系", false, 0)] public static void FindDependencies() { foreach (var guid in Selection.assetGUIDs…...
【操作系统】聊聊局部性原理是如何提升性能的
对于目前数据主导的系统,大多数都是Java/Go 技术栈MySQL,但是随着时间的推移,数据库数据的数据量过多,并且会频繁访问热点数据,为了提升系统的性能,一般都是加入缓存中间件、Redis。 局部性原理 我们知道…...
多线程应用——单例模式
单例模式 文章目录 单例模式一.什么是单例模式二.如何实现1.口头实现2.利用语法特性 三.实现方式(饿汉式懒汉式)1.饿汉式2.懒汉式3.线程安全的单例模式4.双重检查锁5.禁止指令重排序 一.什么是单例模式 单例模式(Singleton Patternÿ…...
几种在JavaScript中创建对象的方式!
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 字面量方式⭐ 构造函数方式⭐ Object.create()方式⭐ 工厂函数方式⭐ ES6类方式⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门…...
java项目mysql转postgresql
特殊函数 : mysql: find_in_set(?, ancestors) postgresql: ? ANY (string_to_array(ancestors,,)) mysql: date_format(t1.oper_time, %Y-%m-%d) postgresql: rksj::date to_char(inDate,YYYY-MM-DD) mysql&am…...
SpringBoot Mybatis 多数据源 MySQL+Oracle
一、背景 在SpringBoot Mybatis 项目中,需要连接 多个数据源,连接多个数据库,需要连接一个MySQL数据库和一个Oracle数据库 二、依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot</groupId&…...
(笔记五)利用opencv进行图像几何转换
参考网站:https://docs.opencv.org/4.1.1/da/d6e/tutorial_py_geometric_transformations.html (1)读取原始图像和标记图像 import cv2 as cv import numpy as np from matplotlib import pyplot as pltpath r"D:\data\flower.jpg&qu…...
【Flutter】Flutter 使用 fluttertoast 实现显示 Toast 消息
【Flutter】Flutter 使用 fluttertoast 实现显示 Toast 消息 文章目录 一、前言二、安装和基础使用三、不同平台的支持情况四、如何自定义 Toast五、在实际业务中的应用六、完整的业务代码示例(基于 Web 端)七、总结 一、前言 在这篇文章中,…...
nowcoder NC236题 最大差值
目录 题目描述: 示例1 示例2 题干解析: 暴力求解: 代码展示: 优化: 代码展示: 题目跳转https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204?tpId128&tqId33768&ru/exa…...
TCP/IP五层模型、封装和分用
1.网络通信基础2.协议分层OSI七层协议模型TCP/IP五层/四层协议模型【重点】 3. 封装&分用 1.网络通信基础 IP地址:表示计算机的位置,分源IP和目标IP;举个例子:买快递,商家从上海发货,上海就是源IP&…...
LeetCode 面试题 01.08. 零矩阵
文章目录 一、题目二、C# 题解 一、题目 编写一种算法,若M N矩阵中某个元素为0,则将其所在的行与列清零。 点击此处跳转题目。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示…...
Qt应用开发(基础篇)——进度条 QProgressBar
一、前言 QProgressBar类继承于QWidget,是一个提供了横向或者纵向进度条的小部件。 QProgressBar进度条一般用来显示用户某操作的进度,比如烧录、导入、导出、下发、上传、加载等这些需要耗时和分包的概念,让用户知道程序还在正常的执行中。 …...
108页石油石化5G智慧炼化厂整体方案PPT
导读:原文《108页石油石化5G智慧炼化厂整体方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。以下是部分内容,...
Codeforces 1625E2 括号树 + BIT
题意 传送门 Codeforces 1625E2 Cats on the Upgrade (hard version) 题解 首先利用栈将原始字符串转换为合法的 RBS,不能匹配的括号设为 ‘.’。根据匹配的括号序列构造树,具体而言,遇到左括号,则新建节点向下递归,…...
PHP命令行CLI的使用
PHP命令行界面 PHP命令行界面(CLI)是一种使用命令行(终端)来运行PHP脚本的方式,与在Web服务器环境下运行PHP不同。CLI提供了一种与操作系统交互的方式,能够在命令行中直接执行PHP代码。 以下是一些与PHP命…...
近期嵌软线下笔试题记录
1、以下代码的输出结果是? #include <stdio.h> #include <string.h>int main() {int a,b,c,d;a 10;b a; //a先赋值给b,然后自增1c a; //a自增1后赋值给cd 10*a; //先进行运算然后a自增1printf("b,c,d:%d…...
基于MYSQL的主从同步和读写分离
目录 一.完成MySQL主从同步(一主两从) 1.主库配置 2.建立同步账号 3.锁表设置只读 4.备份数据库数据 5.主库备份数据上传到从库 6.从库上还原备份 7.解锁 8.从库上设定主从同步 9.启动从库同步开关 10.检查状态 二.基于MySQL一主两从配置&…...
java八股文面试[多线程]——合适的线程数是多少
知识来源: 【并发与线程】 合适的线程数量是多少?CPU 核心数和线程数的关系?_哔哩哔哩_bilibili 【2023年面试】程序开多少线程合适_哔哩哔哩_bilibili...
Linux系统下vim常用命令
一、基础命令: v:可视模式 i:插入模式 esc:命令模式下 :q :退出 :wq :保存并退出 ZZ:保存并退出 :q! :不保存并强制退出二、在Esc下: dd : 删除当前行 yy:复制当前行 p:复制已粘贴的文本 u:撤销上一步 U:…...
【2023】LeetCode HOT 100——链表
目录 1. 相交链表1.1 C++实现1.2 Python实现1.3 时空分析2. 反转链表2.1 C++实现2.2 Python实现2.3 时空分析3. 回文链表3.1 C++实现3.2 Python实现3.3 时空分析4. 环形链表4.1 C++实现4.2 Python实现4.3 时空分析5. 环形链表 II5.1 C++实现5.2 Python实现...
智能井盖传感器,物联网智能井盖系统
随着城市人口的不断增加和城市化进程的不断推进,城市基础设施的安全和可靠性变得愈发重要,城市窨井盖作为城市基础设施重要组成部分之一,其安全性事关城市安全有序运行和居民生产生活安全保障。 近年来,各地都在加强城市窨井盖治理…...
C语言三子棋解析
目录(标2的是我自己写的一堆问题不知道怎么改) 开始菜单1打印棋盘1玩家下棋1电脑下棋1判断输赢1开始菜单2打印棋盘2选择先后2玩家下棋2电脑下棋2判断输赢2完整代码文件else.h文件else.c文件test.c 开始菜单1 void menu()//打印菜单 {printf("*****…...
【Jenkins打包服务,Dockerfile报错:manifest for java : 8 not fourd】
1、问题描述 Jenkins打包服务运行dockerfile里的FROM java:8报错manifest for java : 8 not fourd Caused by: com.spotify. docker.client.exceptions.DockerException: manifest for java:8 not found2、解决方法 在网上查找许多方法后得出这是由于Docker官方已经弃用java…...
读SQL学习指南(第3版)笔记06_连接和集合
1. 连接 1.1. 笛卡儿积 1.1.1. 交叉连接(cross join) 1.1.2. 查询并没有指定两个数据表应该如何连接,数据库服务器就生成了笛卡儿积 1.1.2.1. 两个数据表的所有排列组合 1.1.3. 很少会用到(至少不会特意用到) 1.…...
C#学习,结构,面向对象,类
结构和类 结构是从过程化程序设计中保留下来的一种数据类型,类则是面向对象程序设计中最基本的、也是最重要的概念。 结构 结构是一种值类型,通常用来封装一组相关的变量,结构中可以包含构造函数、变量、字段、方法、属性、运算符、事件和…...
【PHP】文件操作
文章目录 文件编程的必要性目录操作其它目录操作递归遍历目录PHP5常见文件操作函数PHP4常见文件操作函数其他文件操作函数 文件编程的必要性 文件编程指利用PHP代码针对文件(文件夹)进行增删改查操作。 在实际开发项目中,会有很多内容&…...
科创板50ETF期权交易:详细规则、费用、保证金和开户攻略
科创板50ETF期权是指以科创板50ETF为标的资产的期权合约。科创板50ETF是由交易所推出的一种交易型开放式指数基金(ETF),旨在跟踪科创板50指数的表现,下文介绍科创板50ETF期权交易:详细规则、费用、保证金和开户攻略&am…...
怎么把图片放大并且清晰?有详细的方法步骤
怎么把图片放大并且清晰?数字图像处理中的图片放大是许多行业和领域中广泛应用的一项技术。常规的放大方法通过插值或复制像素的方式增加像素数,但这会导致失真和模糊。无损放大是一种特殊的放大方法,它可以通过数学算法来增加图片的尺寸&…...
C++ 构造函数、析构函数调用虚函数
C虚函数是通过虚表实现的,虚函数的地址记录在需表中,只对象完成构造完成后,虚函数的地址才最终确定。 构造函数中调用虚函数 基类先于派生类构造,所以构造时没法调用到派生类的虚函数,也就是说只能调用到自己&#x…...
工业状态监测如何选择合适的无线技术?
工业领域的状态监测在提高生产效率和产品质量方面起着关键作用。过去依赖于预防性维护和例行检查的方式已经不再能满足日益复杂的生产需求,随着工业物联网(IIoT)的兴起,设备状态监测逐渐成为一种关键策略,催生了预测性…...
Mysql45讲学习笔记
前言:这篇文章主要总结事务,锁、索引的一些知识点,然后分享一下自己学习小心得,我会从点到线在到面展开说说,对于学习任何知识,我们都应该藐其全貌,不要一开始就选入细节 基础 一、基础架构&a…...
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
报错描述 情景一 1Panel在"主机-->进程守护"通过命令"nohup /opt/tomcat/bin/startup.sh > /opt/supersivor/tomcat/nohup.log &"创建守护进程,运行日志如下: #--------------------------------------------------------…...
opencv 水果识别+UI界面识别系统,可训练自定义的水果数据集
目录 一、实现和完整UI视频效果展示 主界面: 测试图片结果界面: 自定义图片结果界面: 二、原理介绍: 图像预处理 HOG特征提取算法 数据准备 SVM支持向量机算法 预测和评估 完整演示视频: 完整代码链接 一、…...
TypeScript数组和对象的操作
TypeScript数组和对象的操作 一、数组的声明二、数组初始化三、数组元素赋值、添加、更改四、删除五、合并、断开数组六、查找数组元素七、连接数组元素八、排序、反序数组九、遍历数组,对象 一、数组的声明 let arr1: Array<number>; let arr2: number[];二…...
docker之Compose与DockerSwarm
目录 Compose 简介 概念 为什么需要? 配置字段 常用命令 安装 1.下载 2.授权 使用 1.创建文件 2.启动 docker Swarm 关键概念 调度策略 spread binpack random 特性 集群部署 1.准备 2.创建swarm并添加节点 在主服务器上创建swarm集群 节点…...
VS Code 使用 clang++ 编译,使用 cppvsdbg 或 lldb 调试的配置方法
需要安装的 VS Code LLVM VS Code 需要安装的插件: C/C(用来配置 c_cpp_properties.json) CodeLLDB(如果你要用 lldb 调试,那么这个插件就需要安装,用来连接到 lldb 调试器) 流程 我们都…...
android11,12 Launcher3编译什么
1首先看看手机里的是什么 adb shell pm path com.android.launcher3 package:/system_ext/priv-app/Launcher3QuickStep/Launcher3QuickStep.apk 然后就编译Launcher3QuickStep 2push apk 没什么说的,push到对应的文件夹 /system_ext/priv-app/Launcher3Quick…...
Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结
Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结。 01 前言 在使用 Go 语言进行 Web 开发时,我们往往会选择一些优秀的库来简化 HTTP 请求的处理。其中,go-resty 是一个被广泛使用的 HTTP 客户端。…...
【C语言】#define 宏定义初步使用
使用宏定义可以防止出错,提高可移植性,可读性,方便性等。 下面列举了一些成熟软件中常用的宏定义。 重新定义一些基本类型 重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便…...
项目里面怎么解决跨域的?
一.前端配置跨域 proxy解决跨域 在vue.config.js中通过proxy devServer中配置反向代理。 devServer: {port: port,open: true,overlay: {warnings: false,errors: true},// 配置反向代理proxy: {// 当地址中有/api的时候会触发代理机制/api: {target: http://ihrm-java.ithe…...
Oracle 批量导出表注释和主键
–查询分表(目前分了16张表) –先查询注释为空的表,也就是11表做示例,统计出来以后11批量修改成1 select owner,column_name,comments,table_name from all_col_comments a where a.table_name like ‘TB%1’ and a.comments is n…...
Linux C++ 海康摄像头获取过车信息
代码 void CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void *pUser) {printf("enter MessageCallback---------------------->\n");int i;NET_DVR_ALARMINFO_V30 struAlarmInfo;memcpy(&struAl…...
iOS逆向:越狱及相关概念的介绍
在上一篇内容中我们介绍了App脱壳的技术,今天我们来介绍一个和iOS逆向密切相关的知识:越狱。 iOS操作系统的封闭性一直是开发者们关注的焦点之一。为了突破Apple的限制,越狱技术应运而生。本文将深入探讨iOS越狱,包括可越狱的版本…...
SQL语法与DDL语句的使用
文章目录 前言一、SQL通用语法二、DDL语句1、DDL功能介绍2、DDL语句对数据库操作(1)查询所有数据库(2)查询当前数据库(3)创建数据库(4)删除数据库(5)切换数据…...
Node.js /webpack DAY6
一、Node.js 入门 1. 什么是 Node.js? 2. 什么是前端工程化? 3. Node.js 为何能执行 JS? 4. Node.js 安装 5. 使用 Node.js 总结 6. fs 模块 - 读写文件 /*** 目标:基于 fs 模块 读写文件内容* 1. 加载 fs 模块对象* 2. 写入文件…...
Java:SpringBoot使用AES对JSON数据加密和解密
目录 1、加密解密原理2、项目示例2.1、项目结构2.2、常规业务代码2.3、加密的实现 2.4、接口测试2.5、总结 1、加密解密原理 客户端和服务端都可以加密和解密,使用base64进行网络传输 加密方 字符串 -> AES加密 -> base64解密方 base64 -> AES解密 -&g…...