Rest Framework ---- ajax的header补充 接口 restful接口规范
目录
ajax的axios其他补充
// 三种携带数据的方式
1. 数据包形式
data:{} // 后台用 request.POST拿到
2. 拼接参数形式
params:{} // 后台用 request.GET拿到
3. 请求头形式
headers:{
authorization:'请求头信息'
} // 后台用 request.META.get('HTTP_AUTHORZITAIONS') 拿到
自定义请求头信息: 后台settings.py
中配置
CORS_ALLOW_HEADERS=[
"""把cors默认的请求头写上 默认的在 default.py中
后面填写自定义的请求头 不然过不来"""
'lddragon',
'authorization'
]
想拿到的话 就 使用 request.META
# request.META 拿到的是一个超级大的字典 请求头的信息都是 HTTP_ + 你传的请求头大写
request.META.get('HTTP_AUTHORIZATIONS')
Django-rest-framework
drf
是 Django
的插件,所以要提前安装Django
, 基于restful
规范的原生Django
接口
安装:
pip3 install djangorestframework
注册:
# 记住导入rest_framework 后必须在 settings里面注册
INSTALLED_APPS = [
...
'rest_framework'
]
大纲:
"""
1.接口:接口的概念,数据接口文档,接口规范(restful)
2.drf请求生命周期 -cbv
3.drf基础组件:请求,响应,渲染,解析,异常
4.drf的序列化(核心):序列化, 模型序列化, 群操作序列化 *****
5.drf的视图家族 视图类 视图工具类 工具视图类 视图集
6.drf三大认证(核心):认证,权限,频率 *****
7.drf的过滤:赛选,搜索,排序,分页,区间,自定义
"""
1.接口
1.什么是web Api接口?
通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点
-
url:长得像返回数据的url链接
-
请求方式:get、post、put、patch、delete
- 采用get方式请求上方接口
-
请求参数:json或xml格式的key-value类型数据
- ak:6E823f587c95f0148c19993539b99295
- region:上海
- query:肯德基
- output:json
-
响应结果:json或xml格式的数据
-
上方请求参数的output参数值决定了响应数据的格式
-
{ "status":0, "message":"ok", "results":[ { "name":"肯德基(罗餐厅)", "location":{ "lat":31.415354, "lng":121.357339 }, "address":"月罗路2380号", "province":"上海市", "city":"上海市", "area":"宝山区", "street_id":"339ed41ae1d6dc320a5cb37c", "telephone":"(021)56761006", "detail":1, "uid":"339ed41ae1d6dc320a5cb37c" } ... ] }
-
2.接口文档的编写:YApi
3.接口测试工具Postman
-
Postman可以直接从官网:https://www.getpostman.com/downloads/下载获得,然后进行傻瓜式安装。
-
Postman是一款接口调试工具,是一款免费的可视化软件,同时支持各种操作系统平台,是测试接口的首选工具。
2.restful接口规范
-
接口规范:就是为了采用不同的后台语言,也能使用同样的接口获取到同样的数据
-
如何写接口:接口规范是 规范化书写接口的,写接口要写
url
、响应数据
注:如果将请求参数也纳入考量范围,那就是在写 接口文档~ -
分为两大部分:
url
和响应数据
1) 用api关键字标识接口url
api.baidu.com | www.baidu.com/api
2) 接口数据安全性决定优先选择https协议
3) 如果一个接口有多版本存在,需要在url中标识体现
api.baidu.com/v1/... | api.baidu.com/v2/...
4) 接口操作的数据源称之为 资源,在url中一般采用资源复数形式,一个接口可以概括对该资源的多种操作方式
api.baidu.com/books | api.baidu.com/books/(pk)
5) 请求方式有多种,用一个url处理如何保证不混乱 - 通过请求方式标识操作资源的方式
/books get 获取所有
/books post 增加一个(多个)
/books/(pk) delete 删除一个
/books/(pk) put 整体更新一个
/books/(pk) patch 局部更新一个
6) 资源往往涉及数据的各种操作方式 - 筛选、排序、限制
api.baidu.com/books/?search=西&ordering=-price&limit=3
- 请求方式(五大请求方式):
get:获取单个或多个资源
- https://api.baidu.com/books/
# 群查,返回多个结果对象
- https://api.baidu.com/books/(pk)/
# 单查,返回单个结果对象
post:新增单个或多个资源
- https://api.baidu.com/books/
# 单增,提交单个数据字典,完成单增,返回单个结果对象
# 群增,提供多个数据字典的数组,完成群增,返回多个结果对象
put:整体修改单个或多个资源
- https://api.baidu.com/books/
# 整体修改多个,提供多个数据字典的数组(数据字典中要包含主键),完成群改,返回多个结果对象
- https://api.baidu.com/books/(pk)/
# 整体修改单个,提供单个数据字典(主键在url中体现),完成单改,返回单个结果对象
patch:局部修改单个或多个资源
# 方式与put完全相同,不同的是:操作的资源如果有5个key-value键值对,put请求提供的字典必须全包含,但是patch提供的字典包含的键值对0~5个都可以
delete:删除单个或多个资源
- https://api.baidu.com/books/
# 多删,提供多个资源主键数据,完成群删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
- https://api.baidu.com/books/(pk)/
# 单删,不需要提供额外数据,完成单删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
- 响应结果:
1.响应对象中要包含网络状态码(网络状态信息和网络状态码捆绑出现,不要额外设置):
1xx:基本信息
2xx:成功 - 200基本 201新增成功
3xx:重定向
4xx:客户端错误 - 400错误请求;403请求无权限;404请求资源不存在
5xx:服务端错误 - 500服务器错误
2. 数据状态码(一般都是前后台约定规则):
0:成功
1:失败 - 1xx:具体失败信息(要在接口文档中明确写出)
2:无数据 - 2xx:具体无数据信息(要在接口文档中明确写出)
3. 据状态信息(一般不仅仅是对数据状态码的解释,更多是对结果的描述,给前台开发者阅读的)
4. 结果(常量、数组、字典),如果有子资源(图片、音频、视频),返回资源的url链接
{
"status": 0,
"msg": 'ok',
"results": [{
"name": "西游记",
"img": "https://api.baidu.com/media/book/xyj.png"
}]
}
吾虽浪迹,却未迷失本心