在user文件夹下新建python包,utils

在包内新建文件email_send.py,其中包括验证字符串随机码的产生,数据库的存储和email的发送

  1. # -*- coding: utf-8 -*-
  2. # 作者:神秘藏宝室
  3. # 日期:2019/1/1 22:21
  4. from random import Random
  5. from django.core.mail import send_mail
  6. from users.models import EmailVerifyRecord
  7. from waaaxWeb.settings import EMAIL_FROM
  8. def random_str(randomlength=8):
  9. str = ''
  10. chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
  11. length = len(chars) - 1
  12. random = Random()
  13. for i in range(randomlength):
  14. str += chars[random.randint(0, length)]
  15. return str
  16. def send_registr_email(email, sendtpye='register'):
  17. email_record = EmailVerifyRecord()
  18. code = random_str(16)
  19. email_record.code = code
  20. email_record.email = email
  21. email_record.send_type = sendtpye
  22. email_record.save()
  23. email_title = ''
  24. email_body = ''
  25. if sendtpye == 'register':
  26. email_title = u'维可思电子网注册激活链接'
  27. email_body = u'请点击下面的链接激活您的账号:http://127.0.0.1:8000/active/{0}'.format(code)
  28. send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
  29. return send_status

因为用到发送email需要在settings下设置EMAIL的属性

  1. EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
  2. EMAIL_HOST = 'smtp-mail.outlook.com' #SMTP地址 例如: smtp.163.com
  3. EMAIL_PORT = 25 #SMTP端口 例如: 25
  4. EMAIL_HOST_USER = 'waaax@outlook.com' #qq的邮箱 例如: xxxxxx@163.com
  5. EMAIL_HOST_PASSWORD = '' #我的邮箱密码 例如 xxxxxxxxx
  6. EMAIL_SUBJECT_PREFIX = u'django' #为邮件Subject-line前缀,默认是'[django]'
  7. EMAIL_USE_TLS = True #与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是false
  8. EMAIL_FROM = 'waaax@outlook.com'

调试下正常注册可以收到email验证了

修改views下的跳转逻辑

  1. class RegisterView(View):
  2. def get(self, request):
  3. register_form = RegisterForm()
  4. return render(request, 'register.html', {'register_form':register_form})
  5. def post(self, request):
  6. register_form = RegisterForm(request.POST)
  7. if register_form.is_valid():
  8. user_name = request.POST.get("email", "")
  9. pass_word = request.POST.get("password", "")
  10. user_profile = UserProfile()
  11. user_profile.username = user_name
  12. user_profile.email = user_name
  13. user_profile.password = make_password(pass_word)
  14. user_profile.save()
  15. status = send_registr_email(user_name, 'register')
  16. if status:
  17. return render(request, "login.html")
  18. else:
  19. return render(request, "register.html", {"msg": u"发送邮件失败!"})
  20. else:
  21. return render(request, "register.html", {"register_form": register_form})

修改register.html内的错误提示

  1. <div class="error btns" id="jsEmailTips">{% for key,error in register_form.errors.items %} {{ error }} {% endfor %}{{ msg }}</div>

修改输入框的错误提示

  1. <div class="form-group marb20 {% if register_form.errors.email %}errorput{% endif %}">
  2. <label>邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;箱</label>
  3. <input type="text" id="id_email" name="email" value="{{ register_form.email.value }}" placeholder="请输入您的邮箱地址" />
  4. </div>
  5. <div class="form-group marb8 {% if register_form.errors.password %}errorput{% endif %}">
  6. <label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码</label>
  7. <input type="password" id="id_password" name="password" value="{{ register_form.password.value }}" placeholder="请输入6-20位非中文字符密码" />
  8. </div>
  9. <div class="form-group marb8 captcha1 {% if register_form.errors.captcha %}errorput{% endif %}">
  10. <label>验&nbsp;证&nbsp;码</label>
  11. {{ register_form.captcha }}
  12. </div>

增加邮箱激活功能,首先要修改注册时候is_active的初始值为未激活

  1. class RegisterView(View):
  2. def get(self, request):
  3. register_form = RegisterForm()
  4. return render(request, 'register.html', {'register_form':register_form})
  5. def post(self, request):
  6. register_form = RegisterForm(request.POST)
  7. if register_form.is_valid():
  8. user_name = request.POST.get("email", "")
  9. pass_word = request.POST.get("password", "")
  10. user_profile = UserProfile()
  11. user_profile.username = user_name
  12. user_profile.email = user_name
  13. user_profile.password = make_password(pass_word)
  14. user_profile.is_active = False
  15. user_profile.save()
  16. status = send_registr_email(user_name, 'register')
  17. if status == 1:
  18. return render(request, "login.html")
  19. else:
  20. return render(request, "register.html", {"msg": u"发送邮件失败!"})
  21. else:
  22. return render(request, "register.html", {"register_form": register_form})

新建一个激活用的view类AciveUserView

  1. class AciveUserView(View):
  2. def get(self, request, active_code):
  3. all_records = EmailVerifyRecord.objects.filter(code=active_code)
  4. if all_records:
  5. for record in all_records:
  6. email = record.email
  7. user = UserProfile.objects.get(email=email)
  8. user.is_active = True
  9. user.save()
  10. return render(request, 'login.html')

增加urls

  1. url(r'^active/(?P<active_code>.*)/$', AciveUserView.as_view(), name="user_acive"),

这样当访问邮箱收到的激活链接时候就会改变激活状态,然后跳转到登陆界面

