@api_view的权限认证

函数API的实现

from rest_framework.decorators import api_view

@api_view(['GET', 'POST'])
def ClubSonAPI(request, format=None,pk=None):
    if request.method == 'GET':
        club = models.ClubSon.objects.all()
        serializer = serializers.ClubSon(instance=club, many=True)
        return Response(serializer.data)
    elif request.method == 'POST':
        pass
  • pk的作用
    • pk是对单条数据作用

权限认证

from rest_framework.decorators import api_view,authentication_classes,permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import SessionAuthentication, TokenAuthentication

@api_view(['GET', 'POST'])
@permission_classes([IsAuthenticated])
@authentication_classes([TokenAuthentication])
def ClubSonAPI(request, format=None,pk=None):
    if request.method == 'GET':
    	if request.user.has_perm('monitor.view_googletop'):      //权限验证
            club = models.ClubSon.objects.all()
            serializer = serializers.ClubSon(instance=club, many=True)
            return Response(serializer.data)
	elif request.method == 'POST':
        pass
  • 三个装饰器顺序不能错
  • has_perm 是验证权限的函数,参数格式为 应用.codename ,其中应用即app名称,codename在表 auth_permission 中,对应的是每个model的增删改查权限

权限认证模版

if request.user.has_perm('monitor.view_googletop'):
    # 权限认证完成后可以执行的代码
    # 所需要的权限跟进实际需求更改,本处权限判断为随意添加的
else:
    return error(message='没有访问权限')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django REST Framework 提供了多种方式来设置接口权限: 1. 基于视图函数的权限控制 可以在视图函数中通过 `permission_classes` 属性设置权限类,例如: ```python from rest_framework.permissions import IsAuthenticated from rest_framework.decorators import api_view, permission_classes from rest_framework.response import Response @api_view(['GET']) @permission_classes([IsAuthenticated]) def my_view(request): # 只有已认证用户才能访问 return Response({'message': 'Hello, World!'}) ``` 2. 基于视图类的权限控制 也可以在视图类中通过 `permission_classes` 属性设置权限类,例如: ```python from rest_framework.permissions import IsAuthenticated from rest_framework.views import APIView from rest_framework.response import Response class MyView(APIView): permission_classes = [IsAuthenticated] def get(self, request): # 只有已认证用户才能访问 return Response({'message': 'Hello, World!'}) ``` 3. 全局权限控制 可以在 `settings.py` 文件中通过 `DEFAULT_PERMISSION_CLASSES` 设置全局权限类,例如: ```python REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ] } ``` 这样所有的视图函数和视图类都会使用 `IsAuthenticated` 权限类进行权限控制。 4. 自定义权限类 除了使用 Django REST Framework 提供的权限类外,还可以自定义权限类。自定义权限类需要实现 `BasePermission` 类,并实现 `has_permission` 方法,例如: ```python from rest_framework.permissions import BasePermission class MyPermission(BasePermission): def has_permission(self, request, view): # 自定义权限控制逻辑 return True ``` 然后在视图函数或视图类中使用: ```python @api_view(['GET']) @permission_classes([MyPermission]) def my_view(request): # 自定义权限控制逻辑 return Response({'message': 'Hello, World!'}) ``` 或者在全局设置中使用: ```python REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'path.to.MyPermission', ] } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值