权限:为不同的用户赋予访问不用的视图
一、.django中restframwork的权限基本使用:定义一个权限类,在其中实现has_permission
方法, 然后在视图函数中配置就行
# 权限类
class Mypermission(object):
def has_permission(self,request, view):
pass
# 使用:permission_classes =[权限1,权限2,]
class UserInfoView(APIView):
"""订单(普通用户和Vip)"""
permission_classes =[Mypermission]
def get(self, request, *args, **kwargs):
pass
二.源码流程
略
三.内置权限
源码:
class BasePermission(metaclass=BasePermissionMetaclass):
"""
A base class from which all permission classes should inherit.
"""
def has_permission(self, request, view):
"""
Return `True` if permission is granted, `False` otherwise.
"""
return True
def has_object_permission(self, request, view, obj):
"""
Return `True` if permission is granted, `False` otherwise.
"""
return True
所以从上面源码可以看出,自己写认证类的时候要继承BasePermission
并在其中实现has_permission
方法来实现。
实现方法:
from rest_framework.permissions import BasePermission
# 1. 继承django内置的权限来实现自己的权限
class Mypermission(BasePermission):
# 2.实现权限方法
def has_permission(self, request, view):
pass
class UserInfoView(APIView):
"""订单(普通用户和Vip)"""
# 3.在需要的视图中配置权限
permission_classes =[Mypermission]
def get(self, request, *args, **kwargs):
pass
其他:当然也可以跟认证一样在全局实现配置。
四、总结:
1.使用的时候,首先要继承BasePermission
来自定义自己的权限类,然后实现has_permission
方法,返回只有二个,True
,False
。
2.全局配置,在settings中配置一个路径,如果在局部视图中使用,在视图函数中加入一个permission_class = [权限,]