柚子快報(bào)邀請碼778899分享:django-短信登錄
柚子快報(bào)邀請碼778899分享:django-短信登錄
1.前端代碼
短信登錄
2.后端代碼
? ?2.2.1視圖函數(shù)
sms_login函數(shù)是短信登錄的邏輯。
sms_send函數(shù)是獲取點(diǎn)擊短信驗(yàn)證碼,校驗(yàn)我表單中手機(jī)號(hào)是否填的正確,后調(diào)用第三方的sdk(騰訊云或者阿里云)來發(fā)送短信,獲取了短信在Redis中緩存等待用戶輸入校驗(yàn)。
def sms_login(request):
res = BaseRespone()
if request.method == 'GET':
form = SmsLoginForm()
return render(request, 'sms_login.html', {"form": form})
print(request.POST)
form = SmsLoginForm(request.POST)
if not form.is_valid():
res.msg = form.errors
return JsonResponse(res.dirt)
mobile = form.cleaned_data['mobile']
code = form.cleaned_data['code']
role = form.cleaned_data['role']
# 驗(yàn)證redis緩存的code跟我輸入的code一不一樣
conn = get_redis_connection("default")
cache_code = conn.get(mobile)
if not cache_code:
res.msg = {"code": ["短信驗(yàn)證碼錯(cuò)誤"]}
return JsonResponse(res.dirt)
res.status = True
if code != cache_code.decode("utf-8"):
res.msg = {"code": ["短信驗(yàn)證碼錯(cuò)誤"]}
return JsonResponse(res.dirt)
if role == "1":
user_object = models.Administrator.objects.filter(active=1, mobile=mobile).first()
else:
user_object = models.Customer.objects.filter(active=1, mobile=mobile).first()
if not user_object:
res.msg = {"mobile": ["手機(jī)號(hào)不存在"]}
return JsonResponse(res.dirt)
mapping = {"1": "ADMIN", "2": "CUSTOMER"}
request.session['user_info'] = {'role': mapping[role], 'name': user_object.username, 'id': user_object.id}
res.status = True
res.data = settings.LOGIN_HOME
return JsonResponse(res.dirt)
def sms_send(request):
res = BaseRespone()
form = MobileForm(data=request.POST)
if not form.is_valid():
res.msg = form.errors
return JsonResponse(res.dirt, json_dumps_params={"ensure_ascii": False})
mobile = form.cleaned_data['mobile']
# 調(diào)用騰訊云的SDK要用到手機(jī)號(hào)
# 假短信驗(yàn)證碼
sms_code = random.randint(1000, 9999)
conn = redis.Redis(host='192.168.110.131', port=6379, password='', encoding='utf-8')
conn.set('18888888889', sms_code, ex=60)
value = conn.get('18888888889')
if value:
res.status = True
return JsonResponse(res.dirt, json_dumps_params={"ensure_ascii": False})
?2.2.2 froms組件
class SmsLoginForm(forms.Form):
role = forms.ChoiceField(
label="角色",
choices=(("2", "客戶"), ("1", "管理員")),
widget=forms.Select(attrs={"class": "form-control"})
)
mobile = forms.CharField(
label="手機(jī)號(hào)",
validators=[RegexValidator(r'^1[358]\d{9}$', '手機(jī)格式錯(cuò)誤'), ],
widget=forms.TextInput(attrs={"class": 'form-control', "placeholder": "手機(jī)號(hào)"})
)
code = forms.CharField(
label="短信驗(yàn)證碼",
validators=[RegexValidator(r'^[0-9]{4}$', '驗(yàn)證碼格式錯(cuò)誤'), ],
widget=forms.TextInput(attrs={"class": 'form-control', "placeholder": "短信驗(yàn)證碼"})
)
class MobileForm(forms.Form):
role = forms.ChoiceField(
label="角色",
required=True,
choices=(("2", "客戶"), ("1", "管理員")),
widget=forms.Select(attrs={"class": "form-control"})
)
mobile = forms.CharField(
label="手機(jī)號(hào)",
required=True,
validators=[RegexValidator(r'^1[358]\d{9}$', '手機(jī)格式錯(cuò)誤'), ]
)
def clean_mobile(self):
role = self.cleaned_data['role']
mobile = self.cleaned_data['mobile']
if not role:
return mobile
if role == '1':
exist = models.Administrator.objects.filter(active=1, mobile=mobile).exists()
else:
exist = models.Customer.objects.filter(active=1, mobile=mobile).exists()
if not exist:
raise ValidationError("手機(jī)號(hào)不存在")
return mobile
柚子快報(bào)邀請碼778899分享:django-短信登錄
精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。