(一)接口开发方式比较

1.1 缺点:如果有10张表,则需要40个url.

urls.py

views.py

缺点:如果有10张表,则需要40个url.    接下来就出现了resrful 规范,比较简洁

1.2:resrful 规范(建议)  url简洁了,只有一条。

1.2.1. 根据method不同做不同的操作,示例:基于FBV:

urls.py

views.py

1.2.2. 根据method不同做不同的操作,示例:基于CBV:

urls.py:

views.py:

settings.py

# 添加'rest_framework'到您的INSTALLED_APPS设置:
INSTALLED_APPS = [
...
'rest_framework',
]

运行结果:

(二)django rest framework框架 

2.1 django rest framework框架的下载

pip3 install djangorestframework

2.2 rest_framework使用

urls.py

settings.py

# 添加'rest_framework'到您的INSTALLED_APPS设置:
INSTALLED_APPS = [
...
'rest_framework',
]

views.py

2.3 APIView   View源码分析

APIView类里面有dispatch方法

APIView在原有的基础上,多了很多功能。request进行了加工,是一个新的对象。

请求封装request = self.initialize_request(request, *args, **kwargs)(版本、认证、权限、节流、解析器)

认证

如果自己写了用户认证,就找自己的认证方法:

加注释、initial

initial

认证

request是封装后的对象了,所有user应该去APIView里面找。

_authenticate  # 循环认证类的所有对象 [BasicAuthentication对象,]。.authenticate方法检查你是否已登入。如果用户没有登入则报错。

接下来自己定义一个认证方法:必须有authenticate方法:如果用户没有登入,则报错。

运行结果:url没有传token值,则认证失败

url传了token,认证成功

认证流程加注释

点击url.py文件的as_view()

跳转到rest_framework的views.py文件,找到class APIView(View)类里面的dispatch函数

initial(版本、认证、权限、节流、解析器)

perform_authentication 实现认证

from rest_framework.request import Request  方便查询user

获取认证对象,进行一步步的认证

认证流程:view  dispach  封装Request  initial:(版本、认证、权限、节流、解析器) perform_authentication 实现认证 user > authenticate方法

如果认证成功有(token值),request.user则有值。

总的流程是:

APIView类
第一步class OrderView(APIView):点击APIView
第二步def dispatch(self, request, *args, **kwargs):
找到self.initial(request, *args, **kwargs),点击initial
第三步def initial(self, request, *args, **kwargs):
找到self.perform_authentication(request)(进行认证)
点击perform_authentication
第四步def perform_authentication(self, request):
request.user Request类
第五步同上def dispatch(self, request, *args, **kwargs):
找到request = self.initialize_request(request, *args, **kwargs)
点击initialize_request
第六步def initialize_request(self, request, *args, **kwargs):
找到return Request,点击Request
第七步class Request(object):
找到 @property def user(self):(获取认证对象,进行一步步认证)
找到return self._user
第八步还是@property def user(self):里面
找到self._authenticate()点击_authenticate
第九步def _authenticate(self): (循环所有对象,执行认证方法) Authtication自定义认证类(自己写了认证方法,就用自己的)
第十步def authenticate(self, request):
报错:(返回元祖(user对象,token对象)) class OrderView(APIView):或class AuthView(APIView):等订单
第十一步执行各个订单的def post: 或def get:等方法

rest_framework之规范详解 00的更多相关文章

  1. 3dTiles 数据规范详解[1] 介绍

    版权:转载请带原地址.https://www.cnblogs.com/onsummer/p/12799366.html @秋意正寒 Web中的三维 html5和webgl技术使得浏览器三维变成了可能. ...

  2. FLV文件格式官方规范详解

    ——如果要学习一个新的知识点,官方手册可能是最快的途径.查看网上其他人的总结也许入门更快,但是要准确,深入,完整,还是要看官方手册.   以下内容来自对官方文档Video File Format Sp ...

  3. rest_framework之版本详解 04

    访问不同版本,给不同内容. rest规范:版本要么放url上:要么放请求头里. 1.原来的url的版本都写死了.只能写v1 from django.conf.urls import url from ...

  4. 百度MIP页规范详解 —— canonical标签

    百度MIP的规范要求必须添加强制性标签canonical,不然MIP校验工具会报错: 强制性标签<link rel="/^(canonical)$/"> 缺失或错误 这 ...

  5. CommonJs规范详解---【XUEBIG】

     CommonJS是服务器模块的规范,Node.js采用了这个规范   1.CommonJs规范的出发点:JS没有模块系统.标准库较少.缺乏包管理工具:为了让JS可以在任何地方运行,以达到Java.C ...

  6. django rest_framework 序列化组件详解

    为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...

  7. rest_framework之序列化详解 06

    拿到所有的角色数据 1.urls.py 2.models.py  假设只有3个角色 3.views.py from api import models import json json只能序列化pyt ...

  8. rest_framework之频率详解 03

    访问频率(节流) 1.某个用户一分钟之内访问的次数不能超过3次,超过3次则不能访问了,需要等待,过段时间才能再访问. 2.自定义访问频率.两个方法都必须写上. 登入页面的视图加上访问频率 3.返回值F ...

  9. Web服务器项目详解 - 00 项目概述

    目录 00 项目概述 01 线程同步机制包装类 02 半同步/半反应堆线程池(上) 03 半同步/半反应堆线程池(下) 04 http连接处理(上) 05 http连接处理(中) 06 http连接处 ...

随机推荐

  1. 用javascript将数据导入Excel

    网上收集的代码 <input type="button" name="out_excel" onclick="AutomateExcel();& ...

  2. Java 经典问题

    九种基本类型及封装类 基本类型 boolean byte char short int long double void 二进制位数 1 8(一字节) 16(2字节) 16(2字节) 32(4字节) ...

  3. 应当将指针变量用“==”或“!=”与 NULL 比较

    应当将指针变量用“==”或“!=”与 NULL 比较. 指针变量的零值是“空”(记为 NULL). 尽管 NULL 的值与 0 相同,但是两者意义不 同. 假设指针变量的名字为 p,它与零值比较的标准 ...

  4. CentOS7怎么修改命令行启动

    root用户下直接执行命令: systemctl set-default multi-user.target 然后reboot即可.

  5. ueditor1_4_3_3编辑器修改文章

    html的body中: <script id="editor" type="text/plain" ></script> js中: // ...

  6. 演示-JQuery关系选择器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 更改VS2010的[默认开发语言]

    1.菜单-->"工具"-->"导入导出设置".例如以下图: 2.选择"重置全部设置",例如以下图: 3.重置设置,例如以下图: ...

  8. ionic安装及测试

    官方教程: http://ionicframework.com/getting-started/ 官方教程写得比较简单,简单来说就是 1)安装nodejs(安装方法:http://www.cnblog ...

  9. PHP之命名空间

    前面的话 从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色.这个原理应用到程序设计 ...

  10. c++11实现异步定时器

    c++11提供了丰富的时间和线程操作函数,比如 std::this_thread::sleep, std::chrono::seconds等.可以利用这些来很方便的实现一个定时器.     定时器要求 ...