0

有没有办法只创建一个页面用于登录和重置密码?

我尝试在模板中使用以下代码创建两个表单页面:

<form action="" method="post" id="formLoginIndex">
{% csrf_token %}
<div id="elogin">
    <p><label for="id_username">Login</label>
       {{ form.username }}</p>
    <p><label for="id_password">Пароль</label>
       {{ form.password }}</p>
</div>
    <p class="submit">
        <button type="submit" class="enter">Enter</button>
        {% if next %}
        <input type="hidden" name="next" value="{{ next }}" />
        {% else %}
        <input type="hidden" name="next" value="/electricity/" />
        {% endif %} 
        <button class="forgot" type="button" onclick="$('#forgotten').toggle('normal');">Forgot password?</button>
    </p>
</form>
<div id="forgotten"> 
    <form action="/reset/done/" method="post" id="formForgot">
    {% csrf_token %}
            <p>
            <label for="id_username_forgot">Login</label>
            <input id="id_username_forgot" type="text" name="username" maxlength="30" />
            </p>
            <p>
            <label for="id_email">e-mail</label>
            <input id="id_email" type="text" name="email" maxlength="40" />
            </p>
            <p class="submit">
            <button class="remember" type="submit">Reset</button>
            </p>
    </form>
</div>

和网址:

url(r'^login/$', 'django.contrib.auth.views.login'),
url(r'^reset/done/$', 'django.contrib.auth.views.password_reset_done'),

但是仅适用于登录功能。重置不起作用。显然是我做错了。

那么我应该以某种方式将views.password_reset 加载到同一页面中,或者甚至在身份验证视图中重写django,还是有另一种常见的解决方案?

4

1 回答 1

1

关键是您需要一个表单来显示,PasswordResetForm并且它的操作应该设置为指向reset/
当通过方法提交此表单时POST,它被重定向到参数 post_change_redirect 指向的位置,并且您可以在那里向用户显示密码已经改变了。
(如果表单评估为正确,否则,它将重新呈现表单并显示错误)

url(r'^reset/$', password_reset, 
        {'template_name':'your_template',   
      'post_change_redirect':'/reset/done/', 
        'extra_context':{'argument':'to tempate'}}, name='some_name'),
url(r'^reset/done/', password_reset_done,   
        {'template_name':'the template to show a success message', 
        'extra_context':{'message':'your password is changed successfully'}},),

查看此函数的默认值,它提供了一些关于它如何工作的很酷的信息,如果没有给出它的默认值:

  password_reset  (request, is_admin_site=False,
                 template_name='registration/password_reset_form.html',
                 email_template_name='registration/password_reset_email.html',
                 subject_template_name='registration/password_reset_subject.txt',
                 password_reset_form=PasswordResetForm,
                 token_generator=default_token_generator,
                 post_reset_redirect=None,
                 from_email=None,
                 current_app=None,
                 extra_context=None)
于 2012-08-21T13:47:42.350 回答