Django项目(五):注册模块—登录注册

一、完成登录注册退出逻辑
1、路由和视图函数;
2、前端
3、forms类,制定规则

二、验证码
1、安装python包:django-simple-captcha
2、配置
在这里插入图片描述

在这里插入图片描述
3、迁移同步
4、修改forms类、视图函数、前端在这里插入图片描述在这里插入图片描述

在这里插入图片描述
三、邮箱发送与激活
1、在settings中配置邮箱
在这里插入图片描述
数据来源(163邮箱)
在这里插入图片描述
在这里插入图片描述
2、自定义发邮件工具包

from users.models import EmailVerifyCode
# from random import choice
from random import randrange,randint
from django.core.mail import send_mail
from GuLiEdu.settings import EMAIL_FROM

def get_random_code(code_length):
    code_source = '2134567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
    code = ''
    for i in range(code_length):
        #随机选择一个字符
        str = code_source[randrange(0,len(code_source))]
        code += str
        # code += choice(code_source)
    return code

def send_email_code(email,send_type):
    #第一步:创建邮箱验证码对象,保存数据库,用来以后做对比
    code = get_random_code(8)
    a = EmailVerifyCode()
    a.email = email
    a.send_type = send_type
    a.code = code
    a.save()

    #第二步:正式的发邮件功能
    send_title = ''
    send_body = ''
    if send_type == 1:
        send_title = '欢迎注册谷粒教育网站:'
        send_body = '请点击以下链接进行激活您的账号:\n http://127.0.0.1:8000/users/user_active/'+code
        send_mail(send_title,send_body,EMAIL_FROM,[email])

    if send_type == 2:
        send_title = '谷粒教育重置密码系统:'
        send_body = '请点击以下链接进行重置您的密码:\n http://127.0.0.1:8000/users/user_reset/' + code
        send_mail(send_title, send_body, EMAIL_FROM, [email])

    if send_type == 3:
        send_title = '谷粒教育修改邮箱验证码:'
        send_body = '您的验证码是:'+ code
        send_mail(send_title, send_body, EMAIL_FROM, [email])

3、视图函数

def user_register(request):
    if request.method == 'GET':
        #这里实例化forms类,目的不是为了验证,而是为了使用验证码
        user_register_form = UserRegisterForm()
        return render(request,'users/register.html',{
            'user_register_form':user_register_form
        })
    else:
        user_register_form = UserRegisterForm(request.POST)
        if user_register_form.is_valid():
            email = user_register_form.cleaned_data['email']
            password = user_register_form.cleaned_data['password']

            user_list = UserProfile.objects.filter(Q(username=email)|Q(email=email))
            if user_list:
                return render(request,'users/register.html',{
                    'msg':'用户已经存在'
                })
            else:
                a = UserProfile()
                a.username = email
                a.set_password(password)
                a.email = email
                a.save()
                send_email_code(email,1)
                return HttpResponse('请尽快前往您的邮箱激活,否则无法登陆')
                # return redirect(reverse('index'))
        else:
            return render(request, 'users/register.html', {
                'user_register_form': user_register_form
            })

四、忘记密码与修改密码
在这里插入图片描述

在这里插入图片描述

视图函数

def user_forget(request):
    if request.method == 'GET':
        user_forget_form = UserForgetForm()
        return render(request, 'users/forgetpwd.html', {
            'user_forget_form': user_forget_form
        })
    else:
        user_forget_form = UserForgetForm(request.POST)
        if user_forget_form.is_valid():
            email = user_forget_form.cleaned_data['email']
            user_list = UserProfile.objects.filter(email=email)
            if user_list:
                send_email_code(email, 2)
                return HttpResponse('请尽快去您的邮箱去重置密码')
            else:
                return render(request, 'users/forgetpwd.html', {
                    'msg': '用户不存在',
                    'user_forget_form': user_forget_form
                })
        else:
            return render(request, 'users/forgetpwd.html', {
                'user_forget_form': user_forget_form
            })


def user_reset(request, code):
    if code:
        if request.method == 'GET':
            return render(request, 'users/password_reset.html', {
                'code': code
            })
        else:
            user_reset_form = UserResetForm(request.POST)
            if user_reset_form.is_valid():
                password = user_reset_form.cleaned_data['password']
                password1 = user_reset_form.cleaned_data['password1']
                if password == password1:
                    email_ver_list = EmailVerifyCode.objects.filter(code=code)
                    if email_ver_list:
                        email_ver = email_ver_list[0]
                        email = email_ver.email
                        user_list = UserProfile.objects.filter(email=email)
                        if user_list:
                            user = user_list[0]
                            user.set_password(password1)
                            user.save()
                            return redirect(reverse('users:user_login'))
                        else:
                            pass
                    else:
                        pass
                else:
                    return render(request, 'users/password_reset.html', {
                        'msg': '两次密码步一致',
                        'code': code
                    })
            else:
                return render(request, 'users/password_reset.html', {
                    'user_reset_form': user_reset_form,
                    'code': code
                })
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值