Django8 账号激活邮件

settings

# smtp服务的邮箱服务器
EMAIL_HOST = 'smtp.163.com'
# smtp服务固定的端口是25
EMAIL_PORT = 25
#发送邮件的邮箱
EMAIL_HOST_USER = 'buwusheng@163.com'
#在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '009723'
#收件人看到的发件人 <此处要和发送邮件的邮箱相同>
EMAIL_FROM = 'python<buwusheng@163.com>'

urls

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include("App.urls"))
]

App.urls

from django.urls import path

from App import views
app_name='App'
urlpatterns = [
    # 邮件验证
    path('checkuser/',views.check_user,name='checkuser'),
    path('active/<token>/',views.active_user,name='activeuser'),
]

App.views

from django.core.mail import send_mail
from django.http import HttpResponse
from django.shortcuts import render

from django.template import loader
from django.urls import reverse

from App.models import User

from App.util import token_confirm
from day08.settings import EMAIL_FROM


def check_user(request):
    if request.method =='POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        # 检测用户是否存在
        user = User.objects.filter(username=username,password=password).first()
        if user:
            return HttpResponse("用户已经存在")
        # 保存用户信息
        user = User.objects.create(username=username,password=password,is_active=0)

        # 发送邮件,确认激活
        token = token_confirm.generate_validate_token(user.uid)
        print(token)
        # 构造验证url
        url = "http://"+request.get_host()+reverse("App:activeuser",kwargs={'token':token})
        # 加载模板
        html = loader.get_template('active.html').render({'url':url})
        print(url)
        send_mail("账号激活",'',EMAIL_FROM,['buwusheng@163.com'],html_message=html)
        return HttpResponse("激活邮件已经发送,请登录邮箱确认激活")
    return render(request,'register.html')


def active_user(request,token):
    # 激活用户
    try:
        uid = token_confirm.confirm_validate_token(token)
    except:
        uid = token_confirm.remove_validate_token(token)
        user = User.objects.get(pk=uid)
        user.delete()
        return HttpResponse("激活失败,请重新注册")
    try:
        user = User.objects.get(pk=uid)
    except User.DoesNotExist:
        return HttpResponse("你激活的用户不存在,请重新注册")
    user.is_active = 1  # 激活用户
    user.save()

    return HttpResponse("用户已激活,请登录系统")

App.models

from django.db import models

class User(models.Model):
    uid = models.AutoField(primary_key=True)
    username = models.CharField(unique=True, max_length=30)
    password = models.CharField(max_length=128)
    regtime = models.DateTimeField(auto_now=True)
    is_active = models.IntegerField(default=1)

    class Meta:
        db_table = 'user'

App.util

from itsdangerous import URLSafeTimedSerializer as utsr
import base64
from django.conf import settings as django_settings

class Token:
    def __init__(self, security_key):
        self.security_key = security_key
        self.salt = base64.encodebytes(security_key.encode('utf8'))
    # 生成token
    def generate_validate_token(self, username):
        serializer = utsr(self.security_key)
        return serializer.dumps(username, self.salt)
    # 验证token
    def confirm_validate_token(self, token, expiration=3600):
        serializer = utsr(self.security_key)
        return serializer.loads(token, salt=self.salt, max_age=expiration)
    # 移除token
    def remove_validate_token(self, token):
        serializer = utsr(self.security_key)
        print(serializer.loads(token, salt=self.salt))
        return serializer.loads(token, salt=self.salt)


token_confirm = Token(django_settings.SECRET_KEY)    # 定义为全局变量

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{% url 'App:checkuser' %}" method="post">
    {% csrf_token %}
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"> <br>
    <input type="submit">
</form>
</body>
</html>

active.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>账户激活</title>
</head>
<body>
<p>亲爱的用户:</p>
<h2>请点击链接 <a href="{{ url }}">激活 </a> 账号</h2>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值