Python通过Django实现用户注册和邮箱验证功能代码

本文主要向大家分享了Python编程中通过Django模块实现用户注册以及邮箱验证功能的简单介绍及代码实现,具体如下。

用户注册:

类似于用户登陆,同样在users.views.py中添加RegisterView(View)类,其中对表单的get和post作出处理。
如果是get方法,重新返回register页面让用户进行填写。

 def get(self, request):
  register_form = RegisterForm()
  return render(request, "register.html", {'register_form':register_form})

method = POST时,用户注册逻辑:

 def post(self, request):
  # 实例化form,验证每个字段是否合法
  register_form = RegisterForm(request.POST)
  pre_check = register_form.is_valid()
  if pre_check:
   # 取出email和password
   user_name = request.POST.get("email", "")
   pass_word = request.POST.get("password", "")
   # 实例化用户,然后赋值
   user_profile = UserProfile()
   user_profile.username = user_name
   user_profile.email = user_name
   # 新建用户为非活跃用户,可通过验证变为活跃用户
   user_profile.is_active = False
   # 将明文转换为密文赋给password
   user_profile.password = make_password(pass_word)
   user_profile.save() # 保存到数据库
   # 此处加入了邮箱验证的手段
   send_register_email(user_name, "register")
   return render(request, "login.html")
  else:
   # form表单验证失败,将错误信息传给前端
   return render(request, "register.html", {"register_form": register_form})

在form.py中添加RegisterForm类对给出表单处理类:

class RegisterForm(forms.Form):
 # 不能为空
 email = forms.EmailField(required=True)
 password = forms.CharField(required=True, min_length=6, max_length=20)
 # 出错信息
 captcha = CaptchaField(error_messages={"invalid":u"验证码错误"})

以下为对应的前端代码,其中添加了了django的模版用法,均以{% %}的形式在html中加入逻辑, 避免了python代码的直接插入,方便维护和修改。

<form id="email_register_form" method="post" action="{% url 'register' %}" autocomplete="off">
      <div class="form-group marb20 {% if register_form.errors.email %}errorput{% endif %}">
       <label>邮     箱</label>
       <input type="text" id="id_email" name="email" value="{{ register_form.email.value }}" placeholder="请输入您的邮箱地址" />
      </div>
      <div class="form-group marb8 {% if register_form.errors.password %}errorput{% endif %}">
       <label>密     码</label>
       <input type="password" id="id_password" name="password" value="{{ register_form.password.value }}" placeholder="请输入6-20位非中文字符密码" />
      </div>
      <div class="form-group marb8 captcha1 {% if register_form.errors.captcha %}errorput{% endif %}">
       <label>验 证 码</label>
       {{ register_form.captcha }}
      </div>
      <div class="error btns" id="jsEmailTips">{% for key,error in register_form.errors.items %}{{ error }}{% endfor %} {{ msg }}</div>
      <div class="auto-box marb8">
      </div>
      <input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="注册并登录" />
      {% csrf_token %}
     </form>

{% csrf_token %}是django为了在用户提交表单时防止跨站攻击所做的保护,在表单最后没有加入的话,不能正常提交
表单中有一项为验证码,在django中可以使用django-simple-captcha模块实现:

