码迷,mamicode.com
首页 > 编程语言 > 详细

python项目_实现注册功能

时间:2020-06-20 14:00:26      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:对不起   user   声明   port   username   sms   span   pytho   imp   

1.完成路由接口的填写

2.完成视图代码的编写

from rest_framework.generics import CreateAPIView
from .models import User
from .serializers import UserModelSerializer
class UserAPIView(CreateAPIView):
    """用户注册"""
    queryset = User.objects.all()
    serializer_class = UserModelSerializer

3.完成序列化器代码的编写

from rest_framework import serializers
from .models import User
import re

class UserModelSerializer(serializers.ModelSerializer):
    """用户序列化器"""
    sms = serializers.CharField(write_only=True, max_length=6, min_length=4, help_text="短信验证码")
    token = serializers.CharField(read_only=True, min_length=1, help_text="jwt")
    class Meta:
        model = User
        fields = ["id","username","token","password","mobile","sms"]
        # 字段的额外声明
        extra_kwargs = {
            "id":{ "read_only": True, },
            "username":{ "read_only": True, },
            "password":{ "write_only": True, "min_length": 6, },
            "mobile":{ "write_only": True, "min_length": 11 },
        }

    def validate(self, attrs):
        mobile = attrs.get("mobile")
        ret = re.match(r"1[3-9]\d{9}$",mobile)
        if not ret:
            raise serializers.ValidationError("对不起,手机格式错误!")

        try:
            User.objects.get(mobile=mobile)
            raise serializers.ValidationError("对不起,当前手机号已经被注册!")
        except User.DoesNotExist:
            pass

        # todo 验证短信是否正确

        return attrs     ##返回值的作用是???

    def create(self, validated_data):
        mobile = validated_data.get("mobile")
        password = validated_data.get("password")
        username=mobile
        try:
            user = User.objects.create_user(username=username, password=password,mobile=mobile)
        except:
            raise serializers.ValidationError("创建用户失败!")

        # 手动生成jwt
        from rest_framework_jwt.settings import api_settings
        jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
        jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
        payload = jwt_payload_handler(user)
        user.token = jwt_encode_handler(payload)

        return user

 

python项目_实现注册功能

标签:对不起   user   声明   port   username   sms   span   pytho   imp   

原文地址:https://www.cnblogs.com/jalen-123/p/13168013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!