Django集成的密码找回功能

要实现忘记密码功能,您需要进行以下修改:

  1. 添加忘记密码链接到登录页面。
  2. 创建密码丢失修改页面。
  3. 创建密码修改页面。
  4. 编写相应的视图函数来处理密码丢失修改和密码修改逻辑。
  5. 编写发送验证信息到邮箱的逻辑。

以下是对您提供的模板的修改,以添加忘记密码链接和相应的修改页面:

{% extends 'base.html' %}
{% load widget_tweaks %}
{% block content %}
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-lg-4 col-md-6 col-sm-10">
                <h2 class="text-center mt-4 mb-3">登录</h2> {# 添加垂直内边距 #}
                <hr>
                {% if error_message %}
                    <div class="alert alert-danger">{{ error_message }}</div>
                {% endif %}
                <form method="post" action="{% url 'login' %}">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="username">用户名</label>
                        <input type="text" class="form-control" id="username" name="username"  placeholder="Enter your username">
                    </div>
                    <div class="form-group">
                        <label for="password">密码</label>
                        <input type="password" class="form-control" id="password" name="password" placeholder="Enter your password">
                    </div>
                    <div class="form-group">
                        <a href="{% url 'password_reset' %}" class="btn btn-link">忘记密码?</a>
                    </div>
                    <div class="form-group text-center">
                        <button type="submit" class="btn btn-primary btn-block">登录</button>
                        <a href="{% url 'register' %}" class="btn btn-link">注册</a>
                    </div>
                </form>
            </div>
        </div>
    </div>
{% endblock %}
{% block menu %}
{% endblock %}
  1. 创建密码重置 URL 路由:
# urls.py
from django.urls import path
from django.contrib.auth import views as auth_views

urlpatterns = [
    # 其他URL路由
    path('reset-password/', auth_views.PasswordResetView.as_view(), name='password_reset'),
    path('reset-password/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
    path('reset-password/confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    path('reset-password/complete/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]

 

  1. 创建密码重置模板: 在您的模板目录下创建以下模板文件:
  • registration/password_reset_form.html: 重置密码表单模板
  • registration/password_reset_email.html: 发送重置密码邮件模板
  • registration/password_reset_done.html: 密码重置请求已发送确认页面模板
  • registration/password_reset_confirm.html: 重置密码确认页面模板
  • registration/password_reset_complete.html: 密码重置完成页面模板

您可以参考 Django 文档中关于这些模板的说明。

  1. 创建相应的视图函数(这些视图函数已经由 Django 的内置视图处理程序提供,无需自己编写)。

  2. 启用邮件发送功能: 在您的 Django 项目设置中配置邮件发送设置,以便 Django 能够发送重置密码链接到用户的注册邮箱。

这样,当用户点击“忘记密码”链接时,他们将被引导到密码重置页面,并且在输入注册邮箱后,系统将向该邮箱发送重置密码的链接。

 

 

下面是如何继续创建相应的视图函数以及启用邮件发送功能的步骤:

  1. 创建密码重置视图:
# views.py
from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.views import PasswordResetView

class CustomPasswordResetView(PasswordResetView):
    email_template_name = 'registration/password_reset_email.html'
    form_class = PasswordResetForm
    template_name = 'registration/password_reset_form.html'
    success_url = reverse_lazy('password_reset_done')

 

在这个视图中,我们使用了 Django 的内置视图 PasswordResetView,并且指定了相应的模板和成功后的重定向 URL。

  1. 启用邮件发送功能:

在您的 Django 项目设置文件中,配置邮件发送设置,以便 Django 能够发送重置密码链接到用户的注册邮箱。您可以使用 Django 内置的邮件配置或者第三方库如 django-smtp-ssl 等。

# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'your_email_host'  # 例如:smtp.gmail.com
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your_email@example.com'
EMAIL_HOST_PASSWORD = 'your_email_password'

 

确保将上述设置中的 your_email_hostyour_email@example.comyour_email_password 替换为您的实际邮箱设置。
  1. 配置 URL 路由:

在您的 urls.py 中,引入我们刚刚创建的视图,并配置 URL 路由。

# urls.py
from django.urls import path
from .views import CustomPasswordResetView

urlpatterns = [
    # 其他URL路由
    path('reset-password/', CustomPasswordResetView.as_view(), name='password_reset'),
    # 其他URL路由
]

 

现在,当用户点击“忘记密码”链接时,他们将被引导到密码重置页面,输入注册邮箱后,系统将向该邮箱发送重置密码的链接。
 
 
 
 
posted @ 2024-04-24 09:50  侬侬发  阅读(49)  评论(0编辑  收藏  举报