当前位置:   article > 正文

drf之权限_django drf中视图类如何设置权限,类下的方法函数如何设置权限

django drf中视图类如何设置权限,类下的方法函数如何设置权限

权限Permissions

权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。

  • 在执行视图的dispatch()方法前,会先进行视图访问权限的判断
  • 在通过get_object()获取具体对象时,会进行模型对象访问权限的判断

2.1 自定义权限

2.1.1 编写权限类

  1. # 限制只有超级用户能访问
  2. from rest_framework.permissions import BasePermission
  3. class UserPermission(BasePermission):
  4. message = '不是超级用户,查看不了'
  5. def has_permission(self, request, view):
  6. # user_type = request.user.get_user_type_display()
  7. # if user_type == '超级用户':
  8. # 权限在认证之后,所以能取到user
  9. user_type = request.user.user_type
  10. print(user_type)
  11. if user_type == 1:
  12. return True
  13. else:
  14. return False

2.1.2 全局使用

  1. REST_FRAMEWORK={
  2. "DEFAULT_AUTHENTICATION_CLASSES":["app01.service.auth.Authentication",],
  3. "DEFAULT_PERMISSION_CLASSES":["app01.service.permissions.SVIPPermission",]
  4. }

2.1.3 局部使用

  1. # 局部使用只需要在视图类里加入:
  2. permission_classes = [UserPermission,]

2.1.4 说明

  1. 如需自定义权限,需继承rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部
  2. - `.has_permission(self, request, view)`
  3. 是否可以访问视图, view表示当前视图对象
  4. - `.has_object_permission(self, request, view, obj)`
  5. 是否可以访问数据对象, view表示当前视图, obj为数据对象

2.2 内置权限

2.2.1 内置权限类

  1. from rest_framework.permissions import AllowAny,IsAuthenticated,IsAdminUser,IsAuthenticatedOrReadOnly
  2. - AllowAny 允许所有用户
  3. - IsAuthenticated 仅通过认证的用户
  4. - IsAdminUser 仅管理员用户
  5. - IsAuthenticatedOrReadOnly 已经登陆认证的用户可以对数据进行增删改操作,没有登陆认证的只能查看数据。

2.2.2 全局使用

可以在配置文件中全局设置默认的权限管理类,如

  1. REST_FRAMEWORK = {
  2. ....
  3. 'DEFAULT_PERMISSION_CLASSES': (
  4. 'rest_framework.permissions.IsAuthenticated',
  5. )
  6. }

如果未指明,则采用如下默认配置

  1. 'DEFAULT_PERMISSION_CLASSES': (
  2. 'rest_framework.permissions.AllowAny',
  3. )

2.2.3 局部使用

也可以在具体的视图中通过permission_classes属性来设置,如

  1. from rest_framework.permissions import IsAuthenticated
  2. from rest_framework.views import APIView
  3. class ExampleView(APIView):
  4. permission_classes = (IsAuthenticated,)
  5. ...

2.2.4 实际操作

  1. # 创建超级用户,登陆到admin,创建普通用户(注意设置职员状态,也就是能登陆)
  2. # 全局配置IsAuthenticated
  3. # setting.py
  4. 'DEFAULT_PERMISSION_CLASSES': (
  5. 'rest_framework.permissions.IsAuthenticated',
  6. )
  7. # urls.py
  8. path('test/', views.TestView.as_view()),
  9. # views.py
  10. class TestView(APIView):
  11. def get(self,request):
  12. return Response({'msg':'个人中心'})
  13. # 登陆到admin后台后,直接访问可以,如果没登陆,不能访问
  14. ##注意:如果全局配置了
  15. rest_framework.permissions.IsAdminUser
  16. # 就只有管理员能访问,普通用户访问不了
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/944402
推荐阅读
相关标签
  

闽ICP备14008679号