Django-Rest-Framework的版本和认证

DRF的版本

版本控制是做什么用的,我们为什么要用

  1. 首先要知道版本是干嘛用的,我们知道开发项目的时候有多个版本
  2. 当项目一直更新,版本就越来越多,以前的旧版本就不维护了
  3. 那这时,就需要对版本进行控制,这个DRF也给我们提供了一些封装好的版本控制方法

版本控制怎么用

  1. 之前视图篇介绍了APIView,也只带APIView返回View中的view函数然后调用的dispach方法
  2. 那看一下dispatch方法,看下它都做了些什么

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

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

  1. 框架一共给我们提供了这几个版本的控制方法,这里只给出一个,其他配置相同

详细用法

第一步 settings.py

  1.  
  1. REST_FRAMEWORK = {
    # 默认使用的版本控制类
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
    # 允许的版本
    'ALLOWED_VERSIONS': ['v1', 'v2'],
    # 版本使用的参数名称
    'VERSION_PARAM': 'version',
    # 默认使用的版本
    'DEFAULT_VERSION': 'v1',
    }

第二步 urls.py

  1.  
  1. urlpatterns = [
    url(r"^versions", MyView.as_view()),
    url(r"^(?P<version>[v1|v2]+)/test01", TestView.as_view()),
    ]

测试视图

  1.  
  1. class TestView(APIView):
    def get(self, request, *args, **kwargs):
    print(request.versioning_scheme)
    ret = request.version
    if ret == "v1":
    return Response("版本v1的信息")
    elif ret == "v2":
    return Response("版本v2的信息")
    else:
    return Response("根本就匹配不到这个路由")

其他版本控制的类,配置方法差不多都一样

DRF的认证

认证是干什么用的

  1. 我们都知道,我们可以在网站上登录,然后可以有个人中心,对自己信息进行修改
  2. 但是我们每次给服务器发请求,由于Http的无状态,导致我们每次都是新的请求
  3. 那么服务端需要对每次来的请求进行认证,看用户是否登录,以及登录用户是谁
  4. 那么我们服务器对每个请求进行认证的时候,不可能在每个视图函数中都写认证
  5. 一定是把认证逻辑抽离出来,以前我们可能会加装饰器,或者中间件,来看看DRF框架提供了什么

认证怎么用

  1. 上面版本控制的时候我们可以知道,在dispatch 方法里,执行了initial方法,那初始化了我们的版本
  2. 如果认证读的话,可以看到,版本的下面就是我们的认证,权限,频率组件。

认证组件

我们进去认证看

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

  1. 这里没有给出反复的跳转截图,自行仔细跳转
  2. 通过上面基本可以知道,我们的认证类一定要实现的方法,以及返回值类型,
  3. 以及配置的参数authentication_classes

请看具体用法

认证的详细用法

写一个认证demo,先建一张用户表,字段为为用户名以及对应的token值

models.py

  1.  
  1. # 先在model中注册模型类
    # 并且进行数据迁移
    # 测试我就简写了~
  2.  
  3. class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    token = models.UUIDField()

views.py

  1.  
  1. # 写视图类并且用post请求注册一个用户
  2.  
  3. class UserView(APIView):
    def post(self, request, *args, **kwargs):
    username = request.data["username"]
    UserInfo.objects.create(username=username, token=uuid.uuid4())
    return Response("注册成功")

认证开始

写一个认证的类

  1.  
  1. # 注意我们这个认证的类必须实现的方法以及返回值
    class MyAuth(BaseAuthentication):
  2.  
  3. def authenticate(self, request):
    request_token = request.query_params.get("token", None)
    if not request_token:
    raise AuthenticationFailed({"code": 1001, "error": "缺少token"})
    token_obj = UserInfo.objects.filter(token=request_token).first()
    if not token_obj:
    raise AuthenticationFailed({"code": 1001, "error": "无效的token"})
    return token_obj.username, token_obj

视图级别认证

  1.  
  1. class TestAuthView(APIView):
    authentication_classes = [MyAuth, ]
  2.  
  3. def get(self, request, *args, **kwargs):
    return Response("测试认证")

