widgets update formularios form fields example django django-forms django-templates django-validation

update - post django



¿Por qué el restablecimiento de contraseña funciona con el correo electrónico no registrado en django? (2)

Tengo un par de preguntas sobre cómo funciona el restablecimiento de contraseña en Django.

  1. ¿Cómo puedo hacer pruebas en las pruebas de restablecimiento de contraseñas durante la fase de desarrollo?

  2. El restablecimiento de la contraseña envía correos electrónicos a direcciones de correo electrónico no registradas con éxito (como aparece en la pantalla). Pensé que debería mostrar "no se encontró esa dirección de correo electrónico registrada" en lugar de mostrar "restablecimiento de contraseña exitoso".

  3. Aquí está el formulario utilizado para restablecer la contraseña. Estoy confundido de la acción del formulario. Se presenta a sí mismo, que es http://127.0.0.1:8000/accounts/password/reset/ pero ¿cómo es que se redirige a http://127.0.0.1:8000/accounts/password/reset/done/ después del envío? cuando se somete a sí mismo.

    {% extends "registration/registration_base.html" %} {% load i18n %} {% block title %}{% trans "Reset password" %}{% endblock %} {% block content %}{% blocktrans %} Forgot your password? Enter your email in the form below and we''ll send you instructions for creating a new one.{% endblocktrans %} <form method=''post'' action=''''>{% csrf_token %} <table> {{ form }} <tr><td></td><td><input type=''submit'' value="{% trans "Reset password" %}" /></td></tr> </table> </form> {% endblock %}


  1. Supongo que el problema es que su entorno de desarrollo no está configurado para enviar correos electrónicos. En ese caso, agregue esto en su settings_local (o equivalente):

    EMAIL_BACKEND = ''django.core.mail.backends.console.EmailBackend''

    Esto hará que los correos electrónicos se muestren en el terminal runserver. Puede copiar y pegar cualquier enlace desde allí.

  2. Eso es deliberado, para no permitir que los usuarios externos toquen el formulario de registro y vean si un correo electrónico en particular ha sido registrado o no. Una "característica de privacidad", supongo que podríamos llamarla.

  3. POST-ing a la misma URL es una práctica estándar en Django. No es un requisito, pero tiene sentido hacer eso. Tiene sentido porque de esa forma una única Vista maneja tanto la creación del Form como la recepción de los datos, ver Uso de un formulario en una vista
    Y la redirección ocurre desde la Vista, deliberadamente:

    def form_valid(self, request, form): # blah blah... return redirect(success_url)

    La redirección después de un POST también es una práctica estándar, y no solo en Django: http://en.wikipedia.org/wiki/Post/Redirect/Get


No aparece "no se encontró esa dirección de correo electrónico registrada", ya que es el enfoque de mejores prácticas contra los intentos de phishing. Sin embargo, siempre puede escribir su propio código para verificar si el correo electrónico existe en su base de datos. En cuanto a cómo se redirige al usuario a ''/ accounts / password / reset / done /'', tendré que ver la vista ''Restablecer contraseña'' para estar seguro.