• Django信号量实现用户密码修改


    一、完善用户注册

    添加一条用户短信验证码数据之后进行验证。

    user/views.py

    class UserViewset(CreateModelMixin,viewsets.GenericViewSet):
        '''
        用户
        '''
        serializer_class = UserRegSerializer
        queryset = User.objects.all()

    user/serializer.py添加

    fields = ('username','code','mobile','password')

    (2)password不能明文显示和加密保存

    需要重载Create方法

    #输入密码的时候不显示明文
        password = serializers.CharField(
            style={'input_type': 'password'},label=True,write_only=True
        )
    
        #密码加密保存
        def create(self, validated_data):
            user = super(UserRegSerializer, self).create(validated_data=validated_data)
            user.set_password(validated_data["password"])
            user.save()
            return user

    这是重载Create方法,下面介绍如何用信号量来实现

    信号量

    (1)users下面创建signals.py

    from django.db.models.signals import post_save
    from django.dispatch import receiver
    from rest_framework.authtoken.models import Token
    
    from django.contrib.auth import get_user_model
    User = get_user_model()
    
    
    # post_save:接收信号的方式
    #sender: 接收信号的model
    @receiver(post_save, sender=User)
    def create_user(sender, instance=None, created=False, **kwargs):
        # 是否新建,因为update的时候也会进行post_save
        if created:
            password = instance.password
            #instance相当于user
            instance.set_password(password)
            instance.save()

    (2)还需要重载配置

    users/apps.py

    from django.apps import AppConfig
    
    class UsersConfig(AppConfig):
        name = 'users'
        verbose_name = "用户管理"
    
        def ready(self):
            import users.signals

    AppConfig自定义的函数,会在django启动时被运行

    现在添加用户的时候,密码就会自动加密存储了

  • 相关阅读:
    Thymeleaf介绍和基本语法使用
    2020版idea及没有default Settings设置的idea,修改默认maven设置、本地仓库的方法
    创建springboot项目的两种方式
    2020版IDEA新建打开*.vue文件
    IDEA新手常用快捷键
    搭建一个maven的web项目
    eclipse、idea引入外部jar包教程
    序列化笔记
    转换流笔记
    缓冲流笔记
  • 原文地址:https://www.cnblogs.com/mxsf/p/10675189.html
Copyright © 2020-2023  润新知