• 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启动时被运行

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

  • 相关阅读:
    python3获取文件夹大小
    git master分支被污染,dev是最新稳定的
    优化经验杂记
    kong
    prometheus
    C# 线程执行带参方法的几种写法(ThreadStart,delegate (),()=>)
    MySql字符集utf8mb4和utf8区别
    程序员必备的一些数学基础知识
    hbase统计表的行数的三种方法
    Flink实时计算pv、uv的几种方法
  • 原文地址:https://www.cnblogs.com/mxsf/p/10675189.html
Copyright © 2020-2023  润新知