Django 注册之make_password() 加密 和 登录之check_password() 解密 及邮箱 发送 验证 激活

首先我们需要导入我们需要的包:

import re
from django.contrib.auth.hashers import make_password,check_password
from django.core.mail import send_mail
from django.conf import settings

注册的案列视图如下:

class RegsterView(View):
    '''用户注册视图'''
    def get( self, request):
        ''''渲染视图'''
        return render(request, 'register.html')

    def post( self, request ):
        '''用户注册逻辑'''
        # 首要判断用户协议是否勾选,如未勾选 下面条件皆不执行
        allow = request.POST.get('allow')
        if allow != 'on':		#allow勾选后的值为 -->on, 不勾选为 空
            return render(request, 'register.html',{'error':'请同意用户协议'})
        # 获取表单账号,密码,email ,并判断是否有某一项 未输入
        user_name = request.POST.get("user_name")
        pwd = request.POST.get("pwd")
        cpwd = request.POST.get("cpwd")
        email = request.POST.get("email")
        if not all([user_name,pwd,cpwd,email]):
            return render(request, 'register.html',{'error':'输入参数不全'})

        u = models.USer.objects.filter(username = user_name).first()
        # 如果不为空,获取user表对象根据filter()判断账号在数据库是否已经存在,如存在注册失败
        if u:
            return render(request, 'register.html',{'error':'已有同名账号'})
        # 判断两次密码是否相同
        if pwd != cpwd:
            return render(request, 'register.html',{'error':'两次输入密码不相同'})
        #正则表达式判断邮箱格式是否正确
        if not re.match ( '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$', email ):

            return render ( request, 'register.html', {'error': '邮箱格式不正确'} )
        #获取user表对象,进行数据提交入库
        u = models.USer()
        u.username = user_name
        u.password = make_password(pwd)
        u.email = email
        u.save()
        #邮箱发送
        '''/*
        在此之前 需要先到 setting.py 中 配置  发送人的信息 :
        	#这里我用的163邮箱 做的实例
            EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
            EMAIL_HOST = 'smtp.163.com'     # 发送邮件的服务器
            EMAIL_PORT = 25                 # 发送邮件的端口号
            # 发送邮件到邮箱
            EMAIL_HOST_USER = '发件人账号邮箱' # 发件人 用户名
            
            EMAIL_HOST_PASSWORD = '发件人的授权码'       # 发件人授权码
            # 收件人看到到发件人
            EMAIL_FORM = '收件人看到的发件人'
        */'''
        title = '激活邮件'  #标题
        #内容
        message = '<a href="http://127.0.0.1:8088/user/active?user_id={}">激活</a>'.format(u.id)
        #send_mail() 发送邮件,  第一参数 : 标题  第二参数 : 内容  第三参数:收件人看到的发件人,第四参数: 收件人邮箱
        #html_message  转义解析内容的html标签, 不然会直接显示字符串。
        send_mail (title, message, settings.EMAIL_FORM, [email], html_message=message)
        return render (request, 'register.html', {'error': '注册成功'})

邮箱发送了,我们需要对数据库中的激活装态进行从新赋值

class Email(View):
    '''邮箱激活'''
    def get( self ,request):
        '''*
        获取收件人点击激活跳转 所带过来的参数ID
        并从user表中判断是否有对应的记录
        判断记录是否存在
        如果存在 就给user  表所对应的记录的激活状态字段属性  改default=1 表示激活状态
        并使用 save() 提交入库。
        *'''
        user_id  =request.GET.get("user_id")
        u = models.USer.objects.filter(id=user_id).first()

        if not u:
            return HttpResponse("用户不存在")
        u.is_status = 1

        u.save()
        return  redirect( 'user:login')

当我们状态激活,证明账号已经可用了 ,现在我们开始尝试登录,密码解析,并进行判断:


class Login(View):

    def get( self, request):
        '''渲染页面'''
        return render(request, 'login.html')
    def post( self, request):
        '''登录逻辑判断'''
        '''
        *
        获取表单传送账号密码
        跟据获取到的账号,从数据库user表中找相等的账号 判断此账号是否存在
        账号存在则 判断密码 和数据库对应的密码是否相等
        因存入数据库时 密码是加密形式
        所 我们获取加密密码时需要使用 check_password(pwd,pwd)第一位置时明文密码,第二位置是加密密码,得出的结果是布尔类型 如果是True
        则密码相同, 如果为False则 密码不等。
        *
        '''
        username = request.POST.get('username')
        pwd = request.POST.get('pwd')
        user_name=models.USer.objects.filter(username=username).first()
        if not user_name:
            return  render(request, 'login.html', {"error":'账号不存在'})
        if check_password(pwd,user_name.password):
            return  render(request, 'login.html', {"error":'账号或密码错误'})
        return render(request, 'index.html', {"error":'登录成功'})

当然这是最简单的注册登录逻辑, 仅供参考!

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lonelypatients°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值