【python之DRF学习】DRF入门了解

drf入门

前言:

	DRF(Django REST framework)框架是建立在Django框架基础之上,本质上它就是Django的一个App,通过DRF能够快速设计符合RESTful规范的接口,并且它还提供了一些功能。

一、web应用模式

开发web应用中,有两种应用模式:分为前后端不分离与前后端分离两类

1.1分类:

- 前后端不分离: 全栈开发(后端,前端) --->前端html+后端都是一个人写

- 前后端分离:(前后端分离) 前端后端研发分别处理
    -	前端研发。----> 写空页面 ----> 没有模版语法, 只要html,css少量js
    - 将页面分给后端 --->在其中加模版语法 --->渲染
 		-	后端写接口

1.2 前后端不分离

image

例如: BBS项目: render+ajax。  前后端混合开发
	django写后端,写了模版语言(django template language)
    -模版语法--》对模板(index.html) 渲染---》后端完成--》模版语法的执行在后端执行
    -我们后端人员,即写了后端,也写了前端
    
    - 模版语言: dtl
            - flask、fastapi
            - go gin
            - vue react		
            - 微信小程序
    - 模版渲染在后端完成
  	- vue、微信小程序的渲染是在前端完成
    

1.3 前后端分离

image

前后端做各自的事情。
前端:写页面+调用接口请求数据,数据在页面按需展示。
后端:
1.写接口,处理数据库。把数据序列化后按需返回给前端。
2.django中,查数据库得到是queryset,这就需要后端把数据序列化处理后,再返回给前端。
3.django中,数据校验Form、ModelForm,适合前后端不分离,不适合前后端分离。

目前主流网站都是使用当前模式
	- web,桌面应用,移动端app,ios,小程序 --->都可以使用同一套后端  

二、API接口

2.1 api接口是什么

# 
	 	- 规定了前后端信息交互规则的url链接,也就是前后端信息交互的媒介
  		例如:127.0.0.1:8080/login/

为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。

通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介  

2.2 api接口四大特点

Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点
	·1 url:url链接
  ·2 请求方式: get post put delete
  ·3 请求参数: json或xml格式的key-value类型数据。	
  		·地址栏中的参数:如127.0.0.1:8000/index?name=xx&age=20  
    	·请求体中: 编码格式
  ·4 响应结果: json或xml格式的数据

三、接口测试工具-Postman

# 什么是postman
  Postman是一款接口调试工具,是一款免费的可视化软件,同时支持各种操作系统平台,是测试接口的首选工具。
  简单来说就是一个能够模拟发送http请求的软件
  
# postman: 发送http请求软件

# Apifox = Postman + Swagger(接口文档) + Mock(假数据) + JMeter(压测工具)

# postman的使用:跨平台 mac win linux 

# 下载和安装
	-https://www.postman.com/
    -双击:Postman-win64-Setup.exe  下载后的软件
    
# 安装并打开

3.1 postman页面参数图解

image

image

四、Restful规范(重要-概念)

注:目前市面上主流接口规范2种:restful、RPC。

4.1 Restful是什么?

 ·REST全城是Representational State Transfer,也叫表征性状态转移
 ·首次出现在2000年RoyFielding的博士论文中。
 ·RESTful是一种定义Web AP接口的设计风格,尤其适用于前后端分离的应用模式中。
 ·这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。
 ·事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。

4.2 有哪些规范 --10条

1、数据的安全保障:url链接一般都采用https协议进行传输

-https是:http+ssl 安全的超文本传输协议 

2、接口特征表现

在API地址中带接口标识,   一般可以理解在地址栏中(放在域名)
  		例如: https://api.baidu.com	
    				https://www.baidu.com/api
      注: 看到api字眼,就代表请求url链接是完成前后端数据交互的

3、多版本共存:在url链接中带版本标识

-https://api.weibo.com/2/
-https://api.weibo.com/v2/
-https://api.weibo.com/?version=2
-https://api.weibo.com/v1/login  --->需要的参数name和pwd
-https://api.weibo.com/v2/login --->需要的参数name和pwd和code

