我们的需求如下
1. 获取手机号 2. 手机格式校验 3. 生成随机验证码 4. 验证码发送到手机上 5. 把验证码+手机号保留(30s过期)
复习 我们在有表的情况下的序列化
class MessageSerializer(serializers.ModelSerializer): """ 这段代码是我们在有表的时候使用的 现在没有表 我们用继承serializers.Serializer 下面的class Meta也不能要了 """ class Meta: model = "表" fileds = "__all__"
没有表
def phone_validator(value): if not re.match(r'^(1[3|4|5|6|7|8|9])d{9}$', value): raise ValidationError("手机号格式错误") class MessageSerializer(serializers.Serializer): ''' 只是默认验证phone不为空 自己要是想加验证 自己加一个 validators 还可以钩子校验 顺序 先校验默认不为空,在校验validators 在校验钩子函数 ''' phone = serializers.CharField(label="手机号", validators=[phone_validator,]) def validate_phone(self, value): pass
在后端校验手机号 有两种方式
class MessageView(APIView): def get(self, request, *args, **kwargs): ''' # 1. 获取手机号 phone = request.query_params.get('phone') # 2. 手机格式校验 # ① ''' import re if not re.match(r'^(1[3|4|5|6|7|8|9])d{9}$',phone): return Response("手机号格式错误") ''' # ② ser = MessageSerializer(data=request.query_params)if not ser.is_valid(): return Response({'status':False, 'message': '手机号格式错误'})
# 3. 生成随机验证码 import random random_code = random.randint(1000, 9999) # 4. 验证码发送到手机上 购买服务器进行发送短信;阿里云/ 腾讯云 # todo tencent.send_message(phone,random_code) # 5. 把验证码+手机号保留(30s过期) setting要配置 # 5.1 搭建redis 腾讯云 阿里云 也有 # 5.2 django-redis from django_redis import get_redis_connection conn = get_redis_connection() conn.set(phone, random_code, ex=30)