zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    随机图片
    单页网站
    最安全的聊天工具——Cryptocat
    一个游戏——小黑屋
    SAO Utils – SAO风格启动菜单
    对话框实现
    抖动文字
    Leetcode: 22. Generate Parentheses
    Leetcode: 21. Merge Two Sorted Lists
    Leetcode: 20. Valid Parentheses
  • 原文地址:https://www.cnblogs.com/asyouwish/p/11963423.html
Copyright © 2011-2022 走看看