Django-Rest-Framework的版本和认证
Django-Rest-Framework的版本和认证
DRF的版本
版本控制是做什么用的,我们为什么要用
首先要知道版本是干嘛用的,我们知道开发项目的时候有多个版本
当项目一直更新,版本就越来越多,以前的旧版本就不维护了
那这时,就需要对版本进行控制,这个DRF也给我们提供了一些封装好的版本控制方法
版本控制怎么用
之前视图篇介绍了APIView,也只带APIView返回View中的view函数然后调用的dispach方法
那看一下dispatch方法,看下它都做了些什么

执行self.initial方法之前是各种赋值,包括request的重新封装,下面是路由分发,那我们看这个方法辽做了什么。

可以看到,version版本信息赋值给了request.version 版本控制方案赋值给了request.versioning_scheme
这个版本控制方案就是配置的版本控制的类
也就是说,APIView通过这个方法初始化自己提供的组件
接下来看一下框架提供了那些版本的控制方法 ---- 在rest_framework.versioning

框架一共给我们提供了这几个版本的控制方法,这里只给出一个,其他配置相同
详细用法
第一步 settings.py
|
|
REST_FRAMEWORK = {
|
第二步 urls.py
|
|
urlpatterns = [ |
测试视图
|
|
class TestView(APIView): |
其他版本控制的类,配置方法差不多都一样
DRF的认证
认证是干什么用的
我们都知道,我们可以在网站上登录,然后可以有个人中心,对自己信息进行修改
但是我们每次给服务器发请求,由于Http的无状态,导致我们每次都是新的请求
那么服务端需要对每次来的请求进行认证,看用户是否登录,以及登录用户是谁
那么我们服务器对每个请求进行认证的时候,不可能在每个视图函数中都写认证
一定是把认证逻辑抽离出来,以前我们可能会加装饰器,或者中间件,来看看DRF框架提供了什么
认证怎么用
上面版本控制的时候我们可以知道,在dispatch 方法里,执行了initial方法,那初始化了我们的版本
如果认证读的话,可以看到,版本的下面就是我们的认证,权限,频率组件。
认证组件

我们进去认证看

我们这个权限组件返回的是request.user,那么我们这里的request是新的还是旧的呢
我们的initial是我们request重新赋值之后的,所所以这里的request是新的,也就是Request类实例对象
那这个user一定是一个静态方法,进去一探究竟


这里没有给出反复的跳转截图,自行仔细跳转
通过上面基本可以知道,我们的认证类一定要实现的方法,以及返回值类型,
以及配置的参数authentication_classes
请看具体用法
认证的详细用法
写一个认证demo,先建一张用户表,字段为为用户名以及对应的token值
models.py
|
|
# 先在model中注册模型类 |
views.py
|
|
# 写视图类并且用post请求注册一个用户 class UserView(APIView): |
认证开始
写一个认证的类
|
|
# 注意我们这个认证的类必须实现的方法以及返回值 |
视图级别认证
|
|
class TestAuthView(APIView): |
全局配置认证
|
|
REST_FRAMEWORK = {
|
Django-Rest-Framework的版本和认证的更多相关文章
- Django Rest framework 之 版本
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- Django rest framework(1)----认证
目录 Django组件库之(一) APIView源码 Django restframework (1) ----认证 Django rest framework(2)----权限 Django ...
- Django rest framework 之版本
一.通过 QueryParameterVersioning 获取版本 通过 QueryParameterVersioning 从 get 请求中获取版本信息: 1.新建 app,名为 api,Proj ...
- Django REST framework之版本,解释器,序列化
1 版本 2 解释器 3.序列化 1 版本 通过?后面传版本号有两种方法: 方法一 from django.shortcuts import render from rest_framework.vi ...
- Django rest framework源码分析(4)----版本
版本 新建一个工程Myproject和一个app名为api (1)api/models.py from django.db import models class UserInfo(models.Mo ...
- Django rest framework源码分析(1)----认证
目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...
- Django Rest framework 之 认证
django rest framework 官网 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest fra ...
- Django REST framework 之JWT认证
Json Web Token 1.JWT简介 JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法.JWT 可以使用 H ...
- Django rest framework(7)----分页
目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...
- Django rest framework(6)----序列化
目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...
随机推荐
- 用gdisk调整gpt/ext4分区大小
主机: CentOS release 6.4 (Final) 目的:从/home分区分出100G来创建新分区/vm 参考: http://ryanclouser.com/?p=66 http://fa ...
- SocketSessionConfig参数设制
Mina 是一个韩国人写的基本java NIO的一个高性能的传输框架,我们的搜索就是基本它作为一个搜索服务开放接口了.对于系统的TIME_WAIT过多,造成服务器的负载过高,这个问题我也不用多说了,这 ...
- listen 70
Better Sidewalks Could Bring Improved Public Health Most of our serious illnesses and deaths in the ...
- Unity 摄像机旋转初探
接触打飞机的游戏时都会碰见把摄像机绕 x 轴顺时针旋转 90°形成俯瞰的视角的去看飞船.也没有多想,就感觉是坐标系绕 x 轴旋转 90°完事了.但是昨天用手比划发一下发现不对.我就想这样的话绕 x 轴 ...
- codeforces 703B B. Mishka and trip(数学)
题目链接: B. Mishka and trip time limit per test 1 second memory limit per test 256 megabytes input stan ...
- android如何查看网卡名和ip
我们知道,在windows下查看ip地址用ipconfig,在Linux下查看ip地址用ifconfig.今天在使用android查看的时候ifconfig却不管用: 查找网上资料发现,原来默认ifc ...
- Vijos:P1540月亮之眼
描述 吉儿是一家古董店的老板娘,由于她经营有道,小店开得红红火火.昨天,吉儿无意之中得到了散落民间几百年的珍宝—月亮之眼.吉儿深知“月亮之眼”价值连城:它是由许多珍珠相连而成的,工匠们用金线连接珍珠, ...
- Java 日志记录规则
Java 日志记录规则 规则一:日志是面向读者的 我们不应该让无价值的信息使日志文件变得乱糟糟,比如说完整打印所有的实体字段. 通常,实体名字和其逻辑关键字足以识别在表格中的一条记录了. 规则二:匹配 ...
- java继承使用的细节问题?
关于java继承的基本概念就不多说了,下面就说说继承使用应该注意的细节问题? 示例 一: package com.bizvane; class Fu{ public Fu() { System.out ...
- window.onerror 捕捉所有的前端error
//[捕捉所有前端error] window.onerror = function (errormessage, url, line, column, error) { console.log(&qu ...