全局配置认证

  1.  
  1. REST_FRAMEWORK = {
    # 默认使用的版本控制类
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
    # 允许的版本
    'ALLOWED_VERSIONS': ['v1', 'v2'],
    # 版本使用的参数名称
    'VERSION_PARAM': 'version',
    # 默认使用的版本
    'DEFAULT_VERSION': 'v1',
    # 配置全局认证
    'DEFAULT_AUTHENTICATION_CLASSES': ["BRQP.utils.MyAuth", ]
    }

Django-Rest-Framework的版本和认证的更多相关文章

  1. Django Rest framework 之 版本

    RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...

  2. Django rest framework(1)----认证

    目录 Django组件库之(一) APIView源码 Django restframework   (1)  ----认证 Django rest framework(2)----权限 Django ...

  3. Django rest framework 之版本

    一.通过 QueryParameterVersioning 获取版本 通过 QueryParameterVersioning 从 get 请求中获取版本信息: 1.新建 app,名为 api,Proj ...

  4. Django REST framework之版本,解释器,序列化

    1 版本 2 解释器 3.序列化 1 版本 通过?后面传版本号有两种方法: 方法一 from django.shortcuts import render from rest_framework.vi ...

  5. Django rest framework源码分析(4)----版本

    版本 新建一个工程Myproject和一个app名为api (1)api/models.py from django.db import models class UserInfo(models.Mo ...

  6. Django rest framework源码分析(1)----认证

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  7. Django Rest framework 之 认证

    django rest framework 官网 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest fra ...

  8. Django REST framework 之JWT认证

    Json Web Token 1.JWT简介 JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法.JWT 可以使用 H ...

  9. Django rest framework(7)----分页

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  10. Django rest framework(6)----序列化

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

随机推荐

  1. 算法(Algorithms)第4版 练习 1.3.11

    主要思路: 这个和Dijkstrad的双栈算法不太一样,后缀的计算只需要一个栈即可. 用一个栈来存数字栈即可. 遇到数字,压栈. 遇到运算法,从栈中弹出相应的数字,用该运算法计算得到结果. 再次压入栈 ...

  2. php设置文件编码

    <?php @header('Content-type: text/html;charset=UTF-8'); ?>

  3. listen 66

    Frog Species Found in Big Apple Scientists discover new species all the time—on the order of 15,000 ...

  4. cookie的保存与提取

    爬虫过程中,cookie可以保留用户与服务器之间的交互信息,使服务器与用户相互能够识别.由于HTTP协议是无状态协议,即不能够识别客户端身份,即使客户端多次请求同一个url服务器仍然响应.这种协议导致 ...

  5. codeforces 705B B. Spider Man(组合游戏)

    题目链接: B. Spider Man time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. 【Lintcode】033.N-Queens II

    题目: Follow up for N-Queens problem. Now, instead outputting board configurations, return the total n ...

  7. Ubuntu 复制文件,修改文件名

    复制 cp a b   (a为旧的,b为新的) 修改 mv a b (a为旧的,b为新的)

  8. 缓存与数据库一致性之二:高并发下的key重建(先淘汰cache再写db)的问题

    一.为什么数据会不一致 回顾一下上一篇文章<缓存与数据库一致性之一:缓存更新设计>中对缓存.数据库进行读写操作的流程. 写流程: (1)先淘汰cache (2)再写db 读流程: (1)先 ...

  9. 贪心+等价转化 HDU 1489

    等价转换,题意简单来讲如下:在一条直线均匀分布N个村庄,每个村庄要么买酒,要么卖酒,且村庄的买酒和卖酒供需平衡,总和为0,把k个单位的酒从一个村庄运到相邻的村庄需要k个单位的劳动力,输出最小的劳动力. ...

  10. DCloud-HTML5+:barcode

    ylbtech-DCloud:barcode&camera 1.返回顶部 1. http://www.html5plus.org/doc/zh_cn/barcode.html 2. Barco ...