这个6-8对应对应6-11,6-12

拷入forgetpassword页面

书写处理忘记密码的view

users/views.py

# 用户忘记密码的处理view
class ForgetPwdView(View):
# get方法直接返回页面
def get(self, request):
return render(request, "forgetpwd.html", { })

django2.0.1 urls中配置:

    # 忘记密码
path('forget/', ForgetPwdView.as_view(), name= "forget_pwd"),

Django1.9.8 urls中配置:

    # 忘记密码
url('forget/$', ForgetPwdView.as_view(), name="forget_pwd"),

login html中忘记密码

 
mark

配置忘记密码页面中静态文件。

load static
修改static的目录
修改其中的url

定义一个给forget的form

users/forms.py:

# 注册验证码实现
class ForgetForm(forms.Form):
# 此处email与前端name需保持一致。
email = forms.EmailField(required=True)
# 应用验证码 自定义错误输出key必须与异常一样
captcha = CaptchaField(error_messages={"invalid": u"验证码错误"})

添加验证码

# 用户忘记密码的处理view
class ForgetPwdView(View):
# get方法直接返回页面
def get(self, request):
forget_from = ForgetForm()
return render(request, "forgetpwd.html", {"forget_from":forget_from })

html中加上验证码

 
mark

post中逻辑

    # post方法实现
def post(self, request):
forget_form = ForgetForm(request.POST)
# form验证合法情况下取出email
if forget_form.is_valid():
email = request.POST.get("email","")
# 发送找回密码邮件
send_register_eamil(email, "forget")
# 发送完毕返回登录页面并显示发送邮件成功。
return render(request, "login.html", {"msg":"重置密码邮件已发送,请注意查收"})
# 如果表单验证失败也就是他验证码输错等。
else:
return render(request, "forgetpwd.html", {"forget_from": forget_form })

邮箱重置密码邮件发送

 elif send_type == "forget":
email_title = "mtianyan慕课小站 找回密码链接"
email_body = loader.render_to_string(
"email_forget.html", # 需要渲染的html模板
{
"active_code": code # 参数
}
)
msg = EmailMessage(email_title, email_body, EMAIL_FROM, [email])
msg.content_subtype = "html"
send_status = msg.send()
 
mark

前端页面添加错误信息

已经重复很多遍这个操作了。

 
mark
 
mark
 
mark

上述三图进行改正,不一一列举

书写重置密码view

# 重置密码的view
class ResetView(View):
def get(self, request, active_code):
# 查询邮箱验证记录是否存在
all_record = EmailVerifyRecord.objects.filter(code=active_code)
# 如果不为空也就是有用户
active_form = ActiveForm(request.GET)
if all_record:
for record in all_record:
# 获取到对应的邮箱
email = record.email
# 将email传回来
return render(request, "password_reset.html", {"email":email})
# 自己瞎输的验证码
else:
return render(
request, "forgetpwd.html", {
"msg": "您的重置密码链接无效,请重新请求", "active_form": active_form})

配置重置密码url

# Django1.9.8:
# 重置密码urlc :用来接收来自邮箱的重置链接
url('reset/(?P<active_code>.*)/$', ResetView.as_view(), name="reset_pwd"),
# django2.0.1: # 重置密码urlc :用来接收来自邮箱的重置链接
re_path('reset/(?P<active_code>.*)/', ResetView.as_view(), name="reset_pwd"),

拷贝进来password reset页面

 
mark

添加一个隐藏的input框,以便于我们知道到底是哪个用户在重置密码

 
mark

配置html中三大变化加url配置。

 
mark

reseturl需要我们传参进来,但是modify的不需要。
所以url配置和view都得分开。

创建改变密码的forms:

# 重置密码form实现
class ModifyPwdForm(forms.Form):
# 密码不能小于5位
password1 = forms.CharField(required=True, min_length=5)
# 密码不能小于5位
password2 = forms.CharField(required=True, min_length=5)

书写改变密码的view;

 # 改变密码的view
class ModifyPwdView(View):
def post(self, request):
modiypwd_form = ModifyPwdForm(request.POST)
if modiypwd_form.is_valid():
pwd1 = request.POST.get("password1", "")
pwd2 = request.POST.get("password2", "")
email = request.POST.get("email", "")
# 如果两次密码不相等,返回错误信息
if pwd1 != pwd2:
return render(request, "password_reset.html", {"email": email, "msg": "密码不一致"})
# 如果密码一致
user = UserProfile.objects.get(email=email)
# 加密成密文
user.password = make_password(pwd2)
# save保存到数据库
user.save()
return render(request, "login.html", {"msg": "密码修改成功,请登录"})
# 验证失败说明密码位数不够。
else:
email = request.POST.get("email", "")
return render(request, "password_reset.html", {"email": email, "modiypwd_form":modiypwd_form})

配置modify的url。

django2.0.1:

    # 修改密码url; 用于passwordreset页面提交表单
path('modify_pwd/', ModifyPwdView.as_view(), name="modify_pwd"),

django1.9.8:

    # 修改密码url; 用于passwordreset页面提交表单
url(r'^modify_pwd/$', ModifyPwdView.as_view(), name="modify_pwd"),

