Django ModelViewSet 认证

一、Django ModelViewSet简介

在 Django REST framework 中,ModelViewSet 是一种可以将常见的列表、详细视图、创建、更新、删除等操作组合起来的视图。这样可以帮助我们减少代码量,使代码结构更加清晰。

以下是一个简单的例子:

python 复制代码
from rest_framework import viewsets
from .models import MyModel
from .serializers import MyModelSerializer


class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

上述代码中,我们定义了一个 MyModelViewSet,继承自ModelViewSet,它代表了对MyModel模型的基本 CRUD 操作。

二、Django ModelViewSet 认证设置

Django REST framework 提供了一种简单而灵活的方式来设置API的认证规则,通过在ModelViewSet中使用authentication_classes属性,可以设置认证方式。

下面是一个设置的简单示例:

python 复制代码
from rest_framework import viewsets
from rest_framework.authentication import TokenAuthentication
from .models import MyModel
from .serializers import MyModelSerializer


class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
    authentication_classes = [TokenAuthentication]

上述代码设置了 Token 认证方式,用户请求 API 时需在 Header 中带有 Token。

三、Django 默认认证设置

如果你的项目中大部分的 API 都使用相同的认证方式,那么你可以在项目设置中进行全局的认证设置,这样可以避免在每个视图中都设置认证方式。

下面是一个设置的简单示例:

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

上述代码设置了项目默认的认证方式为 Token 认证。

四、Django 自定义认证

除了 Django REST framework 提供的认证方式,你也可以自定义认证方式,只需继承BaseAuthentication类,重写authenticate方法。

下面是一个自定义认证的简单示例:

python 复制代码
from rest_framework import authentication
from rest_framework import exceptions


class MyAuthentication(authentication.BaseAuthentication):
    def authenticate(self, request):
        token = request.META.get('HTTP_MYTOKEN')
        if not token:
            return None

        if token != 'my_token':
            raise exceptions.AuthenticationFailed('认证失败!')

        return (token, None)

在这个示例中,我们创建了一个名为 MyAuthentication 的自定义认证类。在 authenticate 方法中,我们检查 header 中是否包含 MYTOKEN ,如果不存在则返回 None,让 Django REST framework 使用其他的认证方式。如果存在,但值不等于 'my_token',则抛出认证失败的异常。

总结起来,Django REST framework 提供了强大而灵活的认证设置,使我们可以在项目中轻松地处理 API 的认证问题。

相关推荐
码界筑梦坊15 小时前
111-基于Python的中国旅游用户数据可视化分析系统
python·信息可视化·django·毕业设计·旅游
YJlio16 小时前
10.2.8 以其他账户运行服务(Running services in alternate accounts):为什么“把服务切到某个用户账号下运行”,本质上是在改变服务的整个安全上下文?
python·安全·ios·机器人·django·iphone·7-zip
小熊Coding17 小时前
懂车帝汽车销售数据可视化分析系统
python·信息可视化·django·汽车·数据可视化分析·懂车帝·汽车销售数据分析
ma_de_hao_mei_le1 天前
ntquerysystemiunfomation 数据传递
django
Muyuan19982 天前
22.让 RAG Agent 更像真实产品:聊天页面优化、PDF 上传、知识库重建与检索片段展示
python·django·pdf·fastapi
Muyuan19982 天前
25.Paper RAG Agent 优化记录:上传反馈、计算器安全与 Chunk 参数调整
python·安全·django·sqlite·fastapi
Muyuan19982 天前
26.Paper RAG Agent 展示面收口:截图与项目表达更新记录
人工智能·python·django·fastapi
毕胜客源码3 天前
卷积神经网络的手势识别系统(有技术文档)深度学习 图像识别 卷积神经网络 Django python 人工智能
人工智能·python·深度学习·cnn·django
我叫Double4 天前
遗留-----
django
码农阿豪4 天前
Django接金仓数据库:我踩过的坑和填坑指南
数据库·python·django