views.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from django.shortcuts import render
  2. from rest_framework.exceptions import ValidationError
  3. from rest_framework.views import APIView
  4. from rest_framework.response import Response
  5. from rest_framework import serializers, status
  6. from django_redis import get_redis_connection
  7. import random
  8. # Create your views here.
  9. import uuid
  10. import re
  11. def phone_validator(value):
  12. if not re.match(r'^(1[3|4|5|6|7|8|9])\d{9}$', value):
  13. raise ValidationError('手机格式错误')
  14. class LoginSerializer(serializers.Serializer):
  15. phone = serializers.CharField(label='手机号', validators=[phone_validator, ])
  16. code = serializers.CharField(label='短信验证码')
  17. def validate_code(self, value):
  18. if len(value) !=4:
  19. raise ValidationError('短信格式错误')
  20. if not value.isdecimal():
  21. raise ValidationError("短信格式错误")
  22. phone=self.initial_data.get('phone')
  23. conn=get_redis_connection()
  24. code=conn.get(phone)
  25. if not code:
  26. raise ValidationError("验证码过期")
  27. if value!=code.decode('utf-8'):
  28. raise ValidationError("验证码错误")
  29. return value
  30. class LoginView(APIView):
  31. def post(self, request, *args, **kwargs):
  32. ser=LoginSerializer(data=request.data)
  33. if not ser.is_valid():
  34. return Response({'status': False,'message':'验证码错误'})
  35. from api import models
  36. phone=ser.validated_data.get('phone')
  37. user_object,flag=models.UserInfo.objects.get_or_create(phone=phone)
  38. user_object.token=str(uuid.uuid4())
  39. user_object.save()
  40. from api import models
  41. return Response({'status': True,"data":{'token':user_object.token,'phone':phone,'id':models.UserInfo.objects.get(phone=phone).id}})
  42. class MessageSerializer(serializers.Serializer):
  43. phone = serializers.CharField(label='手机号', validators=[phone_validator, ])
  44. class MessageView(APIView):
  45. def get(self, request, *args, **kwargs):
  46. ser=MessageSerializer(data=request.query_params)
  47. if not ser.is_valid():
  48. return Response({'status':False,'message':'手机号错误'})
  49. phone = ser.validated_data.get('phone')
  50. print(phone)
  51. random_code = random.randint(1000, 9999)
  52. print(random_code)
  53. import redis
  54. conn=get_redis_connection()
  55. conn.set(phone,random_code,ex=60)
  56. print(conn.keys())
  57. return Response({'status': True,'message':'发送成功'})