【python之DRF学习】DRF入门了解
1.【python入门之相关语言了解】---开发语言与其他2.【python入门之pycharm篇】--如何安装pycharm以及如何安装python解释器3.【python工具指南】pycharm相关快捷键---windows+mac合集4.【python入门之pip换源问题】---pip换源的方式5.【python小记】---PE8规范简述6.【python入门之虚拟环境与系统环境】---虚拟环境的创建方式及使用7.【python入门之常量与变量】---常量与变量小记8.【python入门之基本数据类型的学习】---基本数据之数字类型9.【python入门之基本数据类型的学习】---基本数据类型(列表、字符串)【二】10.【python入门之基本数据类型】---基本数据类型(字典、布尔)【三】11.【python入门之基本数据类型】---基本数据类型(元组、集合)【四】12.【python入门之程序与用户交互】---程序与用户交互13.【python入门之基本运算符】---基本运算符14.【python入门之流程控制语句】---流程控制语句15.【python入门之垃圾回收机制】---python 垃圾回收机制16.【python入门之文件操作】---文件操作17.【python入门之文字符编码】---字符编码18.【python基础之可变和不可变数据类型】---python之栈的介绍19.【python基础之可变和不可变数据类型】--- python之堆的介绍20.【python基础之可变和不可变数据类型】--- python堆栈的相关应用21.【python基础之数据类型的内置方法】--- 数据类型的内置方法22.【python入门之深浅拷贝】---python 深浅拷贝23.【python入门之异常处理】---python 异常处理24.【python基础之函数】--- 函数入门25.【python基础之命名空间与作用域】---命名空间与作用域26.【python基础之函数对象和闭包】 --- 函数对象与闭包27.【python基础之装饰器】---装饰器28.【python基础之迭代器】 --- 迭代器29.【python基础之三元表达式】--- 三元表达式30.【python基础之列表生成式】---列表生成式31.【python基础之生成器】---生成器32.【python基础之模块介绍】---模块33.【python基础之包介绍】---包34.【python扩展之软件开发目录规范】---软件开发目录规范35.【python常用模块之OS模块简介】---OS模块36.【python常用模块之random模块简介】---random模块37.【python常用模块之time时间模块】---时间模块(time/datetime)38.【python常用模块之subprocess模块】---subprocess模块39.【python常用模块之sys模块】---系统模块(sys)40.【Python常用模块之logging模块】---日志输出功能(示例代码)41.【python--- ATM+SHOPPING】42.【python基础之面向对象介绍】--- 面向对象43.【python基础之面向对象的绑定方法与非绑定方法】--面向对象的绑定方法与非绑定方法44.【python网络编程相关】 ----操作系统相关了解
45.【python之DRF学习】DRF入门了解
46.【python之DRF学习】三大方法之认证47.【python之接口工具】利用docker-compose搭建Yapi48.【python之DRF学习】drf全局异常49.【python之DRF学习】 drf之接口文档介绍及使用50.【python之DRF学习】drf之jwt使用drf入门
前言:
DRF(Django REST framework)框架是建立在Django框架基础之上,本质上它就是Django的一个App,通过DRF能够快速设计符合RESTful规范的接口,并且它还提供了一些功能。
一、web应用模式
开发web应用中,有两种应用模式:分为前后端不分离与前后端分离两类
1.1分类:
- 前后端不分离: 全栈开发(后端,前端) --->前端html+后端都是一个人写
- 前后端分离:(前后端分离) 前端后端研发分别处理
- 前端研发。----> 写空页面 ----> 没有模版语法, 只要html,css少量js
- 将页面分给后端 --->在其中加模版语法 --->渲染
- 后端写接口
1.2 前后端不分离
例如: BBS项目: render+ajax。 前后端混合开发
django写后端,写了模版语言(django template language)
-模版语法--》对模板(index.html) 渲染---》后端完成--》模版语法的执行在后端执行
-我们后端人员,即写了后端,也写了前端
- 模版语言: dtl
- flask、fastapi
- go gin
- vue react
- 微信小程序
- 模版渲染在后端完成
- vue、微信小程序的渲染是在前端完成
1.3 前后端分离
前后端做各自的事情。
前端:写页面+调用接口请求数据,数据在页面按需展示。
后端:
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页面参数图解
四、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,方便存入数据库。
本文来自博客园,作者:Unfool,转载请注明原文链接:https://www.cnblogs.com/queryH/p/18127351
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!