【问题标题】:How to implement forget password functionality using Django and Python如何使用 Django 和 Python 实现忘记密码功能
【发布时间】:2018-01-20 16:38:41
【问题描述】:

我需要一个帮助。我需要使用 Django 实现忘记密码功能。我正在使用 Django 注册和登录页面。我的代码如下:

login.html:

{% extends 'base.html' %}

{% block content %}
 <h2>Log in</h2>
  {% if form.errors %}
    <p style="color: red">Your username and password didn't match. Please try again.</p>
  {% endif %}
  <form method="post">
    {% csrf_token %}
    {% for field in form %}
      <p>
        {{ field.label_tag }}<br>
        {{ field }}<br>
        {% for error in field.errors %}
          <p style="color: red">{{ error }}</p>
        {% endfor %}
        {% if field.help_text %}
          <p><small style="color: grey">{{ field.help_text }}</small></p>
        {% endif %}
      </p>
    {% endfor %}
    <button type="submit">Log in</button>
    <a href="{% url 'signup' %}">New to My Site? Sign up</a>
  </form>
  {% endblock %}

views.py:

class Signup(View):

    """ this class is used for user signup """

    def get(self, request):
        """ this function used to get the sign up form """
        form = UserCreationForm()
        return render(request, 'plant/signup.html', {'form': form})

    def post(self, request):
        """ this function used for post the sign up data """
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')


class AuthLogin(View):

    """ Its for login """

    def get(self, request):
        """ this function used to get the login form """
        form = AuthenticationForm()
        return render(request, 'plant/login.html', {'form': form})

    def post(self, request):
        """ this function used for post the login data """
        form = AuthenticationForm(None, request.POST or None)
        if form.is_valid():
            login(request, form.get_user())
        return redirect('/')

urls.py:

urlpatterns = [
    url(r'^$', TemplateView.as_view(template_name="plant/index.html")),
    url(r'^logout/$', auth_views.logout,
        {'next_page': 'login'}, name='logout'),
    url(r'^login/$', core_views.AuthLogin.as_view(), name='login'),
    url(r'^signup/$', core_views.Signup.as_view(), name='signup'),
]

在登录页面我应该有forget password 链接。当用户点击它时,将打开重置密码页面,另一个条件是尝试 3 次错误尝试后,forget password 按钮将在 1 小时内不可见。

【问题讨论】:

标签: python django


【解决方案1】:

不要自己创建此功能,而是使用内置的 Django 身份验证视图。 https://docs.djangoproject.com/en/1.11/topics/auth/default/#built-in-auth-views

您唯一需要做的就是将 contrib auth url 添加到您的项目中:

urlpatterns = [
    url('^', include('django.contrib.auth.urls')),
]

这将为您提供所有视图,例如登录、注销、密码重置等。

如果您想自定义模板,请将模板表单 /path/to/site-packages/django/contrib/admin/templates/registration/ 复制到您的应用程序 project/app/templates/registration/ 并进行任何自定义 那里。

如果您的应用列在INSTALLED_APPS 中的'django.contrib.auth' 之前(应该总是这样),您的自定义模板将首先被选中。

【讨论】:

    猜你喜欢
    • 2017-07-06
    • 2018-11-11
    • 2011-10-19
    • 2015-02-03
    • 2010-10-06
    • 2012-02-22
    • 2011-07-26
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多