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知识整理一的主要内容,如果未能解决你的问题,请参考以下文章

简练软考知识点整理-云大物移智区加

drf --- 序列化实操

DRF框架知识总览

drf多方式登录接口(手机号邮箱验证码)登录

(生鲜项目)17. drf实现发送短信验证码功能

个人对drf-extentions 的英文文档的部分整理翻译与保存(个人用)