django 开发忘记密码通过邮箱找回功能
一、流程分析:
1.点击忘记密码====》forget.html页面,输入邮箱和验证码,发送验证链接网址的邮件====》发送成功,跳到send_success.html提示
2.到邮箱里找到验证链接网址,访问重设密码网址reset.html===》重设密码提交数据,成功则返回首页,失败则返回错误信息
二、
1.users/forms.py文件中
from django import forms
from captcha.fields import CaptchaField ....... #forget.html中,用于验证邮箱格式和验证码
class ForgetForm(forms.Form):
email=forms.EmailField(required=True)
captcha=CaptchaField(error_messages={'invalid':'验证码错误'}) #reset.html中,用于验证新设的密码长度是否达标
class ResetForm(forms.Form):
newpwd1=forms.CharField(required=True,min_length=6,error_messages={'required': '密码不能为空.', 'min_length': "至少6位"})
newpwd2 = forms.CharField(required=True, min_length=6, error_messages={'required': '密码不能为空.', 'min_length': "至少6位"})
2.users/views.py中相关代码:
......
from django.shortcuts import render,redirect
from django.http import HttpResponse
from users.form import ForgetForm,ResetForm
from .models import UserProfile
from django.contrib.auth.hashers import make_password
from apps.utils.email_send import send_register_email
from .models import EmailVerifyRecord ...... class ForgetPwdView(View):
'''忘记密码'''
def get(self,request):
forget_form=ForgetForm()
return render(request,'forget.html',{'forget_form':forget_form})
def post(self,request):
forget_form = ForgetForm(request.POST)
if forget_form.is_valid():
email=request.POST.get('email','')
send_register_email(email,'forget')
return render(request,'send_success.html')
else:
return render(request,'forget.html',{'forget_form':forget_form}) class ResetView(View):
'''重置密码'''
def get(self,request,active_code):
record=EmailVerifyRecord.objects.filter(code=active_code)
print(record)
if record:
for i in record:
email=i.email
is_register=UserProfile.objects.filter(email=email)
if is_register:
return render(request,'pwd_reset.html',{'email':email})
return redirect('index') #因为<form>表单中的路径要是确定的,所以post函数另外定义一个类来完成
class ModifyView(View):
"""重置密码post部分"""
def post(self,request):
reset_form=ResetForm(request.POST)
if reset_form.is_valid():
pwd1=request.POST.get('newpwd1','')
pwd2=request.POST.get('newpwd2','')
email=request.POST.get('email','')
if pwd1!=pwd2:
return render(request,'pwd_reset.html',{'msg':'密码不一致!'})
else:
user=UserProfile.objects.get(email=email)
user.password=make_password(pwd2)
user.save()
return redirect('index')
else:
email=request.POST.get('email','')
return render(request,'pwd_reset.html',{'msg':reset_form.errors})
3.新建forget.html, success_send.html, pwd_reset.html
#forget.html
<!DOCTYPE html>
{% load staticfiles %}
<html lang="en"> <head>
<meta charset="UTF-8">
<title>忘记密码</title> <style>
.out{
width: 500px;
height: 900px;
margin: 0 auto;
margin-top: 100px;
}
</style>
</head>
<body> <div class="out">
<h1>真粗心,忘了密码吧?快通过邮箱找回密码吧!</h1>
<form method="post" action="{% url 'forget_pwd' %}">
<P><span>邮箱:</span><input type="text" name="email"></P>
<P><span>验证码:</span>{{ forget_form.captcha }}</P>
{% csrf_token %}
<p><input type="submit" value="确认发送验证邮件"></p>
</form>
<h1>{{ forget_form.errors }}</h1>
</div> </body>
</html>
#success_send.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>发送邮件成功,快去邮箱查看吧!(收件箱没有,垃圾箱一定有……)</h1>
</body>
</html>
#pwd_reset.html
<!DOCTYPE html>
{% load staticfiles %}
<html lang="en"> <head>
<meta charset="UTF-8">
<title>重置密码</title> <style>
.out{
width: 500px;
height: 900px;
margin: 0 auto;
margin-top: 100px;
}
</style>
</head>
<body> <div class="out">
<h1>可以重新设置一个好记的新密码啦!</h1>
<form method="post" action="{% url 'modify' %}">
<P><span>新密码:</span><input type="password" name="newpwd1" placeholder="至少6位"></P>
<P><span>确认新密码:</span><input type="password" name="newpwd2" placeholder="至少6位"></P>
{% csrf_token %}
<input type="hidden" name="email" value="{{ email }}">
<p><input type="submit" value="确认"></p>
</form>
<h1>{{ msg }}</h1>
</div> </body>
</html>
4.配置相关的urls.py:
from users.views import ForgetPwdView,ResetView,ModifyView ...... urlpatterns = [
..... #忘记密码
path('forget/',ForgetPwdView.as_view(),name='forget_pwd'),
#重置密码
path('reset/<str:active_code>',ResetView.as_view(),name='reset'),
path('modify/',ModifyView.as_view(),name='modify'), ......
]
运行项目,点击 忘记密码 链接(<a href="{% url 'forget_pwd' %}">忘记密码</a>),就可以完成通过邮箱找回密码的功能啦!
5.send_register_email()方法及其配置 详见上一篇博客
django 开发忘记密码通过邮箱找回功能的更多相关文章
- SSH项目里面 忘记密码的邮件发送功能
package com.xxx.util; import java.util.Date; import java.util.Properties; import javax.mail.Address; ...
- Django 实现网站注册用户邮箱验证功能
我们在很多网站上都可以看到用户注册使用电子邮件激活或启用的方式.也就是说,用户在注册后填写正确的电子邮件地址,接着网站会发送一封启用电子邮件到用户设置的电子邮件的邮箱中,并在邮件中提供一个激活或启用的 ...
- Django admin 忘记密码
from django.contrib.auth.models import User user = User.objects.get(username="admin") user ...
- Django开发笔记六
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...
- windows主机mysql忘记密码如何重置
本文主要是针对mysql重置密码过程中出现“mysqld不是内部命令或外部命令”的问题而写的.网上有很多关于mysql忘记密码了如何找回的文章,但是很多说的都不够详细,特别是还要用到DOS命令,可能这 ...
- windows环境下mysql忘记密码如何重置
本文主要是针对mysql重置密码过程中出现“mysqld不是内部命令或外部命令”的问题而写的.网上有很多关于mysql忘记密码了如何找回的文章,但是很多说的都不够详细,特别是还要用到DOS命令,可能这 ...
- java web实现 忘记密码(找回密码)功能及代码
java web实现 忘记密码(找回密码)功能及代码 (一).总体思路 (二).部分截图 (三).部分代码 (一).总体思路: 1.在 找回密码页面 录入 姓名.邮箱和验证码,录入后点击[提交]按钮, ...
- [py][mx]django通过邮箱找回密码
忘记密码处理流程 注意: 这个文章里的找回密码页面截取有问题. 找回密码页应该是让输入邮箱 直接上代码 class ActiveView(View): # 主要功能是修改user_profile里的i ...
- spring mvc下实现通过邮箱找回密码功能
1功能分析 通过spring mvc框架实现通过邮箱找回密码. 2 实现分析 主要是借助某个邮箱的pop3/smtp服务实现的邮件代发功能. 3 源码分析 3.1首先在用户表对应的javabean中加 ...
随机推荐
- 连不上虚拟机中的Redis的原因分析、以及虚拟机网络配置
1. 网络最好是桥接方式.我之前用的是"网络地址转换(NAT)",导致虚拟机里用命令ifconfig得到的ip是10.0.2.15,好奇怪的感觉,然后在真实机上一直连不上.有的说用 ...
- Linux chgrp命令
在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group的 ...
- linux服务器添加一块新硬盘不用重新启动机器的操作
Linux系统添加一块新硬盘不用关闭系统即可加载硬盘信息的操作 因之前换过硬盘重装系统,硬盘上的数据没有拷贝出来,开发人员问我要备份,炸了.我只好联系机房让他把之前换掉的硬盘插回服务器.但是插好之后f ...
- 解决图片裁剪com.android.camera.action.CROP和intent.putExtra("return-data", true);
最近在做一个图片上传,在上传之前需要对照片进行裁剪,遇到一个坑,在别的手机上运行都正常,在小米手机上却遇见一个问题,选中图片无法裁剪,直接闪退,目前已解决!之前出过问题的地方会标红 //选择图片 pr ...
- Java多线程:Automic包原理
http://blog.csdn.net/zhangerqing/article/details/43057799 https://www.cnblogs.com/dengzz/p/5688021.h ...
- KVM之七:KVM克隆
1.在克隆虚拟机之前,必须先暂停或者停掉kvm 虚拟机.以虚拟机 snale 为例,先暂停虚拟机,如下 [root@kvm ~ ::]#virsh list Id 名称 状态 ------------ ...
- MIPCMS V3.1.0 远程写入配置文件Getshell过程分析(附批量getshell脚本)
作者:i春秋作家--F0rmat 0×01 前言 今天翻了下CNVD,看到了一个MIPCMS的远程代码执行漏洞,然后就去官网下载了这个版本的源码研究了下.看下整体的结构,用的是thinkPHP的架 ...
- linux,windows,ubuntu下git安装与使用
ubuntu下git安装与使用:首先应该检查本地是否已经安装了git ,如果没有安装的话,在命令模式下输入 sudo apt-get install git 进行安装 输入git命令查看安装状态及常用 ...
- beta冲刺用户测评-咸鱼
测评人:庄加鑫-咸鱼 测评结果 一.使用体验数据加载响应很快!页面切换丝滑流畅!UI有点偏暗,有些字被覆盖了.页面布局过于居中,两侧空白范围较大.总体功能完善.二.登录.注册.忘记密码界面管理员登录 ...
- Beta第五天
听说