欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Django中進(jìn)行用戶注冊和郵箱驗(yàn)證的方法

 更新時(shí)間:2016年05月09日 11:09:34   作者:hbnn  
這篇文章主要介紹了在Django中進(jìn)行用戶注冊和郵箱驗(yàn)證的方法的相關(guān)資料,需要的朋友可以參考下

本文主要介紹我在利用Django寫文章時(shí),采用的注冊方法。首先說一下整體邏輯思路:

•處理用戶注冊數(shù)據(jù),

•產(chǎn)生token,生成驗(yàn)證URL,

•發(fā)送驗(yàn)證郵件,

•用戶登錄網(wǎng)址,進(jìn)行驗(yàn)證,

•驗(yàn)證處理。

具體步驟:

1、添加用戶

在Django中自帶的User表中,有一個(gè)is_active字段,默認(rèn)值是True,即用戶填完表單提交之后,就可以進(jìn)行登錄。我們這里首先將is_acitve字段設(shè)為False,也就是說,必須經(jīng)過后續(xù)的郵箱驗(yàn)證,才能夠正常登錄。

部分代碼:

if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
#new_user = form.save()
username,password,email = cd['username'],cd['password1'],cd['email']
user = User.objects.create(username=username, password=password, email=email, is_active=False)
user.set_password(password)
user.save() 

提交后,數(shù)據(jù)庫中會(huì)增加一條記錄,但is_acitve字段為False,此時(shí)還不是有效用戶。

2、郵件驗(yàn)證

郵件驗(yàn)證主要有兩步,一是產(chǎn)證token,即加密,二是處理驗(yàn)證鏈接。

1)產(chǎn)生token

之前我采用的是簡單的base64加解密方法, 但終究是太簡單了,后來看到關(guān)于Flask的驗(yàn)證用戶的文章(http://python.jobbole.com/81410/),就采用了itsdangerous序列化方法,其實(shí)Flask的session就用了itsdangerous序列化。我使用它的重要原因是它自帶有一個(gè)時(shí)間戳,而且序列化方法要比單純的使用base64給力得多。

代碼:

from itsdangerous import URLSafeTimedSerializer as utsr
import base64
import re

class Token():

def __init__(self,security_key):
self.security_key = security_key
self.salt = base64.encodestring(security_key)
def generate_validate_token(self,username):
serializer = utsr(self.security_key)
return serializer.dumps(username,self.salt)
def confirm_validate_token(self,token,expiration=3600):
serializer = utsr(self.security_key)
return serializer.loads(token,
salt=self.salt,
max_age=expiration) 

security_key就是settings.py中設(shè)置的SECRET_KEY,salt是經(jīng)過base64加密的SECRET_KEY, generate_validate_token函數(shù)通過URLSafeTimedSerializer在用戶注冊時(shí)生成一個(gè)令牌。用戶名在令牌中被編了碼。生成令牌之后,會(huì)將帶有token的驗(yàn)證鏈接發(fā)送到注冊郵箱。在confirm_validate_token函數(shù)中,只要令牌沒過期,那它就會(huì)返回一個(gè)用戶名,過期時(shí)間為3600秒。

發(fā)送郵件函數(shù)代碼:

token = token_confirm.generate_validate_token(username)
#active_key = base64.encodestring(username)
#send email to the register email
message = "\n".join([
u'{0},歡迎加入我的博客'.format(username),
u'請?jiān)L問該鏈接,完成用戶驗(yàn)證:',
'/'.join([DOMAIN,'account/activate',token])
])
send_mail(u'注冊用戶驗(yàn)證信息',message, None,[email]) 

2)處理郵件驗(yàn)證

就是對應(yīng)驗(yàn)證鏈接的視圖函數(shù),該函數(shù)的主要目的是將User表中用戶的is_active字段更新為True。

def active_user(request,token):
username = token_confirm.confirm_validate_token(token)
user = User.objects.get(username=username)
user.is_active = True
user.save() 

這里要說一下url的設(shè)置。經(jīng)過itsdangerous產(chǎn)生的token是隨機(jī)且規(guī)律的,說它規(guī)律是因?yàn)樗怯扇糠纸M成,并由點(diǎn)號隔開。類似這樣:Imhibm4i.Cg-UAQ.n7ZI2N9kUZ1eOcfBtxlMOdOYYE0。說它隨機(jī)是因?yàn)槊恳徊糠值膬?nèi)容可能不僅僅含有字母數(shù)字,可能還含有連接符-,_。因此url應(yīng)該是:url(r'^account/activate/(?P<token>\w+.[-_\w]*\w+.[-_\w]*\w+)/$','blog.views.active_user',name='active_user')

經(jīng)過上述操作后,用戶就可以利用剛注冊的用戶名進(jìn)行登錄了。

貼出完整代碼:

