zoukankan      html  css  js  c++  java
  • 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启动时被运行

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

  • 相关阅读:
    简单工厂模式
    1.go的Hello
    Scrapy003-项目流程
    Django1.9开发博客(6)- 模板继承
    Django开发博客- 页面美化
    Django开发博客- 三部曲
    Django开发博客- 部署
    Django开发博客- 模型
    Django开发博客 入门篇
    内装式模块
  • 原文地址:https://www.cnblogs.com/mxsf/p/10675189.html
Copyright © 2011-2022 走看看