用户注册
Posted zyxzyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户注册相关的知识,希望对你有一定的参考价值。
请求方式POST 请求路径 127.0.0.1:8000/users
前端需要传递username, password, password2, allow(是否同意使用协议), sms_code(短信验证码)
class CreateUserView(CreateAPIView): """用户注册接口""" # 指定序列化器 serializer_class = CreateUserSerializer
# 继承自Modelserializer利用用户模型类映射字段 2 class CreateUserSerializer(serializers.ModelSerializer): 3 """创建用户序列化器""" 4 5 # 1 添加不存在于用户表中的字段校验规则 6 password2 = serializers.CharField(label=‘确认密码‘, write_only=True) 7 sms_code = serializers.CharField(label=‘短信验证码‘, write_only=True) 8 allow = serializers.CharField(label=‘是否同意用户协议‘, write_only=True) 9 # 添加token字段,用于注册成功后记录用户信息,登录功能状态保持 10 token = serializers.CharField(label=‘登录状态的token‘, read_only=True) 11 12 # 2 在Meta中定义模型类 13 class Meta: 16 model = User 17 fields = [‘id‘, ‘username‘, ‘password‘, ‘password2‘, ‘sms_code‘, ‘mobile‘, ‘allow‘, ‘token‘] 18 extra_kwargs = { 19 ‘username‘: { 20 ‘min_length‘: 5, 21 ‘max_length‘: 20, 22 ‘error_messages‘: { 23 ‘min_length‘: ‘仅允许5-20个字符的用户名‘, 24 ‘max_length‘: ‘仅允许5-20个字符的用户名‘, 25 } 26 }, 27 ‘password‘: { 28 ‘write_only‘: True, 29 ‘min_length‘: 8, 30 ‘max_length‘: 20, 31 ‘error_messages‘: { 32 ‘min_length‘: ‘仅允许8-20个字符的密码‘, 33 ‘max_length‘: ‘仅允许8-20个字符的密码‘, 34 } 35 } 36 } 37 38 # 自定义单个字段验证行为 39 def validate_mobile(self, value): 40 """验证手机号格式是否正确""" 41 if not re.match(r‘^1[3-9]d{9}$‘, value): 42 raise serializers.ValidationError(‘手机号格式错误‘) 43 44 return value 45 46 def validate_allow(self, value): 47 """验证用户是否同意注册协议""" 48 if value != ‘true‘: 49 raise serializers.ValidationError(‘请同意用户协议‘) 50 51 return value 52 53 # 自定义多个字段验证行为 54 def validate(self, attr): 55 # 1 判断2次输入的密码是否正确 56 if attr[‘password‘] != attr[‘password2‘]: 57 raise serializers.ValidationError(‘两次验证码输入不同‘) 58 # 2 判断输入的短信验证码是否正确 59 sms_code = attr[‘sms_code‘] 60 real_sms_code = get_redis_connection(‘verify_codes‘).get(‘sms_%s‘ % attr[‘mobile‘]) 61 # 短信验证码找不到或已过期 62 if not real_sms_code: 63 raise serializers.ValidationError(‘无效的短信验证码‘) 64 # 短信验证码不一致 65 if sms_code != real_sms_code.decode(): 66 raise serializers.ValidationError(‘短信验证码错误‘) 67 68 return attr 69 70 def create(self, validated_data): 71 # validate方法校验完成的字段的返回值传递给validated_data 72 # 将仅用于校验的字段删除 73 validated_data.pop(‘sms_code‘) 74 validated_data.pop(‘password2‘) 75 validated_data.pop(‘allow‘) 76 77 # 创建用户对象 78 user = User.objects.create(**validated_data) 79 80 # 用django的认证加密去加密密码 81 user.set_password(validated_data[‘password‘]) 82 user.save() 83 84 # 手动签发jwt 85 jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER 86 jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER 87 88 payload = jwt_payload_handler(user) 89 token = jwt_encode_handler(payload) 90 91 # 将生成的token内容添加到user模型类中 92 user.token = token 93 94 return user
附: jwt_token的链接https://www.cnblogs.com/zyxzyy/p/9985648.html
---恢复内容结束---
以上是关于用户注册的主要内容,如果未能解决你的问题,请参考以下文章