rest framework框架之认证使用和源码执行流程

2、django rest framework 框架

安装djangorestframework :pip3 install djangorestframework 

class APIView(View):
    pass

class OrderView(APIView):
    pass

a. cbv做一个djangorestframework的认证,url不管发什么请求只有先认证成功才能往下走,认证成功返回元组。

仅使用:认证的全部代码

from django.views import View
from rest_framework.views import APIView
from rest_framework.authentication import BaseAuthentication  # 导入类
from rest_framework import exceptions
from rest_framework.request import Request


class MyAuthentication(object):
    def authenticate(self, request):
        token = request._request.GET.get('token')
        #获取用户名和密码,去数据校验
        if not token:
            raise exceptions.AuthenticationFailed('用户认证失败')

        return ("alex", None)  # 认证成功,就返回一个元祖,认证失败就抛出一个异常

    def authenticate_header(self, val):
        pass


class DogView(APIView):
    authentication_classes = [MyAuthentication, ]

    def get(self, request, *args, **kwargs):
        self.dispatch  # APIView里面已经有dispatch方法了
        print(request)  # request在rest framework中执行另 self.dispatch  APIView里面已经有dispatch方法了
        print(request.user)
        ret = {
            'code': 1000,
            'msg': 'xxx'
        }
        return HttpResponse(json.dumps(ret), status=201)

    def post(self, request, *args, **kwargs):
        return HttpResponse('创建Dog')

    def put(self, request, *args, **kwargs):
        return HttpResponse('更新Dog')

    def delete(self, request, *args, **kwargs):
        return HttpResponse('删除Dog')

源码流程(即原理):dispatch...点进去,以及它的流程。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 到这里基本就是结束啦,下面截图是一些代码的解释~看看就好。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 3、作业:充分了解一下内容

1、中间件。

2、csrf原理:第一次,用户发送GET请求,后台在返回时给到随机字符串,csrf_token要求用户发送第二次post请求时携带后台给的随机字符串,django将随机字符串基于中间件的pocess_view方法中进行判断,也可以通过装饰器进行单独处理.

实现csrf_token是基于中间件pocess_view.因为在pocess_view.之后才可以路由匹配,找到函数才能用到装饰器,免除csrf_token认证才可以实现

3、CBV本质:基础部分有迭代器、生成器、装饰器和反射,rest framework通过反射来实现,即dispatch来实现。

4.restful规范

    ——10条规范

     ——以及对它的认识

5、面向对象

     ——封装  ,两类封装:第一类封装:将相同的属性和方法封装到类中。

                                            第二类封装:通过构造方法将一部分数据封装到每一个对象里去。

      ——继承:有两个类或者多个类共同的属性和方法可以提取到父类和基类当中去实现。无需在每个类中写一遍。多继承问题、广度优先和深度优先以及经典类和,看源码从实例化对象开始找

       ——多态:python本身就有的。对象.方法,说明是支持这个功能的.

6、django请求声明周期(只有django):请求进来走hji——>中间件——>走视图(包括CBV的类或者FBV的函数)

如果走视图碰到FBV的函数则直接执行;如果是CBV走dispatch,通过反射找到不同的方法,然后中间件返回值给用户

7、django请求声明周期(包含rest framework框架): 前面的流程都没有改变,只是把dispatch重写,添加了一部分功能,还是通过反射找到视图函数,拿到结果再返回。

PS:rest framework实际上就是dispatch触发的一系列操作

8、djangorestframework框架

  ——如何验证(基于数据库实现用户认证)   即去数据库里面根据用户在url上传的用户名和密码,在数据库存在则往下走 ,否则报认证失败。

  ——源码流程(面向对象回顾流程)   这里用到面向对象的封装和继承。

 今日内容:

1、认证

2、权限

3、节流

4、版本

注:他们的源码流程都是通过dispatch出发的。

 

posted @ 2022-05-21 18:21  费皿啊  阅读(96)  评论(0)    收藏  举报