4、数据即是资源,均使用名词(可复数)

完成前后端交互的数据称之为资源
· 资源名都是名词,尽量避免使用动词
·https://127.0.0.1/api/v1/users
·https://127.0.0.1/api/v1/get_users  # 不符合规范

5、资源操作由请求方式决定(method)

o 操作资源一般都会涉及到增删改查,我们提供请求方式来标识增删改查动作
o https://api.baidu.com/books 		- get请求:获取所有书
o https://api.baidu.com/books/1		- get请求:获取主键为1的书
o https://api.baidu.com/books 		- post请求:新增一本书书
o https://api.baidu.com/books/1		- put请求:整体修改主键为1的书
o https://api.baidu.com/books/1		- patch清求:局部修改主鍵1的
o https://api.baidu.com/books/1		- delete请求:删除主键为1

6、url中带搜索或过滤条件

https://api.example.com/v1/zoos?name=猴子 get请求   向地址中发起请求获取名字带有猴子的数据

7、响应状态码:响应中带状态码

-http响应状态码:1xx,2xx,3xx,4xx,5xx
  -状态码自定制(用的多): 100成功,看公司需求自定制
      错误代码	错误信息	详细描述
      10001	System error	系统错误
      10002	Service unavailable	服务暂停
      10003	Remote service error	远程服务错误
      10004	IP limit	IP限制不能请求该资源
      10005	Permission denied, need a high level appkey	该资源需要appkey拥有授权

8、错误处理

错误处理,应返回错误信息,error当做key
  {code:100,msg:成功}
"Message": "send success",

9、返回结果

返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范
	GET /collection:返回资源对象的列表(数组)       [{name:xx,age:19},{name:xx,age:19},{}]
  GET /collection/resource:返回单个资源对象        {name:xx,age:19}
  POST /collection:返回新生成的资源对象             {name:yy,age:19}
  PUT /collection/resource:返回完整的资源对象       {name:xx,age:20}
  PATCH /collection/resource:返回完整的资源对象     {name:xx,age:20}
  DELETE /collection/resource:返回一个空文档 

10、需要url请求的资源需要访问资源的请求链接

    	"url": "http://blog.sina.com.cn/zaku",
    
          # Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
    {
        "status": 0,
        "msg": "ok",
        "results":[
            {
                "name":"肯德基(罗餐厅)",
                "img": "https://image.baidu.com/kfc/001.png"
            }
            ...
        ]
    }

五、drf核心功能-序列化和反序列化

介绍序列化与反序列化

# 序列化: 把能识别的数据结构(python字典、列表、对象) --->转换成其他语言(程序)能识别的数据结构
		- python字典,列表,对象 ----> json格式字符串(也可以是别的格式)
  	- 前后端交互,目前通常使用json格式字符串交互
    - 前后端分离模式中:主要指的是
    	- 前端发送请求获取数据---》后端去数据库查询---》QuerySet对象---》转成json格式字符串---》返回给前端这个过程,称之为序列化
      
 # 反序列化: 把其他程序(语言)给我们的数据 --->转换成能识别的数据结构
		- 前端给我们json格式数据  ---》转换成 字典,列表,对象
    - 前端给 name=lqz&age=19 格式数据 ---》转换成 字典,列表,对象
    - 前后端分离模式中:主要指的是
        - 前端携带json格式数据到后端----》后端拿到json格式数据---》把数据转成对象保存到数据库这个过程,咱们称之为反序列化
      
# js 把对象序列化为字符串【JSON.stringify()】,把字符串反序列化为对象【JSON.parse()】

快捷理解:

api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

序列化: 把我们识别的数据转换成指定的格式提供给别人。

例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。

反序列化:把别人提供的数据转换/还原成我们需要的格式。

例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中

针对drf序列化与反序列化:

drf序列化:把查数据库得到是queryset,方便快捷地转化为json等,返回给前端。
drf反序列化:把前端传递过来的数据,方便快捷地转化为queryset,方便存入数据库。
posted @   Unfool  阅读(90)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示