1. Django REST framwork的权限验证是什么
Django REST Framework提供了易于使用的工具,能够轻松加入由 Django 提供的许多安全性特性中,其中包括针对常见攻击(如 Cross Site Scripting/XSS 或 SQL 注入)的防御措施,以及使用 Django 的身份验证系统来管理用户。
在Django REST framwork中,权限验证是指对于API视图中请求的授权验证,包括是否有权访问API、是否能够对指定资源执行某些操作等。使用权限验证可以确保API资源的完整性和保密性,并控制用户对API的访问权限。
2. Django REST framwork支持的权限验证
Django REST Framework提供了许多不同的权限类,可以用来在视图中控制用户访问资源的方式。下面介绍几个最常用的权限类。
2.1 IsAuthenticated
这个权限类用于验证是否已经身份验证,并且要求访问API时,必须先对用户进行身份验证。
在settings.py中设置显示未经身份验证的 API 请求的访问拒绝消息
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
)
}
2.2 IsAdminUser
这个权限类只允许已经被标记为管理员用户的用户访问API资源。
在settings.py中为管理员设置权限
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAdminUser',
)
}
2.3 AllowAny
这个权限类允许任何人都可以访问API资源。这个权限类只应该在非敏感数据的资源上使用。
在settings.py中关闭全局验证
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
)
}
3. 实现权限验证的示例
下面是一个使用Django REST framwork的权限验证的API视图实例,它限制了只有管理员用户才有权限更改数据。
from rest_framework import generics, permissions
class UpdateDataView(generics.UpdateAPIView):
permission_classes = [permissions.IsAdminUser]
def put(self, request, *args, **kwargs):
# 执行更新数据的逻辑
pass
在上面的示例中,类UpdateDataView继承了generics.UpdateAPIView,表示这是一个用于更新数据的视图。权限类指定了只有IsAdminUser(管理员)才有权限执行put方法。当访问的请求是put请求时,put函数将会执行更新数据的逻辑。