以前咱們學瞭如何用騰訊雲發送短信redis
如今咱們要簡單說一下 有了手機號和驗證碼 怎麼進行登陸和註冊(登錄跳轉未完成)數據庫
邏輯django
1. 校驗手機號是否合法 2. 校驗驗證碼 redis - 無驗證碼 - 有驗證碼 輸入錯誤 - 有驗證碼 輸入成功 3. 去數據庫中獲取用戶信息(獲取/建立) 4. 將一些信息返回給小程序
小程序端 咱們如今假設已經輸入了手機號和驗證碼小程序
import uuid from rest_framework.exceptions import ValidationError from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import serializers from django_redis import get_redis_connection from app01 import models class LoginSerializer(serializers.Serializer): phone = serializers.CharField(label="手機號", validators=[phone_validator, ]) code = serializers.CharField(label="驗證碼") def validate_code(self, value): ''' 校驗驗證碼 :param value: :return: ''' if len(value) != 4: raise ValidationError('短信格式錯誤') if not value.isdecimal(): raise ValidationError('短信格式錯誤') ''' initial_data 在這樣必須用 initial_data至關於request.data 對比一下 is_valid中validated_data ''' phone = self.initial_data.get('phone') # code驗證 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): print(request.data) ''' 1. 校驗手機號是否合法 2. 校驗驗證碼 redis - 無驗證碼 - 有驗證碼 輸入錯誤 - 有驗證碼 輸入成功 3. 去數據庫中獲取用戶信息(獲取/建立) 4. 將一些信息返回給小程序 ''' ser = LoginSerializer(data=request.data) if not ser.is_valid(): return Response({"status": False, 'message': '驗證碼錯誤'}) phone = ser.validated_data.get('phone') ''' user = models.UserInfo.objects.filter(phone=phone).first() if not user: models.UserInfo.objects.create(phone=phone,token=str(uuid.uuid4())) else: user.token = uuid.uuid4() user.save() ''' user_object, flag = models.UserInfo.objects.get_or_create(phone=phone) user_object.token = str(uuid.uuid4()) user_object.save() return Response({"status": True, 'data':{'phone':phone,'token':user_object.token}})