重新修正登陆要求,必须激活

  1. class LoginView(View):
  2. def get(self, request):
  3. return render(request, 'login.html', {})
  4. def post(self, request):
  5. login_form = LoginForm(request.POST)
  6. if login_form.is_valid():
  7. user_name = request.POST.get("username", "")
  8. pass_word = request.POST.get("password", "")
  9. user = authenticate(username=user_name, password=pass_word)
  10. if user is not None:
  11. if user.is_active:
  12. login(request, user)
  13. return render(request, "index.html")
  14. else:
  15. return render(request, "login.html", {"msg": u"用户未激活"})
  16. else:
  17. return render(request, "login.html", {"msg": u"用户名或者密码错误!"})
  18. else:
  19. return render(request, "login.html", {"login_form": login_form})

OK!已经可以正确显示未激活状态 ,对激活链接进行激活 和 激活直接登陆

django 增加验证邮箱功能的更多相关文章

  1. Django form表单功能的引用(注册,复写form.clean方法 增加 验证密码功能)

    1. 在app下 新建 forms.py 定义表单内容,类型models from django import forms class RegisterForm(forms.Form): userna ...

  2. [个人网站搭建]·Django增加评论功能(Python3)

    [个人网站搭建]·Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址:https://github.com/ ...

  3. java实现邮箱验证的功能

    在日常生活中,我们在一个网站中注册一个账户时,往往在提交个人信息后,网站还要我们通过手机或邮件来验证,邮件的话大概会是下面这个样子的: 用户通过点击链接从而完成注册,然后才能登录. 也许你会想,为什么 ...

  4. 用户找回密码功能JS验证邮箱通过点击下一步隐藏邮箱输入框并修改下一步按钮的ID

    //这里是BaseDao /** * 获得一个对象 * @param hql * @param param * @return */ public Object get(String hql, Obj ...

  5. Django ckeditor增加编辑代码 功能

    前言 使用ckeditor这个组件的时候 对于长写博客的同学当然希望能有 增加代码这个功能按钮 而这个按钮 需要自己配置 我们的编辑器自然需要添加代码块的功能. 需要用到插件codesnippet,c ...

  6. Django 之验证和授权

    一.验证和授权概述 Django有一个内置的授权系统.他用来处理用户.分组.权限以及基于cookie的会话系统.Django的授权系统包括验证和授权两个部分.验证是验证这个用户是否是他声称的人(比如用 ...

  7. 怎么WordPress增加在线投稿功能

    现在很多个人博客为了增加博客的内容,都会提供投稿通道,大部分都是以邮箱的形式进行投稿,不过这样一来,也很费人力,要拷贝复制,然后编辑等.如果给博客加个在线投稿功能,那就方便多了.稍微审核下文章内容就可 ...

  8. Django-中间件-csrf扩展请求伪造拦截中间件-Django Auth模块使用-效仿 django 中间件配置实现功能插拔式效果-09

    目录 昨日补充:将自己写的 login_auth 装饰装在 CBV 上 django 中间件 django 请求生命周期 ***** 默认中间件及其大概方法组成 中间件的执行顺序 自定义中间件探究不同 ...

  9. php使用过滤器filter_var轻松验证邮箱url和ip地址等

    以前使用php的时候还不知道有过滤器filter这玩意,那时候判断邮箱.url和ip地址格式是否符合都是用正则表达式.后来随着使用的逐渐深入,才知道在php中也可以使用内置的函数库过滤器filter来 ...

随机推荐

  1. jquery库实现iframe自适应内容高度和宽度

    javascript原生和jquery库实现iframe自适应内容高度和宽度---推荐使用jQuery的代码! ‍<iframe src="index.php" id=&qu ...

  2. 第二百六十二节,Tornado框架-cookie

    Tornado框架-cookie Cookie 是网站用来在客户端保存识别用户的一种小文件.一般来用库可以保存用户登 录信息.购物数据信息等一系列微小信息. self.set_cookie()方法,创 ...

  3. 【BZOJ】1673: [Usaco2005 Dec]Scales 天平(dfs背包)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1673 bzoj翻译过来的c<=230不忍吐槽......................... ...

  4. notepad++程序员开发插件

    1. sftp 2. explore 3. XBrackets 括号自动补全(引号,方括号)

  5. 【转】Win32 创建控件风格不是Win XP解决方案

    有时候我有在用Win32 API来向窗体上添加控件时,通过CreateWindow或CreateWindowEx创建出来的控件的风格不像XP风格,而是像Windows 2000的风格,界面很难看.注意 ...

  6. 全新的membership框架Asp.net Identity——绕不过的Claims

    http://www.cnblogs.com/JustRun1983/p/4708176.html?utm_source=tuicool&utm_medium=referral

  7. docker实用命名

    删除tag/镜像: #删除tag docker rmi index-dev.qiniu.io/cs-kirk/nginx:latest docker rmi index-dev.qiniu.io/cs ...

  8. MyEclipse10.6 安装SVN插件方法及插件下载地址

        今天MyEclipse10.6出了点问题,所以重装了它,同一时候也把svn的插件重装了一次,把网上资源和自己的经历顺便在博客这里记录一下.建议直接看方法一好了,简单方便,不必要折腾太多. 下来 ...

  9. IOS7 新特性(针对同样讨厌更新后IOS7的开发者)

    本文转载至 http://blog.csdn.net/hanbing861210/article/details/13614211 您还未登录!|登录|注册|帮助 首页 业界 移动 云计算 研发 论坛 ...

  10. HDU 5306 Gorgeous Sequence[线段树区间最值操作]

    Gorgeous Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...