从 Django 类继承的密码重置功能 - 解决 url 问题 ('uidb64')
Password Reset functionality inheriting from Django clases - reverse url issues ('uidb64')
我想创建密码重置功能,但要更改模板。
所以我继承自 Django 类.
插入重置密码的邮箱后,出现以下错误:
NoReverseMatch at /accounts/password-reset/
Reverse for 'confirm_reset_password' with keyword arguments
'{'uidb64': '', 'token': '4y5-9ae986836e35f95b842c'}' not found. 1
pattern(s) tried:
['accounts\/password-reset-confirm/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$']
我认为问题是'uidb64',但我不知道为什么是空的。
观看次数:
class CustomPasswordResetView(PasswordResetView):
form_class = CustomPasswordResetForm
email_template_name = 'account/password_reset_email.html'
template_name = 'account/password_reset.html'
class UserPasswordResetConfirmView(PasswordResetConfirmView):
pass
表格:
class CustomPasswordResetForm(PasswordResetForm):
email = forms.EmailField(widget=TextInputWidget)
网址:
path('password-reset/', UserPasswordResetView.as_view(), name='reset_password'),
re_path(r'^password-reset-confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
UserPasswordResetConfirmView.as_view(), name='confirm_reset_password')
在重置模板中:
<form action="" method="post">
{% csrf_token %}
<div class="row ">
{{ form.email }}
</div>
<div class="l-action">
<input type="submit" class="button" value="Reset my password">
</div>
</form>
在电子邮件模板中:
a href="http://{{ domain }}{% url 'users:confirm_reset_password' uidb64=uidb token=token %}"
我认为您的电子邮件模板有误。你写:
a href="http://{{ domain }}{% url 'users:confirm_reset_password' uidb64=<b>uidb</b> token=token %}"
但是 uidb64
参数应该根据 documentation [Django-doc] 将 uid
变量作为参数,所以:
a href="http://{{ domain }}{% url 'users:confirm_reset_password' uidb64=<b>uid</b> token=token %}"
我想创建密码重置功能,但要更改模板。
所以我继承自 Django 类.
插入重置密码的邮箱后,出现以下错误:
NoReverseMatch at /accounts/password-reset/
Reverse for 'confirm_reset_password' with keyword arguments '{'uidb64': '', 'token': '4y5-9ae986836e35f95b842c'}' not found. 1 pattern(s) tried: ['accounts\/password-reset-confirm/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$']
我认为问题是'uidb64',但我不知道为什么是空的。
观看次数:
class CustomPasswordResetView(PasswordResetView):
form_class = CustomPasswordResetForm
email_template_name = 'account/password_reset_email.html'
template_name = 'account/password_reset.html'
class UserPasswordResetConfirmView(PasswordResetConfirmView):
pass
表格:
class CustomPasswordResetForm(PasswordResetForm):
email = forms.EmailField(widget=TextInputWidget)
网址:
path('password-reset/', UserPasswordResetView.as_view(), name='reset_password'),
re_path(r'^password-reset-confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
UserPasswordResetConfirmView.as_view(), name='confirm_reset_password')
在重置模板中:
<form action="" method="post">
{% csrf_token %}
<div class="row ">
{{ form.email }}
</div>
<div class="l-action">
<input type="submit" class="button" value="Reset my password">
</div>
</form>
在电子邮件模板中:
a href="http://{{ domain }}{% url 'users:confirm_reset_password' uidb64=uidb token=token %}"
我认为您的电子邮件模板有误。你写:
a href="http://{{ domain }}{% url 'users:confirm_reset_password' uidb64=<b>uidb</b> token=token %}"
但是 uidb64
参数应该根据 documentation [Django-doc] 将 uid
变量作为参数,所以:
a href="http://{{ domain }}{% url 'users:confirm_reset_password' uidb64=<b>uid</b> token=token %}"