django drf 实现只有超级用户才能注册账号(涉及自定义权限permissions,获取token信息解析token信息)

简介: django drf 实现只有超级用户才能注册账号(涉及自定义权限permissions,获取token信息解析token信息)

编写注册序列化器

和之前的登录序列化器写在一个地方

from django.contrib.auth import get_user_model
User = get_user_model()
class RegisterSerializers(serializers.ModelSerializer):
    '''增加用户的序列化器'''
    class Meta:
        # 指定模型类
        model = User
        # 指定模型字段
        fields = ['username','password','mobile','email']
        # 为序列化器字段添加约束
        extra_kwargs = {
            'username': {
                'max_length': 20,
                'min_length': 3
            },
            'password': {
                'max_length': 20,
                'min_length': 6,
                'write_only': True
            },
        }
    def create(self, validated_data):
        '''重写create方法实现,将密码加密后保存'''
        # 将密码加密后保存
        user = User.objects.create_user(**validated_data)
        return user

编写注册视图

from django.contrib.auth import get_user_model
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_simplejwt.views import TokenViewBase
from apps.users.permissions import IsSuperUser
from .serializers import MyTokenSerializer, RegisterSerializers
User = get_user_model()
class RegisterView(APIView):
  #使用权限(permission_classes = (IsSuperUser,)),IsSuperUser这是自定义权限,只允许超级用户访问
  #(IsSuperUser,)这样才是元组,(IsSuperUser)这个不是
    permission_classes = (IsSuperUser,)
    def post(self,request):
        re=RegisterSerializers(data=request.data)
        username=request.data['username']
        try:
            if re.is_valid():
                re.save()
                return Response(data=re.data, status=status.HTTP_200_OK)
            return Response(data=re.errors, status=status.HTTP_400_BAD_REQUEST)
        except:
            # 虽然报错了,但是数据确实落库了,只需要判断下前端传的用户名在数据库里面能找到就行
            user=User.objects.filter(username=username).first()
            if user:
                return Response({'msg':'注册成功','username':username},status=status.HTTP_200_OK)
            return Response({'msg':'注册失败'},status=status.HTTP_400_BAD_REQUEST)

配置二级路由,一级路由和之前登录一样

测试注册视图

通过性测试

失败测试

自定义权限

通过解析token信息在数据库查询是否属于超级用户来判断是否可以访问这个接口

import base64
from rest_framework import permissions
from django.contrib.auth import get_user_model
User = get_user_model()
def get_token_user_id(token_raw):
    token = token_raw.replace('Bearer ', '')
    token = token.split('.')
    # base64加密需要是4的整数倍,不够的话要用=补齐
    user_info_mi = token[1]
    print(len(user_info_mi))
    if len(user_info_mi) % 4 == 0:
        user_info_mi = user_info_mi
    else:
        user_info_mi = user_info_mi + '='
    user_info = base64.b64decode(user_info_mi).decode("utf-8")
    print(user_info)
    #字符转下字典
    user_info = eval(user_info)
    return user_info['user_id']
class IsSuperUser(permissions.BasePermission):
    '''只有管理员才能操作注册接口'''
    def has_permission(self, request, view):
        """
        :param request: 请求参数信息
        :param view: #当前访问的视图
        :return: bool
        """
        # 去headers里面拿到token的信息
        token_raw = request.headers.get('Authorization')
        is_superuser = User.objects.filter(id=get_token_user_id(token_raw)).first().is_superuser
        print(is_superuser)
        if is_superuser:
            return True
        return False

测试自定义权限

使用非超级用户访问

使用超级用户访问

相关文章
|
4月前
|
Shell 数据库 网络架构
Django+DRF 实战:从异常捕获到自定义错误信息(下)
本文详解了 Django REST Framework 中 ValidationError 的验证流程与优先级,涵盖字段内置验证、自定义验证方法、对象级验证及数据库约束,并通过实战演示如何自定义异常提示信息。
125 1
Django+DRF 实战:从异常捕获到自定义错误信息(下)
|
4月前
|
Python
Django+DRF 实战:自定义异常处理流程
本文详解DRF异常处理流程,包括默认处理机制与自定义异常处理器的实现方法。通过源码分析和实战示例,讲解如何全局捕获并统一返回错误信息,并结合日志记录与友好提示提升项目健壮性。适用于Django进阶开发。
176 4
|
4月前
|
数据安全/隐私保护 网络架构 UED
Django+DRF 实战:从异常捕获到自定义错误信息
本文介绍了DRF(Django REST framework)中的异常处理机制,重点讲解了内置异常类ValidationError的使用场景与示例。同时通过用户注册功能的实战演示,展示了如何在序列化器中自定义参数校验规则,并在视图中捕获并返回结构化的错误信息,提升接口的健壮性与用户体验。
93 0
|
8月前
|
机器学习/深度学习 人工智能 文字识别
从“泛读”到“精读”:合合信息文档解析如何让大模型更懂复杂文档?
随着deepseek等大模型逐渐步入视野,理论上文档解析工作应能大幅简化。 然而,实际情况却不尽如人意。当前的多模态大模型虽然具备强大的视觉与语言交互能力,但在解析非结构化文档时,仍面临复杂版式、多元素混排以及严密逻辑推理等挑战。
278 0
|
10月前
|
Serverless 对象存储 人工智能
智能文件解析:体验阿里云多模态信息提取解决方案
在当今数据驱动的时代,信息的获取和处理效率直接影响着企业决策的速度和质量。然而,面对日益多样化的文件格式(文本、图像、音频、视频),传统的处理方法显然已经无法满足需求。
388 4
智能文件解析:体验阿里云多模态信息提取解决方案
|
10月前
|
文字识别 开发者 数据处理
多模态数据信息提取解决方案评测报告!
阿里云推出的《多模态数据信息提取》解决方案,利用AI技术从文本、图像、音频和视频中提取关键信息,支持多种应用场景,大幅提升数据处理效率。评测涵盖部署体验、文档清晰度、模板简化、示例验证及需求适配性等方面。方案表现出色,部署简单直观,功能强大,适合多种业务场景。建议增加交互提示、多语言支持及优化OCR和音频转写功能...
337 3
多模态数据信息提取解决方案评测报告!
|
10月前
|
数据采集 XML API
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
|
11月前
|
JSON 自然语言处理 Java
OpenAI API深度解析:参数、Token、计费与多种调用方式
随着人工智能技术的飞速发展,OpenAI API已成为许多开发者和企业的得力助手。本文将深入探讨OpenAI API的参数、Token、计费方式,以及如何通过Rest API(以Postman为例)、Java API调用、工具调用等方式实现与OpenAI的交互,并特别关注调用具有视觉功能的GPT-4o使用本地图片的功能。此外,本文还将介绍JSON模式、可重现输出的seed机制、使用代码统计Token数量、开发控制台循环聊天,以及基于最大Token数量的消息列表限制和会话长度管理的控制台循环聊天。
3591 7
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
11月前
|
域名解析 弹性计算 安全
阿里云服务器租用、注册域名、备案及域名解析完整流程参考(图文教程)
对于很多初次建站的用户来说,选购云服务器和注册应及备案和域名解析步骤必须了解的,目前轻量云服务器2核2G68元一年,2核4G4M服务器298元一年,域名注册方面,阿里云推出域名1元购买活动,新用户注册com和cn域名2年首年仅需0元,xyz和top等域名首年仅需1元。对于建站的用户来说,购买完云服务器并注册好域名之后,下一步还需要操作备案和域名绑定。本文为大家展示阿里云服务器的购买流程,域名注册、绑定以及备案的完整流程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。

推荐镜像

更多
  • DNS