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

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
全局流量管理 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

测试自定义权限

使用非超级用户访问

使用超级用户访问

相关文章
|
13天前
|
数据采集 存储 数据可视化
基于python django的智联招聘数据采集与分析系统,有登录注册,可自主选择采集内容
本文介绍了一个基于Python Django框架的智联招聘数据采集与分析系统,该系统具备登录注册功能,允许用户自主选择采集内容,并通过对数据的分析和可视化展示,帮助企业和招聘者优化招聘策略。
基于python django的智联招聘数据采集与分析系统,有登录注册,可自主选择采集内容
|
13天前
|
数据采集 数据可视化 数据挖掘
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
本文介绍了一个基于Python和Django框架,使用Scrapy进行去哪儿网数据采集与分析的项目,包括实现登录注册功能、MD5加密以及通过可视化大屏展示分析结果的综合系统。
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
|
12天前
|
网络协议 网络安全
DNS信息收集详解
DNS信息收集详解
12 1
|
13天前
|
存储 数据库 数据安全/隐私保护
Python Django的学生选课管理系统,实现多用户登录注册,可选课可评课
本文介绍了一个基于Python Django框架开发的多功能学生选课管理系统,该系统具备教师和学生两个角色的权限管理,支持课程管理、成绩录入、选课申请、成绩查询和个人信息管理等功能,并注重数据安全与隐私保护。
Python Django的学生选课管理系统,实现多用户登录注册,可选课可评课
|
13天前
|
数据采集 数据可视化 前端开发
基于python django的当当网书籍数据采集与可视化分析,实现数据采集与可视化分析,有登录注册和后台管理
本文介绍了一个基于Python和Django框架的当当网书籍数据采集与可视化分析项目,该项目实现了数据采集、用户登录注册、后台管理,并利用数据清洗、分析和可视化技术在前端展示分析结果。
基于python django的当当网书籍数据采集与可视化分析,实现数据采集与可视化分析,有登录注册和后台管理
|
4天前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
12 0
|
4天前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
18 0
|
1月前
|
数据采集 分布式计算 DataWorks
DataWorks产品使用合集之任务工作流中遇到了日志信息显示参数值没有正确解析的问题,该如何处理
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
1月前
|
缓存 监控 数据挖掘
开山网商品详情数据接口解析:获取女鞋商品信息的全面指南
**开山网(K3.item_get)商品详情API提供实时商品数据,如名称、品牌、价格等,用于电商运营和分析。获取App Key和App Secret后,调用HTTP接口以JSON或XML获取数据,并集成到系统中。缓存优化和数据分析可提升效率,适用于商品比价、选品分析和市场监控,助力企业制定策略。**
|
30天前
|
监控 负载均衡 安全
微服务架构下的服务发现与注册:技术深度解析
【7月更文挑战第20天】服务发现与注册是微服务架构中不可或缺的一部分,它确保了服务间的动态发现和通信。通过选择合适的实现工具和遵循最佳实践,可以构建出高效、可靠、可扩展的微服务系统。随着技术的不断进步,未来我们还将看到更多创新的服务发现与注册解决方案的出现。

推荐镜像

更多