传递自定义HTML模板不适用于Django中的重置密码

时间:2019-07-07 04:36:34

标签: django django-forms django-views django-authentication

我正在为django应用程序实现重置页面。如果我在不传入template_name的情况下使用auth_views.PasswordResetView.as_view(),则一切正常。它使用默认的django提供的模板,我收到确认电子邮件,密码已成功重置,但我想传递自己的模板来这样做,该模板具有带有图像和一个电子邮件输入标签的简单形式。该视图显示正常,但是当我单击“提交”时,它仅在控制台中显示1个发布请求。

我已经尝试实现注册目录,因为在源代码中它使用了注册目录,但到目前为止还没有运气。我也将输入更改为提交按钮。我也尝试过删除CSS的其他样式类。

我正在使用以下路径来重置页面。

path('login/password-reset/',
        auth_views.PasswordResetView.as_view(),
        name = 'password_reset' ),

通过以下操作会生成视图,但是当我提交电子邮件时,并没有让我重新设置。

 path('login/password-reset/',
        auth_views.PasswordResetView.as_view(template_name = 'login/password_reset_form.html'),
        name = 'password_reset' ),

我其余的网址如下:

path('login/password-reset/done',
        auth_views.PasswordResetDoneView.as_view(),
        name = 'password_reset_done' ),   
path('login/password-reset-confirm/<uidb64>/<token>/',
        auth_views.PasswordResetConfirmView.as_view(),
        name = 'password_reset_confirm' ),      
path('login/password-reset-complete/',
        auth_views.PasswordResetCompleteView.as_view(),
         name='password_reset_complete'),    

模板在这里:

<form method="POST" class="register-form" id="login-form" action= '' >
{% csrf_token %}
<div class="form-group">
    <label for="your_name">Enter registered email</label>
    <input type="text" name="your_name" id="your_name" placeholder="Email"/>
</div>
<div class="form-group">
    <input type="submit" name="signin" id="signin" class="form-submit" value="Reset"/>
</div>
</form>

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您的自定义模板具有以下输入:

<input type="text" name="your_name" id="your_name" placeholder="Email"/>

这是无效的,因为Django的PasswordResetForm需要一个nameemail而不是your_name的字段。因此,表单将无法验证,并且视图将重新呈现具有错误的表单。您需要使用类似的内容:

<input type="text" name="email" id="id_email" placeholder="Email"/>

更好的方法不是自己渲染字段,而是让Django使用以下方式渲染字段:

{{ form.email.errors }}
{{ form.email }}

...,这样就不会硬编码字段名称。另外,您没有呈现表单错误,这就是为什么您没有意识到表单无效的原因。