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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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月前
|
存储 缓存 前端开发
Django 后端架构开发:存储层调优策略解析
Django 后端架构开发:存储层调优策略解析
68 2
|
2月前
|
JSON 中间件 数据格式
django获取request请求头信息,获取Content-Type
django获取request请求头信息,获取Content-Type
48 4
|
2月前
|
数据库 数据安全/隐私保护 数据库管理
#099473#基于django的毕业生信息管理招聘系统
#099473#基于django的毕业生信息管理招聘系统
44 4
|
3月前
|
开发工具 Python
django之drf集成swagger
django之drf集成swagger
|
4月前
|
数据采集 存储 数据可视化
基于python django的智联招聘数据采集与分析系统,有登录注册,可自主选择采集内容
本文介绍了一个基于Python Django框架的智联招聘数据采集与分析系统,该系统具备登录注册功能,允许用户自主选择采集内容,并通过对数据的分析和可视化展示,帮助企业和招聘者优化招聘策略。
基于python django的智联招聘数据采集与分析系统,有登录注册,可自主选择采集内容
|
4月前
|
数据采集 数据可视化 数据挖掘
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
本文介绍了一个基于Python和Django框架,使用Scrapy进行去哪儿网数据采集与分析的项目,包括实现登录注册功能、MD5加密以及通过可视化大屏展示分析结果的综合系统。
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
|
4月前
|
存储 数据库 数据安全/隐私保护
Python Django的学生选课管理系统,实现多用户登录注册,可选课可评课
本文介绍了一个基于Python Django框架开发的多功能学生选课管理系统,该系统具备教师和学生两个角色的权限管理,支持课程管理、成绩录入、选课申请、成绩查询和个人信息管理等功能,并注重数据安全与隐私保护。
Python Django的学生选课管理系统,实现多用户登录注册,可选课可评课
|
4月前
|
数据采集 数据可视化 前端开发
基于python django的当当网书籍数据采集与可视化分析,实现数据采集与可视化分析,有登录注册和后台管理
本文介绍了一个基于Python和Django框架的当当网书籍数据采集与可视化分析项目,该项目实现了数据采集、用户登录注册、后台管理,并利用数据清洗、分析和可视化技术在前端展示分析结果。
基于python django的当当网书籍数据采集与可视化分析,实现数据采集与可视化分析,有登录注册和后台管理
|
4月前
|
存储 API 数据库
Django后端架构开发:构建在线云媒资系统思路解析
Django后端架构开发:构建在线云媒资系统思路解析
49 0
|
4月前
|
JSON API 数据安全/隐私保护
Django 后端架构开发:JWT 项目实践与Drf版本控制
Django 后端架构开发:JWT 项目实践与Drf版本控制
88 0

推荐镜像

更多
下一篇
DataWorks