Djangoでユーザー登録とメールアドレス検証を行う方法


この文章は主に私がDjangoを利用して文章を書く時の登録方法を紹介します。まず全体の論理的な考え方を説明します。
•ユーザー登録データを処理し、
•tokenを生成し、検証URLを生成し、
•検証メールを送信し、
•ユーザーがURLに登録し、検証を行い、
•検証処理。
具体的な手順:
1、ユーザーを追加する
Djangoに持参したUserの表には、is_があります。activeフィールドのデフォルト値はTrueです。つまり、ユーザーがフォームを記入して提出した後、ログインできます。私達はここでまずis_を。acitveフィールドはFalseとして設定されています。つまり、後のメールで確認してから正常に登録することができます。
部分コード:

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() 
提出後、データベースに記録が追加されますが、is_acitveフィールドはFalseです。まだ有効なユーザではありません。
2、メール認証
メールの検証には主に2段階があります。1つは生産証token、すなわち暗号化、2つは処理の検証リンクです。
1)tokenを生成する
以前は簡単なbase 64加解読方法を採用しましたが、結局は簡単すぎて、Flashkに関するユーザー検証の文章を見ました。http://python.jobbole.com/81410/)は、its dangerousプログレッシブ方法を採用していますが、Flashkのsessionは、its dangerusプログレッシブを使っています。私が使う重要な理由はタイムスタンプを持っています。そして、順序化の方法は単にbase 64を使うよりずっといいです。
コード:

from itsdangerous import URLSafeTimedSerializer as utsr
import base64
import re
クラス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) 
securitykeyはsettings.pyにセットされているSECRETです。KEY、saltはbase 64で暗号化されたSECRETです。KEY、generate_validate_token関数は、URLSa feTimedSerializerによりユーザ登録時にトークンを生成する。ユーザ名はトークンにおいてコード化されている。トークンを生成すると、tokenを伴う検証リンクが登録メールボックスに送信されます。confirmにあるvalidate_token関数では、トークンが失効していない限り、ユーザー名を返します。有効期限は3600秒です。
メール関数コードを送信:

token = token_confirm.generate_validate_token(username)
#active_key = base64.encodestring(username)
#send email to the register email
message = "
".join([ u'{0}, '.format(username), u' , :', '/'.join([DOMAIN,'account/activate',token]) ]) send_mail(u' ',message, None,[email])
2)メール検証処理
は、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の設定について説明します。itsdangerusによって生成されたtokenはランダムで法則的であり、それは三つの部分から構成され、点から分離されているからであるという。このように、Imhibm 4 i.C-UAQ.n 7 ZI 2 N 9 kUZ 1 eOcfBtxl MOdOYE 0です。ランダムというのは、各部分の内容はアルファベットだけでなく、コネクタも含まれているからです。だからurlはurl(r'^account/activate/(?P\w+.[-\]w]*\w+.[-\]w]*\w+/'、'blog.view.active_user,name='active_user
上記の操作により、ユーザは登録したばかりのユーザ名でログインすることができます。
完全コードを貼り付ける:

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

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 = "
".join([ u'{0}, '.format(username), u' , :', '/'.join([DOMAIN,'account/activate',token]) ]) send_mail(u' ',message, None,[cd['email']]) #user = auth.authenticate(username=username,password=password) #auth.login(request,user) return HttpResponse(u" , 1 。") 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' , ') try: user = User.objects.get(username=username) except User.DoesNotExist: return HttpResponse(u' , , ') user.is_active = True user.save() confirm = u' , 。' return HttpResponseRedirect('/account/login',{'confirm':confirm})
以上は小编が绍介したDjangoでユーザー登录とメールアドレスの検证の方法です。