一、认证
1、在class类里面的(APIView)在pycharm按住ctrl点击APIView,然后向下翻找到![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c5cdc1200b3662d204cd36ba6ac05ccd.png)
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)