天天看點

發郵件注冊激活

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"),
           

繼續閱讀