建议自行走一遍注册,登录,忘记密码。重置密码。
错误的激活链接,错误的重置链接。值回填,form报错

更多: 重置密码链接是否被点击过,过期时间。

对应commit忘记密码重置功能实现完毕,并进行了必要的测试。对应6-11,6-12

原文学习来自简书,作者:天涯明月笙
链接:https://www.jianshu.com/p/5f280d6ea033

django+xadmin在线教育平台(十三)的更多相关文章

  1. django+xadmin在线教育平台(一)

    大家好,此教程为在慕学网的实战教程Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台的学习笔记,不对望指正! 使用Django+Xadmin打造在线教育平台(Python2, ...

  2. django+xadmin在线教育平台(五)

    3-3 django orm介绍与model设计 上节教程完成后代码(来学习本节前置条件): 对应commit: 留言板前端页面展示.本次内容截止教程3-2结束. 可能现在你还在通过手写sql语句来操 ...

  3. django+xadmin在线教育平台(四)

    3-2 配置表单页面 必要的该说的,该了解的 前置条件: 你已经学习了前面教程.将项目的文件夹目录结构,setting配置等修改完毕与我保持一致. 本节通过Django快速的配置一个留言板页面来学习 ...

  4. django+xadmin在线教育平台(十)

    剩余app model注册 courses注册 新建courses/adminx.py: # encoding: utf-8 __author__ = 'mtianyan' __date__ = '2 ...

  5. django+xadmin在线教育平台(六)

    4-1 使用py3.6和django1.11开发系统前注意事项 直接通过Python3.6和django最新版本来开发我们的系统的一些注意事项. 原版本: Python 2.7 & djang ...

  6. django+xadmin在线教育平台(十七)

    8-1 课程列表 拷贝课程列表页到template目录 创建课程相关的urls.py Mxonline2/urls.py中声明包含到course的url中: # 课程app的url配置 url(r&q ...

  7. django+xadmin在线教育平台(十六)

    7-7 modelform 提交我要学习咨询1 对应表userask form会对字段先做验证,然后保存到数据库中. 可以看到我们的forms和我们的model中有很多内容是一样的.我们如何让代码重复 ...

  8. django+xadmin在线教育平台(十五)

    7-4 课程机构列表页数据展示2 前去html中进行数据填充   mark 可以看到所有城市是通过a标签,当前选中城市为active.   mark 之后把下面的写死的城市删除掉.   mark 这时 ...

  9. django+xadmin在线教育平台(十四)

    7-1 django templates模板继承1 机构可以筛选类别 机构可以根据所在地区进行分类 右侧我要学习功能: form表单提交 右下:授课机构排名 页面头部与底部为全局头和全局底部. Dja ...

随机推荐

  1. 查看服务器配置信息prtdiag与systeminfo实用命令

    UNIX(SUN服务器)bash-2.05# prtdiag -v系统配置:  Sun Microsystems  sun4u Sun Fire V890系统时钟频率:150 MHz内存大小:3276 ...

  2. pat1033. To Fill or Not to Fill (25)

    1033. To Fill or Not to Fill (25) 时间限制 10 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 ZHANG, Gu ...

  3. React.js 小书 Lesson2 - 前端组件化(一):从一个简单的例子讲起

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson2 转载请注明出处,保留原文链接和作者信息. 很多课程一上来就给大家如何配置环境.怎么写 Re ...

  4. js跳转到邮箱登录

    做邮箱验证时为了用户体验,往往会有跳转到邮箱登录这一按钮,其中的js如下: $("#btnemail").click(function () { var userEmail = $ ...

  5. intellijidea课程 intellijidea神器使用技巧 5-1 svn相关

    subversion ==> show local history 查看历史记录 Ctrl D 历史记录对比 ctrl alt z 复原

  6. 也谈ThreadLocal

    欢迎赐教博客地址(http://www.cnblogs.com/shizhongtao/p/5358411.html) 对于ThreadLocal使用,网上一堆一堆的.什么内存泄露,什么线程不安全.这 ...

  7. Android 仿微信朋友圈拍小视频上传到服务器

    这个接上一个写的实现拍小视频和传到服务器的  界面是这个样子滴. 我也知不知道怎么给图片搞小一点o(╯□╰)o 布局文件是这样的[认真脸] <?xml version="1.0&quo ...

  8. wechat开发笔记之1.线上环境搭建与测试

    Wechat开发笔记 线上环境搭建: 申请一个wechat公众平台. 手机个人微信可以用webwechat来测试. Website:https://web.weixin.qq.com/ 手机客户端扫一 ...

  9. 阻塞IO, 非阻塞IO, 同步IO,异步IO

    阻塞IO, 非阻塞IO, 同步IO,异步IO 介绍 先说明几个概念 用户空间与内核空间 为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间(内存)划分为两部分,一部分 ...

  10. Azure 2 月新公布

    Azure 2 月新发布:关于虚机和云服务的降价通告,Azure SQL 数据仓库正式发布,Microsoft 认知服务:人脸识别 API 定价模式和名称更新,以及计量名称变更 关于虚机和云服务的降价 ...