1.在apps下建utils包,并在包内建email_send.py文件:
2.在settings.py中设置发送者:
3.后台代码
view
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from django.views.generic.base import View
from django.contrib.auth.hashers import make_password
from .models import UserProfile, EmailVerifyRecord
from .forms import LoginForm, RegisterForm
from utils.email_send import send_register_email
class RegisterView(View):
def get(self, request):
register_form = RegisterForm()
return render(request, "register.html", locals())
def post(self,request):
register_form = RegisterForm(request.POST)
if register_form.is_valid():
user_name = request.POST.get("email", "")
password = request.POST.get("password", "")
user_profile = UserProfile()
user_profile.username = user_name
user_profile.email = user_name
user_profile.is_active = False
user_profile.password = make_password(password)
user_profile.save()
send_register_email(user_name, "register")
return render(request, "login.html")
else:
return render(request, "register.html", {"register_form":register_form})
class ActiveUserView(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
user = UserProfile.objects.get(email=email)
user.is_active = True
user.save()
return render(request, "login.html")
class LoginView(View):
def get(self, request):
return render(request, "login.html", {})
def post(self, request):
login_form = LoginForm(request.POST)
if login_form.is_valid():
username = request.POST.get("username", "")
password = request.POST.get("password", "")
# 向数据库发起认证,用户名和密码是否正确
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return render(request, "index.html")
else:
return render(request, "login.html", {"msg": "用户未激活"})
else:
return render(request, "login.html", {"msg": "用户名或密码错误"})
else:
return render(request, "login.html", {"login_form": login_form})
url(r'^active/(?P<active_code>.*)/$', ActiveUserView.as_view(), name="user_active"),