123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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':'发送成功'})
|