rest_framework之规范详解 00
(一)接口开发方式比较
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的更多相关文章
- 3dTiles 数据规范详解[1] 介绍
版权:转载请带原地址.https://www.cnblogs.com/onsummer/p/12799366.html @秋意正寒 Web中的三维 html5和webgl技术使得浏览器三维变成了可能. ...
- FLV文件格式官方规范详解
——如果要学习一个新的知识点,官方手册可能是最快的途径.查看网上其他人的总结也许入门更快,但是要准确,深入,完整,还是要看官方手册. 以下内容来自对官方文档Video File Format Sp ...
- rest_framework之版本详解 04
访问不同版本,给不同内容. rest规范:版本要么放url上:要么放请求头里. 1.原来的url的版本都写死了.只能写v1 from django.conf.urls import url from ...
- 百度MIP页规范详解 —— canonical标签
百度MIP的规范要求必须添加强制性标签canonical,不然MIP校验工具会报错: 强制性标签<link rel="/^(canonical)$/"> 缺失或错误 这 ...
- CommonJs规范详解---【XUEBIG】
CommonJS是服务器模块的规范,Node.js采用了这个规范 1.CommonJs规范的出发点:JS没有模块系统.标准库较少.缺乏包管理工具:为了让JS可以在任何地方运行,以达到Java.C ...
- django rest_framework 序列化组件详解
为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...
- rest_framework之序列化详解 06
拿到所有的角色数据 1.urls.py 2.models.py 假设只有3个角色 3.views.py from api import models import json json只能序列化pyt ...
- rest_framework之频率详解 03
访问频率(节流) 1.某个用户一分钟之内访问的次数不能超过3次,超过3次则不能访问了,需要等待,过段时间才能再访问. 2.自定义访问频率.两个方法都必须写上. 登入页面的视图加上访问频率 3.返回值F ...
- Web服务器项目详解 - 00 项目概述
目录 00 项目概述 01 线程同步机制包装类 02 半同步/半反应堆线程池(上) 03 半同步/半反应堆线程池(下) 04 http连接处理(上) 05 http连接处理(中) 06 http连接处 ...
随机推荐
- getaddrinfo ENOTFOUND https://api.weixin.qq.com https://api.weixin.qq.com:443
原因:这是由于你当前的主机不能够连接到你填写的url. 解决方法: 先ping api.weixin.qq.com ping不通的话,就是外网访问的问题. 开通外网访问就可以了.
- e652. Getting the Font Faces for a Font Family
To create a Font object to draw text, it is necessary to specify the font face name. This example de ...
- (转)PS流格式
概念: 将具有共同时间基准的一个或多个PES组合(复合)而成的单一的数据流称为节目流(Program Stream). ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码 ...
- jquery load ($.load) 事件用法与分析(转)
首先我们需要清楚的是jquery load方法是对jQuery.ajax()进行封装以方便我们使用的一个方法,当我们需要处理较为复杂的逻辑时候,还是需要用到jQuery.ajax()这个比较全面的方法 ...
- [CS]C#操作word
近期在做的项目已经改了好几版,近期这一版用到了word,当然不是直接使用word,而是使用第三方的ActiveX控件:dsoframer.ocx.此控件的使用和其它控件的使用流程没有不论什么差别.接下 ...
- iOS多线程与网络开发之NSOperation
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- C# HttpClientHelper请求
public class HttpClientHelper { /// <summary> /// get请求 /// </summary> /// <param nam ...
- pyqt声音输入
参考文档: http://blog.csdn.net/jdh99/article/details/39525451 http://blog.csdn.net/jdh99/article/details ...
- c++ template<typename T>
template <typename T> 网上查了半天不知所云,网上说的太多,俺只是要知道所需要的就可以了. 写了个程序试了一下,其实就是这个东西可以根据你所需要的类型就行匹配.其实就是 ...
- win10系统下cmd输入一下安装的软件命令提示拒绝访问解决办法
问题:win10系统安装了nvm,cmd命令提示不是内部或外部命令 解决:卸载nvm,重新安装,再一次输入nvm,发现正常显示: 问题:win10安装了nvm之后,安装node成功,输入node命令, ...