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에서 사용자 등록과 메일박스 검증을 하는 방법입니다. 여러분에게 도움이 되었으면 합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.