drf知识整理一
Posted asyouwish
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了drf知识整理一相关的知识,希望对你有一定的参考价值。
drf学习
drf :django restframework(全称)
drf框架作用是用来写接口
接口: 明确了请求方式,提供对应后台所需的参数,请求url链接可以得到后台的响应数据
(核心部分:请求方式,请求地址,请求参数,响应结果)
写接口: 参照某种规则(规范)书写url链接,同时根据规则制定请求方式,请求数据与响应结果
接口文档: 提供给前后端开发人员与测试人员查看
(写接口文档的yapi平台,访问接口的Postman工具)
接口规范:
webapi 接口规范: restful
例:
https://api.oldboy.com/v2/books/?limit=3&ordering=-price&page=2
https://api.oldboy.com/v2/books/(pk)/
#1.api关键字标识接口url
#2.在url链接中标识数据的版本 v
#3.前后台交互的数据资源(复数形式,不能带有动词,动词可以有特殊含义,但不能与资源拼接)
#4.请求方式决定资源操作
get请求: 取 又分为单查群查
post请求: 增 单增群增
put请求: 改(全局) 单改群改
patch请求: 改(局部) 单改群改
delete请求: 删 单删群删
由此形成十大接口
#5. 响应状态码
正常响应2xx:200 常规请求;201 创建成功
重定向响应3xx:301 永久重定向; 302 暂时重定向
客服端异常4xx:403 请求无权限;404 请求路径不存在;405 请求方法不存在
服务端异常5xx:500 服务器异常
#6.响应结果
响应的数据要有状态码,状态信息以及数据本身
```
{
"status": 0,#状态
"msg": "ok",# message信息
"results":[ #结果
{
"name":"肯德基(罗餐厅)",
"location":{ #位置
1 "lat":31.415354, #latitude 纬度
"lng":121.357339 #longtitude 经度
},
"address":"月罗路2380号", #地址
"province":"上海市", # 省份
"city":"上海市", #城市
"area":"宝山区", #区
"street_id":"339ed41ae1d6dc320a5cb37c", # 街道_id
"telephone":"(021)56761006", #手机号
"detail":1, #详情
"uid":"339ed41ae1d6dc320a5cb37c" #唯一标识符
}
...
]
}
```
基于原生django书写满足restful规范的接口:两个url 对应 一个视图类 完成 十大接口
/api/users/
/api/users/(?P<pk>d+)/
class User(View):
get|post|put|patch|delete方法
CBV请求生命周期:
as_view()完成路由匹配 => url请求会调用as_view()的返回值视图函数view => 调用dispatch()完成请求分发 => 视图类的具体视图方法处理请求 => 返回给前台
安装drf:
pip install djangorestframework
drf源码入口:
直接查看 rest_framework.view的APIView的dispatch方法
? 视图类继承drf的APIView: from rest_framework.views import APIView
? 读懂drf的as_view()方法:返回视图函数view是,局部禁用了csrf认证 - csrf_exempt(view)
? 请求分发的dispatch(),
? 在分发执行视图方法前,完成了
? 二次封装request:self.initialize_request(request, *args, **kwargs)
? 三大认证:self.initial(request, *args, **kwargs)
? 在视图方法处理完请求后:
? 出现异常的处理:self.handle_exception(exc)
? 二次封装response:self.finalize_response(request, response, *args, **kwargs)
以上是关于drf知识整理一的主要内容,如果未能解决你的问题,请参考以下文章