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中加 ...
随机推荐
- php 类接口继承练习
<?php /** * @hypo 接口的特性:接口中定义的所有方法都必须是public 接口的实现:一个接口可以使用implements操作符,类中必须实现接口中的所有方法,否则会报fatal ...
- 让Myeclipse自动生成的get set方法 自动加上文本注释,并且注释内容包含字段中我们加的文档注释
在进行编码写实体类的时候发现,一个实体类有好多的字段要进行注释,他们都是私有的不能直接访问,我们在写的时候加入的文档注释也起不到效果,但是自动生成的get,set方法的文档注释有不符合我们要求(没有包 ...
- Leetcode 3——Palindrome Number(回文数)
Problem: Determine whether an integer is a palindrome. Do this without extra space. 简单的回文数,大一肯定有要求写过 ...
- [高级软件工程教学]团队Alpha阶段成绩汇总
一.作业地址: https://edu.cnblogs.com/campus/fzu/AdvancedSoftwareEngineering/homework/1408 https://edu.cnb ...
- Tornado介绍及自定义组件
Tornado 的性能是相当优异的,因为它试图解决一个被称之为"C10k"问题,就是处理大于或等于一万的并发.一万呀,这可是不小的量 条件:处理器为 AMD Opteron, 主频 ...
- java连接jdbc Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by defa
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root",& ...
- NOIP2016 天天爱跑步 80分暴力
https://www.luogu.org/problem/show?pid=1600 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养 ...
- Linux下高效指令
Linux管理磁盘 资本指令 查看当前磁盘使用情况:df -h fdisk -l (查看所有的硬盘) 服务器添加硬盘:在系统设置添加 分区: fdisk /dev/sdb (sdb, sdc, sde ...
- service层报错找不到方法Invalid bound statement (not found)
报错信息如下 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.imooc.se ...
- GitHub 上下载单个文件夹
写代码的一定经常去github上查看.下载一些源码,有时候会想下载一个项目中的一个文件夹里的内容,但是github上只提供了整个项目的下载,而整个项目里东西太多,压缩的文件太大,github的下载速度 ...