【问题标题】:django password reset password_reset_confirmdjango 密码重置 password_reset_confirm
【发布时间】:2014-02-12 14:43:55
【问题描述】:

我正在 django 中做一个项目。在我的项目中,我需要通过电子邮件重置密码。为此,我使用了 django.contrib.auth.urls。通过djangos模板时我的测试成功了。后来我在我的模板上尝试了它,为此我创建了一个注册文件夹并创建了包括电子邮件模板在内的五个html页面。我还在我的主网址中包含了url(r'^web/',include('django.contrib.auth.urls'))。但是当我运行服务器时,我可以将链接传递给电子邮件。并在我的浏览器中打开视图。在那我更改了输入两次的密码,当我提交时什么也没发生,请帮助我?

我的 password_reset_confirm.html 是

{% extends 'base.html' %}
{% load i18n %}

{% block content %}
    {% if validlink %}
        <p>Please enter your new password twice.<br />
           So we can verify you typed it in correctly.</p>
        <form action="" method="post">
            <div style="display:none">
                <input type="hidden" value="{{ csrf_token }}"name="csrfmiddlewaretoken">
            </div>
            <table>
                <tr>
                    <td>{{ form.new_password1.errors }}
                        <label for="id_new_password1">New password:</label></td>
                    <td>{{ form.new_password1 }}</td>
                </tr>
                <tr>
                    <td>{{ form.new_password2.errors }}
                        <label for="id_new_password2">Confirm password:</label></td>
                    <td>{{ form.new_password2 }}</td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="Change my password" /></td>
                </tr>
            </table>
        </form>
    {% else %}
        <h1>Password reset unsuccessful</h1>
        <p>The password reset link was invalid, <br />
        possibly because it has already been used. <br />
        Please request a new password reset.</p>
    {% endif %}
{% endblock %}

【问题讨论】:

    标签: python django


    【解决方案1】:

    我用有点不同的方式实现了密码重置过程,波纹管已经过测试并且可以工作:

    在项目 urls.py 中:

    urlpatterns = patterns('',
        url(r'^user/', include('users.urls')),
    )
    

    在 urls.py 中:

    ...
    url(r'^password-reset/$', 'django.contrib.auth.views.password_reset', kwargs={'template_name': 'password_reset_form.html'}, name='password-reset'),
    url(r'^password_reset/done/$', 'django.contrib.auth.views.password_reset_done', kwargs={'template_name': 'password_reset_done.html'}, name='password_reset_done'),
    url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$','django.contrib.auth.views.password_reset_confirm',kwargs={'template_name': 'password_reset_confirm.html'},name='password_reset_confirm'),
    url(r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete', kwargs={'template_name': 'password_reset_complete.html'}, name='password_reset_complete'),
    ...
    

    为方便起见,我在应用程序的根目录下创建了模板文件,以上网址在我的项目的 /user 下。

    users/templates$ ls password*
    password_reset_complete.html  password_reset_done.html
    password_reset_confirm.html   password_reset_form.html
    

    我测试了它的工作,表单与 django 提供的表单相同,只是我扩展了我的首页基本模板,因为我不希望任何 django 管理模板出现给前端用户,例如:

    {% extends "base.html" %}
    {% load i18n %}
    
    {% block title %}{% trans 'Password reset' %}{% endblock %}
    
    {% block maincontent %}
    <div class="row">
        <div class="col-lg-6 col-lg-offset-3">
            {% if validlink %}
            <h1>{% trans 'Enter new password' %}</h1>
            <p>{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}</p>
    
            <form action="" method="post">{% csrf_token %}
                {{ form.new_password1.errors }}
                <div class="form-group">
                    <label for="id_new_password1">{% trans 'New password:' %}</label>
                    <input class="form-control" type="password" id="id_new_password1" name="new_password1" value="">
                </p>
                {{ form.new_password2.errors }}
                <div class="form-group">
                    <label for="id_new_password2">{% trans 'Confirm password:' %}</label>
                    <input class="form-control" type="password" id="id_new_password2" name="new_password2" value="">
                </div>
                <div class="row">
                    <div class="col-lg-l2">
                        <input type="submit" class="btn btn-default" value="{% trans 'Change my password' %}" />
                    </div>
                </div>
            </form>
    
            {% else %}
    
            <h1>{% trans 'Password reset unsuccessful' %}</h1>
    
            <p>{% trans "The password reset link was invalid, possibly because it has already been used.  Please request a new password reset." %}</p>
    
            {% endif %}
        </div>
    </div>
    {% endblock maincontent %}
    

    【讨论】:

    • 当我跟踪 lib 包时,我了解到错误正在发生,因为 POST 表单正在 django.contrib.auth.view 中获取 GET,为什么会发生这种情况帮助我。
    • 我尝试了您的代码,但问题在于 GET 和 POST。Post 表单被重定向为 get。所以我无法将数据保存在数据库中
    • 这不可能,因为表单方法是POST,你这里做错了。
    • /password-reset/ 处的 NoReverseMatch 中的问题
    • 它的工作问题得到解决,当添加 # 到 html 表单中的操作
    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2013-09-21
    • 2012-07-18
    相关资源
    最近更新 更多