Django REST_framework框架 03
2019-01-21 17:12
721 查看
权限组件
源码
权限组件的源码执行过程和之前的认证组件是相同的,如下:
self.check_permissions(request)
def check_permissions(self, request): """ Check if the request should be permitted. Raises an appropriate exception if the request is not permitted. """ for permission in self.get_permissions(): if not permission.has_permission(request, self): self.permission_denied( request, message=getattr(permission, 'message', None) )
思考:如果要做权限认证,我们首先要知道当前登录的用户是谁,那么我们如何知道呢?
首先rest_framework中的三个组件是按顺序执行的:#认证组件 self.perform_authentication(request) #权限组件 self.check_permissions(request) #频率组件 self.check_throttles(request)在第一个执行的认证组件源码中有这样一段代码
self.user, self.auth = user_auth_tuple这个user_auth_tuple恰巧就是我们自定义认证视图时返回的那个元祖
class TokenAuth(BaseAuthentication): def authenticate(self, request): ...... return token_obj.user, token_obj.token #需要返回一个元组因此此时的self.user=token_obj.user,self.auth=token_obj.token
局部视图权限
在app01.service.permissions.py中:
from rest_framework.permissions import BasePermission class SVIPPermission(BasePermission): message = "SVIP才能访问" #没通过验证则返回错误 def has_permission(self, request, view): #固定写法 if request.user.user_type == 3: return True return False
在views.py:
class AuthorView(viewsets.ModelViewSet): authentication_classes = [TokenAuth,] permission_classes = [SVIPPermission,] queryset = Author.objects.all() serializer_class = AuthorModelSerializers
全局视图权限
REST_FRAMEWORK={ "DEFAULT_AUTHENTICATION_CLASSES":["app01.service.auth.Authentication",], "DEFAULT_PERMISSION_CLASSES":["app01.service.permissions.SVIPPermission",] }
相关文章推荐
- django-rest-framework 框架
- python-django rest framework框架
- 在django-rest-framework 里使用全文搜索框架 haystack 和 drf_haystack
- python-django rest framework框架之dispatch方法源码分析
- python-django rest framework框架之解析器
- Django之REST_framework 框架基本组件使用
- python-django rest framework框架之分页
- Django_REST_framework框架
- python-django rest framework框架之视图
- python-django rest framework框架之序列化
- python-django rest framework框架之路由
- 使用Django rest framework api时,客户端返回结果为html标签
- django-rest-framework序列化的使用(一)
- Django-rest-framework
- 使用Restframework+django_filters快速实现Django的API
- Django 之REST framework学习:Authentication认证流程源码剖析
- django-rest-framework指南(2):Requests and Responses
- django-rest-framework指南(3):Class Based Views(类视图)
- 一个比较全面的DJANGO_REST_FRAMEWORK的CASE
- Django-Rest-Framework 教程: 快速入门