Django에서 사용자 등록 및 메일박스 확인 방법

5600 단어
본고는 주로 제가 Django를 이용하여 글을 쓸 때 사용한 등록 방법을 소개합니다.먼저 전체적인 논리적 사고방식을 말씀드리겠습니다.
• 사용자 등록 데이터 처리
• token 생성, 인증 URL 생성,
• 인증 메일을 보내고,
• 사용자 로그인, 인증,
• 처리 확인
구체적인 단계:
1. 사용자 추가
Django의 User 테이블에는 is 가 있습니다.active 필드, 기본값은 True입니다. 사용자가 폼을 작성해서 제출하면 로그인할 수 있습니다.저희가 먼저 isacitve 필드는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() 

제출하면 데이터베이스에 기록이 하나 추가되지만 isacitve 필드는 유효한 사용자가 아닌 False입니다.
2. 메일 검증
메일 검증은 주로 두 가지 절차가 있는데 하나는 생산증token, 즉 암호화이고 다른 하나는 검증 링크를 처리하는 것이다.
1) Token 생성
이전에 나는 간단한base64 복호화 방법을 사용했지만 끝내 너무 간단했다. 나중에 Flask에 대한 검증 사용자에 대한 글을 보았다(http://python.jobbole.com/81410/), itsdangerous 서열화 방법을 사용했는데 사실 Flask의session은 itsdangerous 서열화를 사용했다.내가 그것을 사용하는 중요한 이유는 시간 스탬프가 있고 서열화 방법이 단순히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_키는 세팅이야.py에서 설정된 SECRETKEY,salt는base64로 암호화된 SECRETKEY, generate_validate_token 함수는 URLSafeTimedSerializer를 통해 사용자가 등록할 때 영패를 생성합니다.사용자 이름이 영패에 부호화되었다.영패를 생성하면 Token이 있는 검증 링크를 등록 메일로 보냅니다.confirmvalidate_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 설정을 말씀드리겠습니다.itsdangerous를 통해 생기는 Token은 랜덤이고 규칙적이다. 규칙은 세 부분으로 구성되어 있고 점호로 분리되어 있기 때문이다.이와 유사: Imhibm4i.Cg-UAQ.n7ZI2N9kUZ1eOcfBtxlMOdOYYE0.모든 부분의 내용이 알파벳 숫자뿐만 아니라 연결부호-, 도 포함되어 있기 때문에 랜덤이라고 합니다.따라서 url은: url(r'^account/activate/(?P\w+.[-\w]*\w+.[-\w]*\w+)/$','blog이어야 한다.views.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(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 = "
".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에서 사용자 등록과 메일박스 검증을 하는 방법입니다. 여러분에게 도움이 되었으면 합니다!

좋은 웹페이지 즐겨찾기