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连接处 ...
随机推荐
- HTML坦克大战学习02---坦克动起来
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...
- 在JavaScript里写类层次结构?别那么做!
从理论上讲,JavaScript并没有类.在实践中,下面的代码片段被广泛认为是JavaScript“类”的一个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 fu ...
- Javascript实用代码片段(译)
原文:http://www.bestdesigntuts.com/10-time-saving-javascript-code-snippets-for-web-developers 1. 同高或同宽 ...
- Node.js进程通信模块child_process
前言 Node.js是一种单线程的编程模型,对Node.js的赞美和诟病的也都是因为它的单线程模型,所有的任务都在一个线程中完成(I/O等例外).单线程模型,不仅让代码非常简洁,更是直接避免了线程调度 ...
- hbase 单机+伪分布环境搭建学习-1
1.单机模式: (1)编辑hbase-env.sh user@EBJ1023.local:/usr/local/flume_kafka_stom/hbase_1.1.2> vim conf/hb ...
- iftop、ifstat详解
ifstat 介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量 实例 默认使用 #ifstat eth0 eth1 KB/s in KB/s out KB/s in KB/s out 0 ...
- mongodb group php 操作
紧接着上篇来,这篇主要讲,mongodb的group功能,做的还是挺强大的,相当对于find(),skip(),distinct()等,用法比较复杂. 测试数据 > db.fruit.find( ...
- EasyUI 扩展自定义EasyUI校验规则 验证规则
$.extend($.fn.validatebox.defaults.rules, {CHS: {validator: function (value, param) {return /^[\u039 ...
- Python学习笔记(二)——高级特性
知识点 切片 切片 取一个list或tuple的部分元素. 原理:调用__getitem__,__setitem__,__delitem__和slice函数. 根据官方的帮助文档(https://do ...
- Page与Loaded
When navigate to page, loaded event will be triggered. Back to page, loaded event will be triggered ...