django DRF 组件解析

一、认证

1、在class类里面的(APIView)在pycharm按住ctrl点击APIView,然后向下翻找到在这里插入图片描述
     def dispatch(self, request, *args, **kwargs):
        """
        `.dispatch()` is pretty much the same as Django's regular dispatch,
        but with extra hooks for startup, finalize, and exception handling.
        """
        self.args = args
        self.kwargs = kwargs
        request = self.initialize_request(request, *args, **kwargs)
        self.request = request
        self.headers = self.default_response_headers  # deprecate?


        try:
            #进这里 #点击这个
            self.initial(request, *args, **kwargs)

            # Get the appropriate handler method
            if request.method.lower() in self.http_method_names:
                handler = getattr(self, request.method.lower(),
                                  self.http_method_not_allowed)
            else:
                handler = self.http_method_not_allowed

            response = handler(request, *args, **kwargs)

        except Exception as exc:
            response = self.handle_exception(exc)

        self.response = self.finalize_response(request, response, *args, **kwargs)
        return self.response


找到def dispatch(self, request, *args, **kwargs):中的 self.initial并点击

        try:
           #进这里 #点击这个
           self.initial(request, *args, **kwargs)

然后将会看到:
在这里插入图片描述

		# 代表 认证组件
		self.perform_authentication(request)
		# 代表 权限组件
        self.check_permissions(request)
        # 代表 限流组件
        self.check_throttles(request)

然后 点击self.perform_authentication(request)这个方法
在这里插入图片描述
在这里它封装了 request.user方法 点击request.user然后选择第三个
在这里插入图片描述
在这里封装了self._authenticate() 点击self._authenticate()
在这里插入图片描述
在这里插入图片描述

二、权限

首先点击 self.dispatch() 找到 self.initial(request,*args,**kwargs)点击 进入
在这里插入图片描述
在这里插入图片描述
然后点击 代表权限的组件方法
这里会出现 点击这个选择第三个 会出现我们冲的的方法
在这里插入图片描述
随后滚动鼠标 会出现这个方法
在这里插入图片描述
我们在settings.py设置全局组件配置 权限 首先我们要找到源码来写入 这个配置的功能
在class类里面的(APIView)在pycharm按住ctrl点击APIView,然后向下翻找到
在这里插入图片描述
DEFAULT_PERMISSION_CLASSES 这个就代表配置 settings.py需要设置的方法 [这里写的是方法类的路径]
在这里插入图片描述
然后在view.py订单视图中 写入

class OrderView(APIView):
    """
    订单相关业务
    """
    authentication_classes = []
    permission_classes = []

三、限流

限流就是限制访问频率或者次数
我们可以看看源码是怎样写的
首先点击 self.dispatch() 找到 self.initial(request,*args,**kwargs)点击 进入
在这里插入图片描述
然后点击 代表限流的组件方法
在这里插入图片描述
在这里会找到封装的allow_request 点击它 选择第三个
在这里插入图片描述
这里就会出现allow_request源码的方法 和 wait源码的方法
在这里插入图片描述
在这里插入图片描述
我们开始在views.py设置 一个类来测试我们书写的代码逻辑是否正确

# 在我的组件包导入 MyThrottle方法
from myapp.myutils.throttle import MyThrottle


class StudentView(APIView):
    authentication_classes = [MyAuthtication]
    permission_classes = [SVIPPermission]

    # 开启这个代表自己设置的限流
    throttle_classes = [MyThrottle]

	
    def get(self, request, *args, **kwargs):
    	# 获取当前的ip
        ip = request.META.get('REMOTE_ADDR')
        # 并返回当前的ip
        return JsonResponse({'ip': ip})

也可以在settings.py全局设置组件
在这里插入图片描述
怎么找到它呢 ?
在class类里面的(APIView)在pycharm按住ctrl点击APIView,然后向下翻找到
在这里插入图片描述
settings.py全局设置
在这里插入图片描述
在这里插入图片描述
找到这个 这里是相关的一些配置
在这里插入图片描述
在这里插入图片描述
这个是使用的方法
在这里插入图片描述

四、版本

在这里插入图片描述
一种是原生的源码

# QueryParameterVersioning点击这个里面会有个这种方法
from rest_framework.versioning import QueryParameterVersioning

点击这个
在这里插入图片描述
在这里插入图片描述
含义
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击这个选择第三个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
复制这个到settings.py进行全局配置
在这里插入图片描述
在这里插入图片描述

REST_FRAMEWORK = {
    "DEFAULT_VERSION": "v1",# 默认版本
    "ALLOWED_VERSIONS": ["v1", "v2"],# 被允许访问的版本

}

另一种方法

# 从rest_framework.versioning 导入 URLPathVersioning
from rest_framework.versioning import URLPathVersioning

# 设计一个类
class UsersView(APIView):
    versioning_class = URLPathVersioning  # 调入版本这个方法

    def get(self, request, *args, **kwargs):
    	# 获取版本
        v = request.version
        u1 = request.versioning_scheme.reverse(viewname="user",request=request)
        print(u1)
        return HttpResponse(v)

点击这个URLPathVersioning看源码

from rest_framework.versioning import URLPathVersioning

继承的是这个方法点击
在这里插入图片描述
鼠标滚动找到复制这个 放到urls.py路由中
在这里插入图片描述

五、解析器(parser)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、序列化器

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值