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

相关推荐
xqqxqxxq10 分钟前
树结构技术学习笔记
数据结构·笔记·学习
十月的皮皮1 小时前
C语言学习笔记202606008- 三角形判断(3种方法)
c语言·笔记·学习
XGeFei1 小时前
【Fastapi学习笔记(6)】—— Fastapi文件上传、请求头自动转换
笔记·学习·fastapi
嘶哈哈哈1 小时前
嘉立创 EDA 入门实操笔记:从原理图到 PCB 布线、差分对、覆铜与 DRC 检查
开发语言·笔记·php
一口吃俩胖子1 小时前
【脉宽调制DCDC功率变换学习笔记024】频域性能
笔记·学习
吃着火锅x唱着歌1 小时前
深度探索C++对象模型 学习笔记 第五章 构造、解构、拷贝语意学(2)
c++·笔记·学习
中小企业实战军师刘孙亮2 小时前
快消纺织五金怎么融合?三大业态协同发展战略思路-佛山鼎策创局破局增长咨询
学习·面试·创业创新·制造·学习方法
Upsy-Daisy2 小时前
Hermes Agent 学习笔记 04:工具调用系统,让 Agent 从“会说”变成“会做”
java·笔记·学习
楼田莉子2 小时前
C++20新特性:协程
开发语言·c++·后端·学习·c++20
weixin_428005302 小时前
C#调用 AI学习从0开始-第2阶段(Function Calling+工具调用智能体)-第9天实战-实现计算器工具
开发语言·学习·c#·functioncalling·ai实现计算器工具