为了更好的理解“Django REST framework的权限验证实例”的完整攻略,我将按步骤逐一介绍。
一、Django REST framework的权限验证机制
Django REST framework是一个PythonWeb框架,它的权限验证机制是很完备的,实现起来也比较简单。简单来说,Django REST framework的权限验证分为两个步骤:
- 配置全局权限认证规则
- 配置视图方法级的权限认证规则
如果视图函数没有对应的权限认证规则,Django REST framework将默认拒绝所有请求。
二、全局权限验证规则
在Django REST framework中,全局权限验证规则是在setting.py文件中配置的。下面是一个全局权限验证规则的示例:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
这个配置将会把整个API的权限限制在已经登录的用户身上。如果使用未登录的用户访问的话,将会得到一个403 Forbidden的错误响应。
三、方法级权限验证规则
Django REST framework也提供了视图方法级别的权限验证规则。这些规则是一组类,这些类需要根据请求的视图方法来进行验证。下面是一个示例,演示了如何配置基于视图方法的权限认证规则:
from rest_framework import permissions
class IsOwnerOrReadOnly(permissions.BasePermission):
"""
Custom permission to only allow owners of an object to edit it.
"""
def has_object_permission(self, request, view, obj):
# Read permissions are allowed to any request,
# so we'll always allow GET, HEAD or OPTIONS requests.
if request.method in permissions.SAFE_METHODS:
return True
# Write permissions are only allowed to the owner of the snippet.
return obj.owner == request.user
上面的示例代码定义了一个IsOwnerOrReadOnly
类,视图方法需要通过该类进行认证。这些类必须实现一个名为has_permission
或has_object_permission
方法。这个方法将会在请求中被执行,并且必须返回一个True或者False的值,代表是否拥有权限。
四、示例说明
下面是两个例子,展示了如何使用基于视图方法的权限认证规则。
例一:使用基于视图方法的权限认证规则
from rest_framework import generics
from rest_framework import permissions
from myapp.models import MyModel
from myapp.serializers import MyModelSerializer
class MyModelDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly]
上面这个例子展示了如何使用基于视图方法的权限认证规则。其中permission_classes
属性指定了一个列表,通过这个列表给视图方法设定对应的权限认证规则。在这个示例中,访问该API需要登录,而且只有该对象的拥有者才有修改的权限。
例二:使用全局权限认证规则
from rest_framework import generics
from myapp.models import MyModel
from myapp.serializers import MyModelSerializer
class MyModelList(generics.ListCreateAPIView):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
上面这个例子展示了如何使用全局权限认证规则。这个视图类给客户端提供了一个只读的API,因为这个视图类没有设定访问权限认证规则。Django REST framework会使用全局权限认证规则来进行验证。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django REST framwork的权限验证实例 - Python技术站