本期將會介紹用戶管理模塊和代碼開源一些原則。
一、用戶管理模塊
爲了對用戶更有效的管理,加入新功能,通過郵箱來實現用戶註冊、激活和密碼修改。
在Python中已經內置了一個smtp郵件發送模塊,Django在此基礎上進行了簡單地封裝,讓我們在Django環境中可以更方便更靈活的發送郵件。
在setting.py中添加:
EMAIL_HOST = "smtp.163.com" # SMTP服務器主機 EMAIL_PORT = 25 # 端口 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST_USER = "[email protected]" # 郵箱地址 EMAIL_HOST_PASSWORD = "********" # 授權碼 EMAIL_USE_TLS= True EMAIL_FROM = "[email protected]" # 郵箱地址
其中授權碼需要在郵箱內進行設計,經過測試QQ郵箱和163郵箱都是可以用的。
新建一個email_send.py文件,用於存放郵箱發送函數:
# 生成隨機字符串 def random_str(random_length=8):
str = '' # 生成字符串的可選字符串 chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789' length = len(chars) - 1 random = Random()
for i in range(random_length):
str += chars[random.randint(0, length)]
return str
# 發送註冊郵件 def send_register_eamil(email, send_type="register"):
# 發送之前先保存到數據庫,到時候查詢鏈接是否存在
# 實例化一個EmailVerifyRecord對象 email_record = EmailVerifyRecord()
# 生成隨機的code放入鏈接 if send_type == 'update_email':
code = random_str(4)
else:
code = random_str(16)
email_record.code = code
email_record.email = email
email_record.send_type = send_type
email_record.save()
# 定義郵件內容:
email_title = "" email_body = "" if send_type == "register":
email_title = "在線考試系統註冊激活鏈接" email_body = "請點擊下面的鏈接激活你的賬號: http://127.0.0.1:8000/active/{0}".format(code)
# 使用Django內置函數完成郵件發送。四個參數:主題,郵件內容,從哪裏發,接受者list send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
# 如果發送成功 if send_status:
pass
elif send_type == "forget":
email_title = "在線考試系統找回密碼鏈接" email_body = "請點擊下面的鏈接找回你的密碼: http://127.0.0.1:8000/reset/{0}".format(code)
# 使用Django內置函數完成郵件發送。四個參數:主題,郵件內容,從哪裏發,接受者list send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
# 如果發送成功 if send_status:
pass
elif send_type == "update_email":
email_title = "在線考試系統郵箱修改驗證碼" email_body = "你的郵箱驗證碼爲{0}".format(code)
# 使用Django內置函數完成郵件發送。四個參數:主題,郵件內容,從哪裏發,接受者list send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
# 如果發送成功 if send_status:
pass
在用戶註冊後,根據郵箱找到對應的用戶,然後設置is_active = True來實現用戶激活。
# 激活用戶的view class ActiveUserView(View):
def get(self, request, active_code):
# 查詢郵箱驗證記錄是否存在 all_record = EmailVerifyRecord.objects.filter(code = active_code)
if all_record:
for record in all_record:
# 獲取到對應的郵箱 email = record.email
# 查找到郵箱對應的user user = UserProfile.objects.get(email=email)
user.is_active = True user.save()
# 激活成功跳轉到登錄頁面 return render(request, "login.html", )
else:
return render(request, "register.html", {"msg": "您的激活鏈接無效"})
找回密碼和重置密碼也同樣是向郵箱發鏈接,確認後修改密碼:
class ForgetPwdView(View):
'''找回密碼''' def get(self,request):
forget_form = ForgetPwdForm()
return render(request,'forgetpwd.html',{'forget_form':forget_form})
def post(self,request):
forget_form = ForgetPwdForm(request.POST)
if forget_form.is_valid():
email = request.POST.get('email',None)
send_register_eamil(email,'forget')
return render(request, 'send_success.html')
else:
return render(request,'forgetpwd.html',{'forget_form':forget_form})
class ResetView(View):
def get(self, request, active_code):
all_records = EmailVerifyRecord.objects.filter(code=active_code)
if all_records:
for record in all_records:
email = record.email
return render(request, "password_reset.html", {"email":email})
else:
return render(request, "active_fail.html")
return render(request, "login.html")
class ModifyPwdView(View):
'''修改用戶密碼''' def post(self, request):
modify_form = ModifyPwdForm(request.POST)
if modify_form.is_valid():
pwd1 = request.POST.get("password1", "")
pwd2 = request.POST.get("password2", "")
email = request.POST.get("email", "")
if pwd1 != pwd2:
return render(request, "password_reset.html", {"email":email, "msg":"密碼不一致!"})
user = UserProfile.objects.get(email=email)
user.password = make_password(pwd2)
user.save()
return render(request, "login.html")
else:
email = request.POST.get("email", "")
return render(request, "password_reset.html", {"email":email, "modify_form":modify_form })
二、代碼開源原則
2.0系統在1.0基礎上有了很大提高,但是不論從功能還是界面美化上都還有很多不足,開源的目的就是爲了不斷提高,所以在這明確幾個開源的原則:
(1)代碼開源在本人GitHub上,公衆號回覆【在線考試2】獲取鏈接;
(2)有任何想法、問題可以通過issue進行留言;
(3)如果有意作爲共同開發者維護代碼可以在公衆號中加管理員微信,申請作爲共同開發者。
(4)此開源代碼不能直接用於商業用途。
關注公衆號,獲取海量學習資源。
1024程序開發者社區的交流羣已經建立,許多小夥伴已經加入其中,感謝大家的支持。大家可以在羣裏就技術問題進行交流,還沒有加入的小夥伴可以掃描下方“社區物業”二維碼,讓管理員幫忙拉進羣,期待大家的加入。
//猜你喜歡//