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),
]
文件结构