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

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 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

测试自定义权限

使用非超级用户访问

使用超级用户访问

目录
打赏
0
0
0
0
4
分享
相关文章
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
88 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
智能文件解析:体验阿里云多模态信息提取解决方案
在当今数据驱动的时代,信息的获取和处理效率直接影响着企业决策的速度和质量。然而,面对日益多样化的文件格式(文本、图像、音频、视频),传统的处理方法显然已经无法满足需求。
111 4
智能文件解析:体验阿里云多模态信息提取解决方案
多模态数据信息提取解决方案评测报告!
阿里云推出的《多模态数据信息提取》解决方案,利用AI技术从文本、图像、音频和视频中提取关键信息,支持多种应用场景,大幅提升数据处理效率。评测涵盖部署体验、文档清晰度、模板简化、示例验证及需求适配性等方面。方案表现出色,部署简单直观,功能强大,适合多种业务场景。建议增加交互提示、多语言支持及优化OCR和音频转写功能...
123 3
多模态数据信息提取解决方案评测报告!
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
OpenAI API深度解析:参数、Token、计费与多种调用方式
随着人工智能技术的飞速发展,OpenAI API已成为许多开发者和企业的得力助手。本文将深入探讨OpenAI API的参数、Token、计费方式,以及如何通过Rest API(以Postman为例)、Java API调用、工具调用等方式实现与OpenAI的交互,并特别关注调用具有视觉功能的GPT-4o使用本地图片的功能。此外,本文还将介绍JSON模式、可重现输出的seed机制、使用代码统计Token数量、开发控制台循环聊天,以及基于最大Token数量的消息列表限制和会话长度管理的控制台循环聊天。
1195 7
阿里云服务器租用、注册域名、备案及域名解析完整流程参考(图文教程)
对于很多初次建站的用户来说,选购云服务器和注册应及备案和域名解析步骤必须了解的,目前轻量云服务器2核2G68元一年,2核4G4M服务器298元一年,域名注册方面,阿里云推出域名1元购买活动,新用户注册com和cn域名2年首年仅需0元,xyz和top等域名首年仅需1元。对于建站的用户来说,购买完云服务器并注册好域名之后,下一步还需要操作备案和域名绑定。本文为大家展示阿里云服务器的购买流程,域名注册、绑定以及备案的完整流程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
4217 5
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
104 5
非阿里云注册域名如何在云解析DNS设置解析?
非阿里云注册域名如何在云解析DNS设置解析?
django获取request请求头信息,获取Content-Type
django获取request请求头信息,获取Content-Type
66 4

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等