django发送邮件,激活账户


setting中配置
# 发送邮件配置
EMAIL_HOST = "smtp.163.com"
EMAIL_PORT = 25
EMAIL_HOST_USER = '*******@163.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_USE_TLS = False
EMAIL_FROM = '*******@163.com'  #和user名称保持一致,不然报错(指明发件人)
新建project package

新建project package --- utils

新建email_send.py文件

from django.core.mail import send_mail  # 发送邮箱
from users.models import EmailVerifyRecord
from Dimples.settings import EMAIL_FROM
生成随机字符串
# 随机字符串
def random_str(randomlength=8):
    str = '' # str初始为空
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()  #random模块用于生成随机数
    # 循环生成随机字符串
    for i in range(randomlength):
        str += chars[random.randint(0, length)]
    return str
 发送邮件:
def send_register_email(email, send_type='register'):
    email_record = EmailVerifyRecord()
    code = random_str(16)
    email_record.code = code
    email_record.email = email
    email_record.send_type = send_type
    email_record.save()  # 保存到数据库

    email_title = ''
    email_body = ''
    if send_type == 'register':
        email_title = '注册激活链接'
        email_body = '请点击下面链接激活你的账号:http://127.0.0.1:8000/active/{0}'.format(code)
        # 使用内置函数向用户直接发送邮件
        send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
        if send_status:
            pass
views.py

注册邮件的函数

from utils.email_send import send_register_email  #

register_from.email.value 获取上次的值

value="{{ register_from.email.value }}"
class RegisterView(View):
    def get(self, request):
        register_from = RegisterForm()
        return render(request, "register.html", {'register_from': register_from})

    def post(self, request):
        register_from = RegisterForm(request.POST)
        if register_from.is_valid():
            user_name = request.POST.get('email', '')
            pass_word = request.POST.get('password', '')
            user_profile = UserProfile()
            user_profile.username = user_name
            user_profile.password = pass_word
            # 对密码加密
            user_profile.password = make_password(pass_word)
            user_profile.save()  # 保存到数据库
            # 注册邮件的函数
            send_register_email(user_name, 'register')
            return render(request, "login.html")
        else:
            return render(request, "register.html", {'register_from': register_from})

为了验证邮箱,必须让用户在邮箱里面激活

RegisterView.py中
#表示用户还没有激活
user_profile.is_active = False

设置一个url:

url(r'^active/(?P<active_code>.*)/$', ActiveUserView.as_view(), name='user_active'),
]
激活用户
# 激活用户
class ActiveUserView(View):
    def get(self, request, active_code):
       
        records = EmailVerifyRecord.objects.filter(code=active_code)
        if records:
            for record in records:
                email = record.email
                user = UserProfile.objects.get(email=email)
                user.is_active = True
                user.save()
        else:  # 链接失效
            return render(request, 'active_fail.html')
        return render(request, 'login.html')
user_login函数中
if user is not None:
            # 判断用户,没有激活了跳转登录界面
            if user.is_active:
                login(request, user)
                return render(request, "index.html")
            else:
                return render(request, "login.html", {'msg': "用户没有激活"})
        else:
            return render(request, "login.html", {'msg': "用户名或密码错误"})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值