from utils.token import Token
from django.core.mail import send_mail
from .forms import UserLoginForm,CustomUserCreationForm
token_confirm = Token(SECRET_KEY)

def Register(request):

if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
#new_user = form.save()
username,password,email = cd['username'],cd['password1'],cd['email']
user = User.objects.create(username=username, password=password, email=email, is_active=False)
user.set_password(password)
user.save()
token = token_confirm.generate_validate_token(username)
#active_key = base64.encodestring(username)
#send email to the register email
message = "\n".join([
u'{0},歡迎加入我的博客'.format(username),
u'請?jiān)L問該鏈接,完成用戶驗(yàn)證:',
'/'.join([DOMAIN,'account/activate',token])
])
send_mail(u'注冊用戶驗(yàn)證信息',message, None,[cd['email']])
#user = auth.authenticate(username=username,password=password)
#auth.login(request,user)
return HttpResponse(u"請登錄到注冊郵箱中驗(yàn)證用戶,有效期為1個(gè)小時(shí)。")
else:
form = CustomUserCreationForm()
return render(request,'register.html',{'form':form})
def active_user(request,token):
"""
the view function is used to accomplish the user register confirm,only after input the link
that sent to the register email,user can login the site normally.
:param request:
:param activate_key:the paragram is gotten by encrypting username when user register
:return:
"""
try:
username = token_confirm.confirm_validate_token(token)
except:
return HttpResponse(u'對不起,驗(yàn)證鏈接已經(jīng)過期')
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
return HttpResponse(u'對不起,您所驗(yàn)證的用戶不存在,請重新注冊')
user.is_active = True
user.save()
confirm = u'驗(yàn)證成功,請進(jìn)行登錄操作。'
return HttpResponseRedirect('/account/login',{'confirm':confirm})

以上所述是小編給大家介紹的在Django中進(jìn)行用戶注冊和郵箱驗(yàn)證的方法,希望對大家有所幫助!

相關(guān)文章

  • python之glob的用法詳解

    python之glob的用法詳解

    glob?是?Python?中用于文件模式匹配的一個(gè)模塊,本文主要介紹了python之glob的用法詳解,具有一定的參考價(jià)值,感興趣的可以來了解一下
    2023-12-12
  • python 讀取以空格分開的文件操作

    python 讀取以空格分開的文件操作

    這篇文章主要介紹了python 讀取以空格分開的文件操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • python 求一個(gè)列表中所有元素的乘積實(shí)例

    python 求一個(gè)列表中所有元素的乘積實(shí)例

    今天小編就為大家分享一篇python 求一個(gè)列表中所有元素的乘積實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python獲取女友聊天記錄詳細(xì)流程

    Python獲取女友聊天記錄詳細(xì)流程

    就在前段時(shí)間,在大學(xué)睡我上鋪的兄弟,在兄嘚群里討論,說:他發(fā)現(xiàn)女朋友這幾天只要下班就坐在電腦前,不是工作原因。而且只要他靠近一點(diǎn)就會(huì)立即退出頁面,所以他一直很懷疑,在群里問我們這一個(gè)個(gè)單身狗。然后就出現(xiàn)下面這一段對話
    2021-10-10
  • 使用python處理一萬份word表格簡歷操作

    使用python處理一萬份word表格簡歷操作

    這篇文章主要介紹了使用python處理一萬份word表格簡歷操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python GUI編程學(xué)習(xí)筆記之tkinter界面布局顯示詳解

    Python GUI編程學(xué)習(xí)筆記之tkinter界面布局顯示詳解

    這篇文章主要介紹了Python GUI編程學(xué)習(xí)筆記之tkinter界面布局顯示,結(jié)合實(shí)例形式分析了Python GUI編程中tkinter界面布局顯示的相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • YOLOv5小目標(biāo)切圖檢測的思路與方法

    YOLOv5小目標(biāo)切圖檢測的思路與方法

    目標(biāo)檢測Yolo算法是非常經(jīng)典且應(yīng)用廣泛的算法,下面這篇文章主要給大家介紹了關(guān)于YOLOv5小目標(biāo)切圖檢測的思路與方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • python+jinja2實(shí)現(xiàn)接口數(shù)據(jù)批量生成工具

    python+jinja2實(shí)現(xiàn)接口數(shù)據(jù)批量生成工具

    這篇文章主要介紹了python+jinja2實(shí)現(xiàn)接口數(shù)據(jù)批量生成工具的操作方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python調(diào)用scp向服務(wù)器上傳文件示例

    Python調(diào)用scp向服務(wù)器上傳文件示例

    今天小編就為大家分享一篇Python調(diào)用scp向服務(wù)器上傳文件示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的代碼(JSON模塊)

    Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的代碼(JSON模塊)

    這篇文章主要介紹了Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的代碼(JSON模塊),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評論