毕业设计----Django实现简单邮箱激活认证

开头

       在做毕业设计时,想到用邮箱来对用户注册进行一个激活认证,只有该用户激活了才能进行登录,于是可以通过qq邮箱来进行一个简单的激活认证。

步骤

1.模型类文件操作

       在用户模型类中添加两个字段:emailis_activeemail字段用于保存用户的邮箱地址,is_active字段用于标识用户是否已激活。

class User(models.Model):
    id = models.AutoField('id',primary_key=True)
    username = models.CharField('用户名',max_length=255,default='')
    password = models.CharField('密码',max_length=255,default='')
    其它字段....
    # 添加邮箱验证
    email = models.EmailField('用户邮箱', max_length=255, default='')
    is_active = models.IntegerField('是否激活',default=0)  # 是否激活 0 未激活,1 激活
    class Meta:
        db_table = "user"

      完成后,运行数据库迁移命令,将新字段添加到数据库中。

python manage.py makemigrations
python manage.py migrate

2.发送激活邮件

        Django内置了一个简单的邮件发送功能,我们可以使用它来发送激活邮件。首先,在settings.py文件中配置邮件服务器信息:
在这里插入图片描述

send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None)

在大多数情况下,你可以使用django.core.mail.send_mail()来发送邮件。

参数说明:

  • subject:一个字符串,邮件的主题。
  • message:一个字符串,邮件的正文内容,纯文本格式。
  • from_email:字符串,发件人的邮箱地址。如果为None,Django将使用DEFAULT_FROM_EMAIL设置的值。
  • recipient_list:一个字符串列表,每项都是一个邮箱地址。recipient_list中的每个成员都可以在邮件的"收件人:"中看到其他的收件人。
  • fail_silently:一个布尔值。若为Falsesend_mail()会在发生错误时抛出smtplib.SMTPException。可在smtplib文档找到一系列可能的异常,它们都是SMTPException的子类。
  • auth_user:可选的用户名,用于验证登录SMTP服务器。若未提供,Django会使用EMAIL_HOST_USER指定的值。
  • auth_password:可选的密码,用于验证登录SMTP服务器。若未提供,Django会使用EMAIL_HOST_PASSWORD指定的值。
  • connection:可选参数,发送邮件使用的后端。若未指定,则使用默认的后端。查询邮件后端文档获取更多细节。
  • html_message:若提供了html_message,会使邮件成为multipart/alternative的实例,message的内容类型则是text/plain,并且html_message的内容类型是text/html
# 设置邮箱
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = '25'
EMAIL_HOST_USER = '######' # 当前发邮件的邮箱,这里填你自己的邮箱
EMAIL_HOST_PASSWORD = '######' # 这个密码是授权码
EMAIL_USE_TLS = True # 使用非加密协议

获取方式如下

A.先确定发件邮箱
在这里插入图片描述
B.开启服务
在这里插入图片描述
C.授权码
在这里插入图片描述
在注册视图中添加发送邮件的逻辑

def register(request):
    if request.method == "GET":
        return render(request, 'register.html')
    else:
        username = request.POST.get("username")
        pwd = request.POST.get('password')
        checkPwd = request.POST.get('checkPassword')
        # 新增邮箱验证
        email = request.POST.get('email')
        # print(username,pwd,checkPwd)
        try:
            User.objects.get(username=username)
            return errorResponse(request, '该用户名已被注册!!')
        except User.DoesNotExist:
            if not username or not pwd or not checkPwd:
                return errorResponse(request,'用户名或密码为空!!')
            if not email:
                return errorResponse(request,errMsg='请输入邮箱!')
            if pwd != checkPwd:
                return errorResponse(request,'两次密码不正确!!')
            else:
                # 创建md5对象
                md5 = hashlib.md5()
                # 对字符串进行编码
                md5.update(pwd.encode())
                # 加密
                pwd = md5.hexdigest()
                # 存储用户
                # 该用户未被激活
                user = User.objects.create(username=username,password=pwd,email=email)
                user.is_active = 0
                user.save()
                # 使用uuid产生一个token
                token = str(uuid.uuid4()).replace('-','')
                # 使用session存储token
                # request.session[token] = user.id
                request.session[str(token)] = str(user.id)
                request.session.save()  # 保存session到数据库或缓存
                path = f'http://127.0.0.1:9995/bossApp/active?token={token}'
                #  邮箱验证
                subject = "计算机专业招聘信息与统计可视化网站激活邮件"
                message = f"""
                <html>
                    <head>
                        <style>
                            body {{
                                font-family: Arial, sans-serif;
                                background-color: #f2f2f2;
                            }}

                            .container {{
                                position: relative;
                                max-width: 600px;
                                margin: 0 auto;
                                padding: 20px;
                                background-color: #fff;
                                border-radius: 5px;
                                box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
                            }}

                            h1 {{
                                color: #333;
                                font-size: 24px;
                                margin-bottom: 20px;
                            }}

                            p {{
                                color: #555;
                                font-size: 16px;
                                line-height: 1.5;
                            }}

                            a {{
                                color: #007bff;
                                text-decoration: none;
                            }}

                            a:hover {{
                                text-decoration: underline;
                            }}

                            p.signature {{
                                position: absolute;
                                bottom: 10px;
                                right: 30px;
                                color: #555;
                                font-size: 16px;
                                line-height: 1.5;
                            }}
                        </style>
                    </head>
                    <body>
                        <div class="container">
                            <h1>欢迎注册计算机专业招聘信息与统计可视化网站!</h1>
                            <p>点击链接开始激活使用:</p>
                            <p><a href="http://127.0.0.1:9996/bossApp/active?token={token}">点击激活</a></p>
                            <p>如果链接不可用,请复制以下内容到浏览器激活:</p>
                            <p>{path}</p>
                            <br>
                            <br>
                            <p class="signature">生夏</p>
                        </div>
                    </body>
                </html>
                """

                send_mail(subject=subject,message='',html_message=message,from_email=settings.EMAIL_HOST_USER,recipient_list=[email,])
                # print("邮箱信息:",result)
                return redirect('/bossApp/login')

3.激活账户

        现在需要创建一个视图来处理激活链接。在urls.py文件中,添加一个路由指向这个视图

urlpatterns = [
    # 邮箱激活
    path('active', views.active, name='active'),
]

views.py文件中,创建active视图:

def active(request):
    token = request.GET.get('token')
    print(token)
    # 获取session中的值
    uid = request.session.get(token)
    # print('------>',uid)
    user = User.objects.get(id=uid)
    # 用户激活,一开始设置is_active = 0,然后判段is_active为0还是为1设置用户能否登录 
    user.is_active = 1
    user.save()
    return redirect('/bossApp/login')

4.效果

点击邮件连接后才能激活登录
在这里插入图片描述

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值