Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用

news2025/1/17 1:31:59

一 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:6E823f587c95f0148c19993539b99295
        region:上海
        query:肯德基
        output:json
    -4.响应结果:json或xml格式的数据
    	-https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=%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 res
    return inner

三 restful规范

1 前后端分离要写接口---》api接口---》接口测试工具postman

2 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/books
		https://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
    	-404403405
        -301302
        -1xx表示请求正在处理---》前端一般看不到
        -2xx 表示请求处理成功--》经常看到
        	-201200有什么区别
        -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:100
        msg:查询成功
        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编写:
注意:djangorestframework: drf, django的一个第三app---》方便我们快速实现符合restful规范的接口
使用步骤:
	1 安装模块
    	1 django 是2版本,用不了drf最新(适当降版本),他会卸载django---》装最新4.x
        2 djagno 3.1.12 可以使用drf最新	
        	-django:3.1.12
            -drf:3.14.0
                
    2 在app中注册
        INSTALLED_APPS = [
            'rest_framework',  # 一定不要忘了加  ,
        ]
    	
    3 写路由
    from rest_framework.routers import DefaultRouter
    router = DefaultRouter()
    router.register('books', BookView, 'books')
    
    urlpatterns += router.urls
    4 写视图类
    from rest_framework.viewsets import ModelViewSet
    from .serializer import BookSerializer
    class BookView(ModelViewSet):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
    5 写序列化类
    class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = "__all__"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MyBatis】自定义resultMap三种映射关系

目录 一、一对一映射(One-to-One) 1.1 表关系 1.2 resultMap设置自定义映射 二、一对多映射(One-to-Many) 2.1 创建实体 2.2 级联方式处理映射关系 2.3 定义SQL 2.4 OrderMapper接口 2.5 编写业务逻辑层 2.6 Junit测试…

港联证券:游资爆炒中电环保,还有谁在蹭核污染防治概念?

8月28日,核污染防治概念股持续大涨,建工修复(300958.SZ)、捷强配备(300875.SZ)、东方园林(002310.SZ)、华盛昌(002980.SZ)等涨停。 中小市值的概念股成为游资…

人工智能学习专栏

这个专栏就专门用来记录自己的深度学习的历程吧。从做MCU开始、Soc、Linux系统转行到AI领域,其过程是痛苦的。至少数学这块,那是花了很多时间去从头去学。但是还是有很多不懂的地方。坚持!!!!

03 最长连续序列

