Django学习笔记九:RESTAPI添加用户认证和授权

在Django REST Framework中添加用户认证和授权,通常涉及以下几个步骤:

1. 认证(Authentication)

认证是指确定用户身份的过程。Django REST Framework提供了多种认证方式:

  • Token Authentication:通过一个密钥(Token)来识别用户。用户登录后,系统会生成一个Token,之后用户需要在请求的Header中携带这个Token进行认证 。
  • Session Authentication:基于Django的会话框架,通过session来识别用户。
  • Basic Authentication:一种标准的HTTP认证方式,通过用户名和密码进行认证。
  • OAuth2:一种授权框架,允许第三方应用获取有限的访问权限。

可以在settings.py中配置默认的认证方式:

python 复制代码
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ],
}

2. 权限(Permissions)

权限是指确定用户是否有权执行特定操作的过程。Django REST Framework提供了一些内置的权限类:

  • AllowAny:允许所有用户访问。
  • IsAuthenticated:只允许认证用户访问。
  • IsAdminUser:只允许管理员用户访问。
  • IsAuthenticatedOrReadOnly:认证用户可以进行任何操作,未认证用户只能进行读取操作。

在视图中设置权限类:

python 复制代码
from rest_framework.permissions import IsAuthenticated

class MyView(generics.GenericAPIView):
    permission_classes = [IsAuthenticated]

或者在settings.py中设置默认权限:

python 复制代码
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
}

3. 自定义权限

如果内置的权限类不满足需求,可以创建自定义权限类:

python 复制代码
from rest_framework import permissions

class IsOwnerOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.owner == request.user

然后在视图中使用:

python 复制代码
class MyView(generics.GenericAPIView):
    permission_classes = [IsOwnerOrReadOnly]

4. 使用第三方包

对于更复杂的认证需求,如JWT或OAuth2,可以使用第三方包:

  • djangorestframework-simplejwt:用于JWT认证。
  • django-oauth-toolkit:用于OAuth2认证。

配置这些包通常涉及安装包、添加到INSTALLED_APPS、配置URLs和设置必要的认证类。

5. 测试和部署

在开发过程中,确保对认证和权限进行充分测试,包括:

  • 测试未认证用户和认证用户的访问权限。
  • 测试不同角色(如管理员、普通用户)的权限。
  • 测试认证失效和权限错误的情况。

在部署时,确保API的安全性,比如使用HTTPS来保护Token和其他敏感信息的传输。

通过这些步骤,你可以为Django REST Framework的API添加用户认证和授权,确保API的安全性和数据的保护。

相关推荐
c8i10 小时前
drf初步梳理
python·django
使一颗心免于哀伤10 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
c8i1 天前
django中的FBV 和 CBV
python·django
_落纸2 天前
三大基础无源电子元件——电阻(R)、电感(L)、电容(C)
笔记
Alice-YUE2 天前
【CSS学习笔记3】css特性
前端·css·笔记·html
2303_Alpha2 天前
SpringBoot
笔记·学习
萘柰奈2 天前
Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
学习·unity
沐矢羽2 天前
Tomcat PUT方法任意写文件漏洞学习
学习·tomcat
好奇龙猫2 天前
日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(10):91-100语法+考え方13
学习
向阳花开_miemie2 天前
Android音频学习(十八)——混音流程
学习·音视频