drf-drf入门规范
一 Web开发模式
前后端混合开发模式:
- 前端写模板,后端处理完数据再渲染后再传给前端展示效果
前后端分离开发模式:
- 前端发送请求把数据传给后端,后端查询数据处理完以json格式返回给前端,前端渲染完展示页面
二 API接口
API四大特点
# api接口:通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
https://www.baidu.com/books/--->json 格式数据/xml格式---》接口
json格式:{''}字符串
xml格式:HTML
# Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点
1 url:长得像返回数据的url链接
https://api.map.baidu.com/place/v2/search
2 请求方式:get、post、put、patch、delete
3 请求参数:json或xml格式的key-value类型数据
-ak:6E823f587c95f0148c19993539b99295
-region:上海
-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
# 数据由ajax技术自动转为json格式(字符串)传到后端,后端转为别的格式处理完再以json格式返回给前端
三 接口测试工具
工具:
-postman:浏览器插件,收费
-apifox:Postman + Swagger(接口文档) + Mock(假数据) + JMeter(压测工具)
-postwoman:开源
# 下载和安装
-https://www.postman.com/
-双击:Postman-win64-Setup.exe 下载后的软件
postman的路由地址:
1、不会自动补充/
2、在浏览器中会自动补充/,因为它有重定向,当报错是3xx时,会自动再发送一次请求
postman前端编码格式(重要)
1、前端不同编码格式
1、urlencoded
body体中:username=lqz&password=123 django的request.POST取出值
2、json
body体中 :{"username":"lqz","password":"123"} django 的request.POST取不出值
3、form-data
body中格式固定:数据部分和文件部分--》request.POST能取出数据,取不出文件,文件都是从request.FILES
# 以后一般只传文件,不会文件和数据一起修改
'----------------------------789048583058585187025897\r\nContent-Disposition: form-data; name="username"\r\n\r\nlqz\r\n 文件二进制' # 上传图片文件,返回数据,前面是路由,后面是图片的二进制
# hander请求头
# \n请求尾
# \r\n\r\n结束
2、不用pycharm创建项目
- django-admin startproject 项目名
3、django中的文件对象和原来的文件对象
-django:from django.core.files.uploadedfile import InMemoryUploadedFile
-原生文件:_io.BufferedWriter
-django中文件类没有继承原生文件类,但是由原生文件类所有方法
四 RESTful API规范
RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中
事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。
4.1 数据的安全保障
- url链接一般采用https协议进行传输
https是:http+ssl 安全的超文本传输协议
4.2 接口特征表现
4.3 多数据版本共存
4.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规范
4.5 资源操作由请求方式决定(method)
-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 - patch请求:局部修改主键为1的书
- https://api.baidu.com/books/1 - delete请求:删除主键为1的书
4.6 请求地址中带过滤条件
- 只针对于搜索所有接口
get请求
4.7 响应状态码(两层)
-1xx表示请求正在处理:前端一般看不到
-2xx 表示请求处理成功:经常看到
- 200:常规请求
- 201:创建成功
-3xx:重定向
- 301:永久重定向
- 302:暂时重定向
-4xx:客户端错误
- 403:请求无权限
- 404:请求路径不存在
- 405:请求方法不存在
-5xx:服务端出错
- 500:服务器异常
-MySQL错误操作都会有数字(如:10060) 和文字解释
错误代码 错误信息 详细描述
10001 System error 系统错误
10002 Service unavailable 服务暂停
10003 Remote service error 远程服务错误
10004 IP limit IP限制不能请求该资源
10005 Permission denied, need a high level appkey 该资源需要appkey拥有授权
4.8 响应中带错误信息
{
"code": 101,
"msg": "用户名或密码错误"
}
4.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}修改
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档
4.10 响应中带链接
- "url": "http://blog.sina.com.cn/zaku",
五 序列化
序列化(jump):把我们识别的数据转换成指定的格式给别人
例如:把数据(python对象:字典、列表)变成字符串或json格式给前端
反序列化(load):把别人给的数据转换/还原成我们需要的格式
例如:把前端js的json数据,对于python是字符串,给后端转换成对象(字典、列表等)
六 Django Rest_Framework
官方文档:https://www.django-rest-framework.org/
github: https://github.com/encode/django-rest-framework/tree/master
安装
1 django 是2版本,用不了drf最新(适当降版本),他会卸载django--->装最新4.x
2 djagno 3.1.12 可以使用drf最新
django:3.1.12
drf:3.14.0
前提是已经安装了django,建议安装在虚拟环境
pip install djangorestframework
pip install pymysql
创建django项目
cd ~/Desktop
django-admin startproject drfdemo
添加rest_framework应用
INSTALLED_APPS = [
'rest_framework', # 一定不要忘了加 ,
]