from django.shortcuts import render from rest_framework.exceptions import ValidationError from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import serializers, status from django_redis import get_redis_connection import random # Create your views here. import uuid import re def phone_validator(value): if not re.match(r'^(1[3|4|5|6|7|8|9])\d{9}$', value): raise ValidationError('手机格式错误') class LoginSerializer(serializers.Serializer): phone = serializers.CharField(label='手机号', validators=[phone_validator, ]) code = serializers.CharField(label='短信验证码') def validate_code(self, value): if len(value) !=4: raise ValidationError('短信格式错误') if not value.isdecimal(): raise ValidationError("短信格式错误") phone=self.initial_data.get('phone') conn=get_redis_connection() code=conn.get(phone) if not code: raise ValidationError("验证码过期") if value!=code.decode('utf-8'): raise ValidationError("验证码错误") return value class LoginView(APIView): def post(self, request, *args, **kwargs): ser=LoginSerializer(data=request.data) if not ser.is_valid(): return Response({'status': False,'message':'验证码错误'}) from api import models phone=ser.validated_data.get('phone') user_object,flag=models.UserInfo.objects.get_or_create(phone=phone) user_object.token=str(uuid.uuid4()) user_object.save() from api import models return Response({'status': True,"data":{'token':user_object.token,'phone':phone,'id':models.UserInfo.objects.get(phone=phone).id}}) class MessageSerializer(serializers.Serializer): phone = serializers.CharField(label='手机号', validators=[phone_validator, ]) class MessageView(APIView): def get(self, request, *args, **kwargs): ser=MessageSerializer(data=request.query_params) if not ser.is_valid(): return Response({'status':False,'message':'手机号错误'}) phone = ser.validated_data.get('phone') print(phone) random_code = random.randint(1000, 9999) print(random_code) import redis conn=get_redis_connection() conn.set(phone,random_code,ex=60) print(conn.keys()) return Response({'status': True,'message':'发送成功'})