最长连续序列 题解 哈希(O(n)) 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 题解 哈希(O(n)) class Solution { public:int long…

升级iOS17后iPhone无法连接App Store怎么办?

最近很多用户反馈,升级最新iOS 17系统后打开App Store提示"无法连接",无法正常打开下载APP。 为什么升级后无法连接到App Store?可能是以下问题导致: 1.网络问题导致App Store无法正常打开 2.网络设置问题 3.App Sto…

微信报修系统有什么优势?怎么提升企业维修工作效率与管理水平?

随着智能化时代的到来,企业、事业单位的现代化设备数量和种类不断增加,原本繁琐的报修、填写记录、检修管理等工作得以简化。从发起报修到维修,以及维修之后给予评价的整个过程,通过手机微信报修系统均能看到,既省时又…

算法---二叉树中的最大路径和

题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root &…

IC698CRE040 GE 实现跨多个UPS设备的随处可见性

IC698CRE040 GE 实现跨多个UPS设备的随处可见性 通过人工智能、digital twin技术、由高级分析支持的人类洞察力以及独立于供应商的工业软件,效率和敏捷性正在发生巨大变化。施耐德电气通过为未来打造的弹性和可持续解决方案实现下一代工业自动化。 EcoStruxure自…

出现ZooKeeper JMX enabled by default这种错误的解决方法

系列文章专栏 学习以来遇到的bug/问题专栏 文章目录 系列文章专栏 前言 一 问题描述 二 解决方法 2.1 可能的原因分析 2.2 小编的问题解决方法 First:检查/etc/profile里面zookeeper的环境变量配置 Second:检查 zookeeper/conf/zoo.cfg里面的d…

拆解即时通讯行销,如何提升讯息开启率达300%?

图片来源:SaleSmartly官网 科技日新月异,今时今日商家均转战网络世界,开设网店售卖产品或服务,不少人都会转用即时通讯(Instant Messaging,简称IM)软件来和客户联络和宣传,因为即时通…

Unity3D 如何在ECS架构下,用Unity引擎进行游戏开发详解

前言 Unity3D是一款强大的游戏引擎,它提供了丰富的功能和工具,可以帮助开发者快速构建高质量的游戏。而Entity Component System(ECS)是Unity3D中一种新的架构模式,它可以提高游戏的性能和可扩展性。本文将详细介绍在…

自动化运维:Ansible脚本之playbook剧本

目录 一、理论 1.playbooks 2.YAML 3.使用ansible批量安装apache服务 4.定义、引用变量 5.指定远程主机sudo切换用户 6.when条件判断 7.迭代 8.Templates 模块 9.tags 模块 10.Roles 模块 二、实验 1.使用ansible批量安装apache服务 2.定义、引用变量…

S型曲线规划

s #include "stdio.h"typedef struct S_CTRL{ #define SSPD_BUF_LEN 100struct{float aMax;float aMin;float vMax;float J;/* 加加速度 */int t[7];int T[7];int tMax;}in;struct{float accBuf[SSPD_BUF_LEN];float decBuf[SSPD_BUF_LEN];long S[7];long V[7];}o…

电商API接口的研发和应用!

API(Application Programming Interface,应用程序编程接口)指的是为不同的软件应用程序提供编程接口的一组协议、规则以及工具的集合,以便它们能够互相交互,实现数据通信和功能调用。API已成为了现代软件开发和商业应用…

Linux系统部署部署excalidraw-cn白板工具

Linux系统部署部署excalidraw-cn白板工具 一、excalidraw-cn介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 Yarn介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统是否安装yarn 四、部署Node.js 环境4.1 下载Node.js安装包4.2 解压N…

Docker技术--Docker中的网络问题

1.docker中的网络通信 如果想要弄清楚docker中的网络通信问题,其实需要弄清楚这几个问题就可以:容器与容器之间的通信、容器与外部网络之间的通信、外部网络与容器之间的通信。 -a:容器与容器之间的通信,如下所示: 在默认情况下,docker使用网桥(Bridge模式)与NAT通信。这…

Java监听mysql的binlog 报错解决办法

报错:com.github.shyiko.mysql.binlog.network.AuthenticationException: Client does not support authentication protocol requested by server; consider upgrading MySQL client 解决方案:在mysql中执行以下命令 alter user rootlocalhost identi…

JS将对象转为字符串

使用JSON.stringify()将对象转换为字符串 var person {name: Jack,age: 27 }console.log("person:"); console.log(person);var result JSON.stringify(person);console.log("result:"); console.log(result); console.log(&qu…

3D模型轻量化引擎HOOPS平台助力3D开发实现大模型轻量化渲染、3D模型格式转换!

一、包含的软件开发工具包 HOOPS Web平台帮助开发人员构建基于Web的工程应用程序,提供高级3D Web可视化、准确快速的CAD数据访问和3D数据发布。 HOOPS Web平台包括三个集成软件开发工具包 (SDK): (1)Web端3D可视化引擎 HOOPSCom…

python的csv库:保存数字仅有15位,精度丢失的解决办法

废话不多说, 如果在字符串后添加制表符‘/t’能够解决问题,那么这确实是一个有效的解决方案。制表符‘/t’在CSV文件中可以被视为分隔符,确保数据不会被自动格式化或截断。 import csvdata [#15位数字["123456789012345"],#16位数…