06.短信注册接口
分析
1 前端传入是不带用户名的,我们可以自动生成一个用户名,或者使用手机号作为用户(咱们)
2 邮箱也没传入(邮箱可以为空)
3 前端出入
-手机号
-密码
-code(表中没有)
4 post请求
后端
views.py
class UserView(ViewSet):
@action(methods=['POST'], detail=False)
def register(self, request, *args, **kwargs):
ser = UserRegisterModelSerializer(data=request.data)
ser.is_valid(raise_exception=True)
ser.save()
return APIResponse(code=100,msg='注册成功')
serializer.py
class UserRegisterModelSerializer(serializers.ModelSerializer):
code = serializers.CharField(write_only=True)
class Meta:
model = models.User
fields = ['mobile', 'code', 'password']
def validate_mobile(self, data):
import re
if re.match('^1[3-9][0-9]{9}$', data):
return data
else:
raise ValidationError('手机号不合法')
def validate(self, attrs):
mobile = attrs.get('mobile')
code = attrs.get('code')
cache_code = cache.get(settings.SMS_PHONE_CACHE % mobile)
if cache_code and cache_code == code:
attrs.pop('code')
attrs['username'] = mobile
return attrs
else:
raise ValidationError('验证码错误')
def create(self, validated_data):
user = models.User.objects.create_user(**validated_data)
return user