Question

Is there way to create just one page for login and reset password?

I tried to create two forms page with following code in template:

<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>

And urls :

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

However works only login feature. Reset doesn't work. Obviously is that I'm just doing smth wrong.

So should I load somehow views.password_reset into the same page or even rewrite django in auth views or there is another common solution?

Was it helpful?

Solution

The point is that you need a form to show the PasswordResetForm and it's action should be set to point to reset/
when this form is submitted via method POST, it's redirected to where the argument post_change_redirect points to, and there you can show the user that the password has been changed.
( In case the form evaluates to be correct , else, it would re-render the form with errors shown )

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'}},),

looking at the defaults for this function ,It gives some cool info about how it works and its defaults if not given:

  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)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top