url(r'^captcha/', include(‘captcha.urls')) 配置url
{{ register_form.captcha }} 配置前端

邮箱验证:

在users.py中添加了邮箱验证的model:

class EmailVerifyRecord(models.Model):
 # 验证码
 code = models.CharField(max_length=20, verbose_name=u"验证码")
 email = models.EmailField(max_length=50, verbose_name=u"邮箱")
 # 包含注册验证和找回验证
 send_type = models.CharField(verbose_name=u"验证码类型", max_length=10, choices=(("register",u"注册"), ("forget",u"找回密码")))
 send_time = models.DateTimeField(verbose_name=u"发送时间", default=datetime.now)
 class Meta:
  verbose_name = u"邮箱验证码"
  verbose_name_plural = verbose_name
 def __unicode__(self):
  return '{0}({1})'.format(self.code, self.email)

在setting.py中添加配置邮箱信息:

EMAIL_HOST = "smtp.163.com" # 服务器
EMAIL_PORT = 25    # 一般情况下都为25
EMAIL_HOST_USER = "abc@163.com" # 账号
EMAIL_HOST_PASSWORD = "password" # 密码
EMAIL_USE_TLS = False    # 一般都为False
EMAIL_FROM = "abc@163.com"  # 邮箱来自

创建utils包,新建email_send .py

from random import Random # 用于生成随机码
from django.core.mail import send_mail # 发送邮件模块
from users.models import EmailVerifyRecord # 邮箱验证model
from MxOnline.settings import EMAIL_FROM # setting.py添加的的配置信息
# 生成随机字符串
def random_str(randomlength=8):
 str = ''
 chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
 length = len(chars) - 1
 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

然后将用户变为活跃用户,加入相关的view:

class ActiveUserView(View):
 def get(self, request, active_code):
 # 用code在数据库中过滤处信息
  all_records = EmailVerifyRecord.objects.filter(code=active_code)
  if all_records:
   for record in all_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")

配置生成页面的url:

url(r'^active/(?P<active_code>.*)/$', ActiveUserView.as_view(), name="user_active"), # 提取出active后的所有字符赋给active_code

至此,便可将is_active加入到登陆的限制当中:

    if user.is_active:
     login(request, user) # 调用login方法登陆账号
     return render(request, "index.html")
    else:
     return render(request, "login.html", {"msg": u"用户未激活"})

总结

以上就是本文关于Python通过Django实现用户注册和邮箱验证功能代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • 基于Django的ModelForm组件(详解)

    创建类 from django.forms import ModelForm from django.forms import widgets as wd from app01 import models class 类名(ModelForm): class Meta: model = models.表名 #models中的表名 fields="__all__", # 字段 exclude=None, # 排除字段 widgets=None, # 自定义插件 error_message

  • django实现用户登陆功能详解

    简介: Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Python写成. Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 . Django采用了MVC的软件设计模式,即模型M,视图V和控制器C. 用户名密码登陆实现: 在apps.users下找到views.py文件: 以下代码重写了authenticate()

  • django使用html模板减少代码代码解析

    看下面两个页面: 一个显示文章列表,一个显示文章详细信息,其中的部分内容相同,有可以重用的部分. 所有就此例可以设置三个html文件:重用部分,目录部分,文章部分. 重用部分: base.html <!DOCTYPE html> <!DOCTYPE html> <html lang="zh-CN"> {% load staticfiles %} <head> <meta charset="utf-8"> &

  • 基于Django filter中用contains和icontains的区别(详解)

    qs.filter(name__contains="e") qs.filter(name__icontains="e") 对应sql 'contains': 'LIKE BINARY %s', 'icontains': 'LIKE %s', 其中的BINARY是 精确大小写 而'icontains'中的'i'表示忽略大小写 以上这篇基于Django filter中用contains和icontains的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考

  • django上传图片并生成缩略图方法示例

    django 处理上传图片生成缩略图首先要注意form标签上必须有enctype="multipart/form-data"属性,另外要装好PIL库, 然后就很简单了,如下是实例代码: upload.html <div id="uploader"> <form id="upload" enctype="multipart/form-data" action="/ajax/upload/"

  • Django实现简单分页功能的方法详解

    本文实例讲述了Django实现简单分页功能的方法.分享给大家供大家参考,具体如下: 使用django的第三方模块django-pure-pagination 安装模块: pip install django-pure-pagination 将'pure_pagination'添加到settings.py文件中 INSTALLED_APPS = ( ... 'pure_pagination', ) 在view.py文件中 from django.shortcuts import render ro

  • Python中django学习心得

    以下是作者在学习Python中django框架时的学习笔记,并把测试的代码做了详细分析,最后还附上了学习心得,值得大家学习. URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. '''urlpatterns = [url(正则表达式, views视图函数,参数,别名),]参数说明:一个正则表达式字符串一个可调用对象,通常为一个视图函数或

  • 基于Django contrib Comments 评论模块(详解)

    老版本的Django中自带一个评论框架.但是从1.6版本后,该框架独立出去了,也就是本文的评论插件. 这个插件可给models附加评论,因此常被用于为博客文章.图片.书籍章节或其它任何东西添加评论. 一.快速入门 快速使用步骤: 安装包:pip install django-contrib-comments 在django的settings中的INSTALLED_APPS处添加'django.contrib.sites'进行app注册,并设置SITE_ID值. 在django的settings中

  • Python通过Django实现用户注册和邮箱验证功能代码

    本文主要向大家分享了Python编程中通过Django模块实现用户注册以及邮箱验证功能的简单介绍及代码实现,具体如下. 用户注册: 类似于用户登陆,同样在users.views.py中添加RegisterView(View)类,其中对表单的get和post作出处理. 如果是get方法,重新返回register页面让用户进行填写. def get(self, request): register_form = RegisterForm() return render(request, "regis

  • 在Django中进行用户注册和邮箱验证的方法

    本文主要介绍我在利用Django写文章时,采用的注册方法.首先说一下整体逻辑思路: •处理用户注册数据, •产生token,生成验证URL, •发送验证邮件, •用户登录网址,进行验证, •验证处理. 具体步骤: 1.添加用户 在Django中自带的User表中,有一个is_active字段,默认值是True,即用户填完表单提交之后,就可以进行登录.我们这里首先将is_acitve字段设为False,也就是说,必须经过后续的邮箱验证,才能够正常登录. 部分代码: if request.metho

  • PHP实现的用户注册表单验证功能简单示例

    本文实例讲述了PHP实现的用户注册表单验证功能.分享给大家供大家参考,具体如下: 注册界面 register.html <h1>用户注册</h1> <form method="post" action="register_verify.php"> <input type="text" placeholder="用户名" name="username"><

  • Android实现邮箱验证功能

    本文实例为大家分享了Android实现邮箱验证功能的具体代码,供大家参考,具体内容如下 目标效果: < 资源包(三个jar包和两个java页面):点击打开链接 1.首先需要注册一个邮箱(作为一个专门发验证码的邮箱,我是新注册的),然后打开网页版中POP3那一栏: 2.两个方格全打勾: 3.提示让设置授权码: 4.默认为停用,点击开启: 5.提示输入授权码,输入完成后会显示表格,表格右边显示未停用: 6.邮箱配置完成 7.新建项目,将资源包中三个jar包导入并引用,然后加入另外两个Java页面,更

  • Python使用装饰器模拟用户登陆验证功能示例

    本文实例讲述了Python使用装饰器模拟用户登陆验证功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 user_list = [ {'name':'ad1','passwd':'123'}, {'name':'ad2','passwd':'123'}, {'name':'ad3','passwd':'123'}, {'name':'ad4','passwd':'123'} ] #初始状态,用来保存登陆的用户, client_dic = {'

  • Laravel框架实现发送短信验证功能代码

    Laravel框架简介: Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于表达力. Laravel短信验证思路详解 今天在做到用户注册和个人中心的安全管理时,我实现借助第三方短信平台在Laravel框架中进行手机验证的设置; 由于我做的是一个为客户提供医疗咨询和保健品网站,所以我们对客户个人隐私的保护显得尤为重要,因而在客户登录后进入个人中心前,

  • jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码

    本文实例讲述了jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码.分享给大家供大家参考.具体如下: 这里实现圆角表单,圆角输入框,无刷新验证,漂亮唯美,是对这款基于HTML5/CSS3/jQuery来实现的表单效果的简要概括,用HTML5可以实现很多超乎寻常的效果,从此你会喜欢上HTML5,会骂一下万恶的IE,到现在IE8还不支持HTML5,正悲哀着呢. 先来看看运行效果截图: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-htm

  • 基于JS组件实现拖动滑块验证功能(代码分享)

    拖动滑块验证功能在支付宝,微信各大平台都能见到这样的功能,那么基于js组件是如何实现此功能的呢?今天小编就给大家分享下js 拖动滑块 验证功能的实现代码,具体代码如下所示: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="Cache-Control" content="no-cache, no-store, m

  • Java实现发送手机短信语音验证功能代码实例

    这篇文章主要介绍了Java实现发送手机短信语音验证功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 利用第三方平台可以实现发送手机短信验证码和语音验证码的功能,本文使用框架是struts2+spring+hibernate,现就action层给出核心代码功能. public class VerifyAction extends BaseAction<VerifyRequest> { private static final long

  • 通过PHP实现用户注册后邮箱验证激活

    我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本文将结合实例,讲解如何使用PHP+Mysql完成注册帐号.发送激活邮件.验证激活帐号.处理URL链接过期的功能. 业务流程 1.用户提交注册信息. 2.写入数据库,此时帐号状态未激活. 3.将用户名密码或其他标识字符加密构造成激活识别码(你也可以叫激活码). 4.将构造好的激活识别码组成URL发送到

随机推荐