Django注册和密码重置在一个页面上

时间:2012-08-20 18:18:25

标签: django django-views django-login

是否有办法只创建一个登录页面并重置密码?

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

<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加载到同一页面中,甚至在auth视图中重写django还是有另一种常见的解决方案?

1 个答案:

答案 0 :(得分: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)
相关问题