哈囉大家好,今天要來撰寫我們找回密碼API的邏輯,先來看看我的程式碼吧~~
from datetime import datetime
import json
import uuid
from django.contrib.auth.models import User
from django.http.response import JsonResponse
from django.views.decorators.csrf import csrf_protect
from user.models import UserProfile
from django.contrib import auth
from django.contrib.sessions.models import Session
from IThome_Django import settings
from django.core.mail import send_mail
from django.core import signing
import base64
import string#新增
import random#新增
@csrf_protect
def forgot(request): #忘記密碼
if request.method == "POST":
data = json.loads(bytes.decode(request.body,"utf-8"))
try:
email = data['email']
user = UserProfile.objects.get(email=email)
chars=string.ascii_letters+string.digits
new_pw ="".join(random.sample(chars,16))
user.set_password(new_pw)
user.save()
title = "找回密碼"
sender = settings.EMAIL_HOST_USER
meg ="\n".join(["歡迎".format(user.username),
"新的密碼為:\n",new_pw])
send_mail(title,meg,sender,[email])
message = {"status":"0"}
except:
message = {"status":"1"}
return JsonResponse(message)
我來說說我的想法以及function的用法,一樣先判斷Http Method為POST,然後抓取key為mail的value也就是我們輸入的email,再使用chars=string.ascii_letters+string.digits
把英文字母跟數字串起來,再用random.sample(chars,16)
,產生一組資料型態為list,英文跟數字的亂數,而"".join()
則可以把list每個元素用指定的符號連接起來,用這樣的方式產生一組新的由英文數字亂碼密碼,接著用user = UserProfile.objects.get(email=email)
查詢資料庫與輸入email相符的使用者,user.set_password(new_pw)
使用者設定密碼,最後用send_mail(title,meg,sender,[email])
寄到信箱,簡單來說就是利用註冊的email,再重發一次密碼。
明天我們接著要來說明重設密碼API。