6-9-10 django在线教育平台----用户注册

一、电子邮件系统原理

参考:https://blog.csdn.net/qq_15646957/article/details/52544099

二、发送邮件

1、先注册邮箱,这里注册的是新浪邮箱。登陆之后,点击设置,点击开启服务状态

这里写图片描述

2、settings中邮箱配置

这里写图片描述

3、新建utils包(python package),编写发送邮件逻辑块email_send.py

#  _*_ coding:utf-8 _*_
__author__ = "yf"
__date__ = "2018/7/8 10:44"

from random import Random
from django.core.mail import send_mail

from MxOnline1.settings import EMAIL_FROM

from users.models import EmailVerifyRecord


# 生成随机字符串
def random_str(randomlength=8):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str += chars[random.randint(0, length)]
    return str


def send_register_email(email, send_type="register"):
    # 发送邮件之前将用户发的信息保存在数据库中
    email_record = EmailVerifyRecord()
    code = random_str(16)
    email_record.code = code
    email_record.email = email
    email_record.send_type = send_type
    email_record.save()

    # 发送邮件初始状态下为空
    email_title = ""
    email_body = ""

    if send_type == "register":
        email_title = "慕学在线网注册激活链接"
        email_body = "请点击下面的链接激活你的账号:http://127.0.0.1:8000/active/{0}".format(code)

        # 发送邮件
        send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])

    if send_status:
        pass

4、编写views.py,完善RegisterView


class RegisterView(View):
    def get(self, request):
        register_form = RegisterForm(request.POST)
        return render(request, 'register.html', {"register_form": register_form})

    def post(self, request):
        register_form = RegisterForm(request.POST)
        if register_form.is_valid():
            user_name = request.POST.get("email", "")     # 取出前端传过来的username
            if UserProfile.objects.filter(email=user_name):       # 判断用户是否已经存在
                return render(request, "register.html", {"msg": "用户已经存在!", "register_form": register_form })
            pass_word = request.POST.get("password", "")  # 取出前端传过来的password
            user_profile = UserProfile()                  # 实例化UserProfile类
            user_profile.username = user_name             # 将用户赋给实例user_profile的username和email
            user_profile.email = user_name
            user_profile.password = make_password(pass_word)  # 将密码加密,赋给password,密文形式保存到数据库
            user_profile.is_active = False                    # 用户在点击激活链接之前是未激活的
            user_profile.save()                               # 将用户、密码保存到数据库

            send_register_email(user_name, "register")
            return render(request, 'login.html')
        else:
            return render(request, 'register.html', {'register_form': register_form})

5、测试

在合适的地方打断点,单步调试

这里写图片描述

这里写图片描述

邮件成功发送

这里写图片描述

这里写图片描述

6、错误信息显示

和login.html页面错误显示类似

这里写图片描述

数据在views.py中传入前端,可在模板中直接用

这里写图片描述

不输入邮箱、密码、验证码时错误显示
这里写图片描述

输入邮箱、密码,不输入验证码时错误显示和数据回填功能
这里写图片描述

三、用户激活功能

1、用户在点击激活链接之前是未激活的

这里写图片描述

设置点击链接,链接的url和随机生成的code相关,利用code生成相对应的邮箱激活链接

这里写图片描述

点击链接之后跳转到另一个页面

这里写图片描述

测试

在注册页面进行注册,收到发送的邮件,点击激活链接,进入激活页面

这里写图片描述

后端调试可以看到active_code和链接的随机生成的code是一样的,这样邮箱激活链接完成了

这里写图片描述

完善激活逻辑,点击激活连接之后,激活用户,并新建激活失败页面

这里写图片描述

这里写图片描述

注册激活后,会跳转到登录页面,直接登录即可

这里写图片描述

2、用户登录时也需要判断用户是否激活

这里写图片描述

错误信息传给模板

这里写图片描述

测试

这里写图片描述

总结:用户在登录时三个判断

表单数据有效性判断
登录用户信息与数据库比较
登陆的用户是否激活

猜你喜欢

转载自blog.csdn.net/f1ngf1ngy1ng/article/details/81011129