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的安全性和数据的保护。

相关推荐
MartinYeung510 小时前
[论文学习]大型语言模型中个人可识别资讯(PII)的机器遗忘技术:UnlearnPII 基准与 PERMU_tok 方法的深度分析
人工智能·学习·语言模型
fanged10 小时前
Linux内核学习21--V4L2学习3(应用)(TODO)
学习
万物更新_11 小时前
vue框架
前端·javascript·vue.js·笔记
上海观智网络11 小时前
上海小程序定制开发合同怎么签?需要注意什么?
经验分享·笔记·小程序
Ab_stupid12 小时前
CTF-Crypto培训笔记-现代密码
笔记·des·aes·rsa·crypto
GHL28427109012 小时前
PowerShell快捷键学习
学习
li-xun12 小时前
我的在线工具箱继续升级:新增 Token 计算器、AI 提示词生成器和开发者格式化工具
javascript·django·html5
IT技术学习12 小时前
打包系统为ISO
笔记
半导体守望者13 小时前
AE电源闭环控制——反应溅射的集成解决方案
经验分享·学习·机器人·自动化·制造
就叫飞六吧13 小时前
数学图形绘制在线网站
笔记