版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/85222797
一 编写模板文件
1 mysite/templates/account/password_reset_form.html
{% extends "base.html" %}
{% block title %}重置密码{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
<h1>忘记密码?请重置。</h1>
<p>输入您的电子邮件来设置新密码。</p>
<form class="form-horizontal" action="." method="post">{% csrf_token %}
<div class="form-group">
<label class="col-md-5 control-label text-right">Email</label>
<div class="col-md-6 text-left">{{ form.email }}</div>
</div>
<input type="submit" value="发送电子邮件" class="btn btn-primary btn-lg">
</form>
</div>
{% endblock %}
2 mysite/templates/account/password_reset_email.html
<p>因为你在 <a href="https://blog.csdn.net/chengqiuming/">CSDN</a>重置了密码,所以你收到了这封邮件!</p>
<p>请转到以下页面,选择一个新密码:</p>
{{ protocol }}://{{ domain }}{% url 'account:password_reset_confirm' uidb64=uid token=token %}
<p>你的用户名是:{{ user.get_username }}</p>
<p>感谢您使用我们的网站!</p>
<p>https://blog.csdn.net/chengqiuming/</p>
3 mysite/templates/account/password_reset_subject.txt
请重置你的密码!
4 mysite/templates/account/password_reset_done.html
{% extends "base.html" %}
{% block title %}重置密码{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
<h1>重置密码</h1>
<p>我们已经通过电子邮件向您发送了设置密码的指示,如果您输入的电子邮件存在。你应该马上收到。</p>
<p>如果您没有收到电子邮件,请确保您已经输入了您注册的地址,并检查您的垃圾邮件文件夹。</p>
</div>
{% endblock %}
5 mysite/templates/account/password_reset_confirm.html
{% extends "base.html" %}
{% block title %}重置密码{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
<h1>重置密码</h1>
<p>请输入您的新密码两次,以便我们能够验证您输入的是正确的。</p>
<form class="form-horizontal" action="." method="post">{% csrf_token %}
<div class="form-group">
<label class='col-md-5 control-label text-right'>新密码</label>
<div class="col-md-6 text-left">{{ form.new_password1 }}</div>
</div>
<div class="form-group">
<label class='col-md-5 control-label text-right'>确认密码</label>
<div class="col-md-6 text-left">{{ form.new_password2 }}</div>
</div>
<input type="submit" value="修改密码" class="btn btn-primary btn-lg" />
</form>
</div>
{% endblock %}
6 mysite/templates/account/password_reset_complete.html
{% extends "base.html" %}
{% block title %}密码重置{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
<h1>重置密码</h1>
<p>您的密码已设置,请<a href="{% url 'account:user_login' %}">登录</a>.</p>
</div>
{% endblock %}
二 编写URL——mysite/account/urls.py
from django.conf.urls import url
from . import views
from django.contrib.auth import views as auth_views
urlpatterns = [
# 自定义登录
# url(r'^login/$', views.user_login, name='user_login'),
# django内置的登录
url(r"^login/$", auth_views.login, name="user_login"),
url(r"^new-login/$", auth_views.login, {"template_name": "account/login.html"}),
url(r'^logout/$', auth_views.logout, {"template_name": "account/logout.html"}, name='user_logout'),
url(r'^register/$', views.register, name="user_register"),
# 给password_change方法传入post_change_redirect参数
url(r'^password-change/$', auth_views.password_change, {"post_change_redirect": "/account/password-change-done"},
name='password_change'),
url(r'^password-change-done/$', auth_views.password_change_done, name='password_change_done'),
# 重置密码开始
url(r'^password-change/$', auth_views.password_change, {"post_change_redirect":"account/password-change-done"}, name='password_change'),
url(r'^password-change-done/$', auth_views.password_change_done, name='password_change_done'),
url(r'^password-reset/$', auth_views.password_reset, {"template_name":"account/password_reset_form.html","subject_template_name":"account/password_reset_subject.txt", "email_template_name":"account/password_reset_email.html", "post_reset_redirect":"/account/password-reset-done"}, name="password_reset"),
url(r'^password-reset-done/$', auth_views.password_reset_done, {"template_name":"account/password_reset_done.html"}, name="password_reset_done"),
url(r'^password-reset-confirm/(?P<uidb64>[-\w]+)/(?P<token>[-\w]+)/$', auth_views.password_reset_confirm, {"template_name":"account/password_reset_confirm.html", "post_reset_redirect":"/account/password-reset-complete"}, name="password_reset_confirm"),
url(r'^password-reset-complete/$', auth_views.password_reset_complete, {"template_name":"account/password_reset_complete.html"}, name="password_reset_complete"),
# 重置密码结束
]
三 配置邮箱服务器——mysite/mysite/settings.py
EMAIL_HOST = 'smtp.qq.com'
EMAIL_HOST_USER = "[email protected]"
EMAIL_HOST_PASSWORD = "从qq邮箱获得的授权码"
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = "[email protected]"
四 测试
1 浏览器输入:http://localhost:8000/account/password-reset/,然后输入邮箱
2 点击发送电子邮件
3 打开电子邮件
4 进入电子邮件中的链接
5 输入要重置的密码
6 修改密码