django-邮箱验证

settings.py

# 邮件配置
EMAIL_USE_SSL = False

EMAIL_HOST = 'smtp.126.com'  # 服务器

EMAIL_PORT = 25

EMAIL_HOST_USER = 'wwwccoomm@126.com'  # 帐号

EMAIL_HOST_PASSWORD = 'wujingyu0728' # 授权码(****)
# 默认邮件
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
#发件人名称
EMAIL_FROM = 'Djiango'

前台:
register.html

<table>电子邮箱:</table>
<input type="text" name="email" value="">
<br>
{{ error }}
<br>
<input type="submit" name="submit" value="注册">

email.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    欢迎您注册Django!
    <br>
    请您点击下面的链接进行激活
    <p>
        <a href="{{ url }}">{{ url }}</a>
    </p>
</body>
</html>

active.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>active</title>
</head>
<body>
    <h1>只差最后一步了,我们已经给您填写的邮箱地址发送了一封邮件,请您移步邮箱点击链接,验证您的邮箱!!</h1>
</body>
</html>

后台:views.py

from django.shortcuts import render, HttpResponse
from registerapp.form import RegisterForm
from django.contrib.auth.models import User
from django.template import loader
from django.core.mail import send_mail, send_mass_mail
from django.core.cache import cache
from login import settings
import uuid
import hashlib
import re

#生成随机字符串
def get_random_str():
    uuid_val = uuid.uuid4()
    uuid_str = str(uuid_val).encode("utf-8")
    md5 = hashlib.md5()
    md5.update(uuid_str)
    return md5.hexdigest()
    
def register(request):
    contest = {}
    if request.method == "GET":
        form = RegisterForm
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        #得到用户填写的邮箱
        email = request.POST.get('email')
        #进行各种格式验证
        pass
        #加入数据库,同时置is_active=False
        area = User.objects.create_user(email=email, is_active=False)
        if area is not None:
            # 生成随机字符
            random_str = get_random_str()
            # 拼接链接
            url = "http://127.0.0.1:8000/register/" + random_str
            # 加载激活模板
            tmp = loader.get_template('registerapp/email.html')
            # 渲染
            html_str = tmp.render({'url': url})
        
            title = '欢迎您注册Django'
            msg = ''
            email_from = settings.DEFAULT_FROM_EMAIL
            # 发送到的邮箱
            reciever = [
                email,
            ]
        
            send_mail(title, msg, email_from, reciever, html_message=html_str)
            # 记录邮箱对应的字符串:cache.set(键,值,有效时间)
            cache.set(random_str, email, 120)
            return render(request, 'registerapp/active.html', )
        else:
            return HttpResponse('注册出错,请重试!')
    contest['form'] = form
    return render(request, 'registerapp/register.html', contest)
    
def active(request, random_str):
    #获得缓存的参数即用户的email
    res = cache.get(random_str)
    if res:
        area = User.objects.get(email=res)
        area.is_active = True
        area.save()
        return render(request, 'loginapp/login.html', )
    else:
        return HttpResponse('链接无效,请重试!')

url.py

from django.urls import path
from . import views


urlpatterns = [
    path('', views.register),
    path('<random_str>', views.active),
]

文件结构

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值