Django不';t为匿名用户提供数据库表示
我正在使用电子邮件确认自定义重置密码Django不';t为匿名用户提供数据库表示,django,django-forms,Django,Django Forms,我正在使用电子邮件确认自定义重置密码 path('password_reset', views.reset_password_view, name='password-reset'), path('password_reset/done', views.reset_password_done_view, name='password_reset_done'), path('reset/<uidb64>/<token>/', views.password_confirm_v
path('password_reset', views.reset_password_view, name='password-reset'),
path('password_reset/done', views.reset_password_done_view, name='password_reset_done'),
path('reset/<uidb64>/<token>/', views.password_confirm_view, name='password_reset_confirm') #this url
def password_confirm_view(request, uidb64, token):
context = {}
if request.method == 'POST':
form = SetPasswordForm(data=request.POST, user=request.user)
if form.is_valid():
form.save() #I have error
update_session_auth_hash(request, form.user)
return redirect('password_reset_done')
else:
form = SetPasswordForm(user=request.user)
context['form'] = form
return render(request, 'mdm/registration/password_confirm.html', context)
Exception Type:NotImplementedError
Exception Value:Django doesn't provide a DB representation for AnonymousUser.
path('password\u reset',views.reset\u password\u view,name='password-reset'),
路径('password\u reset/done',views.reset\u password\u done\u view,name='password\u reset\u done'),
路径('reset//',views.password_confirm_view,name='password_reset_confirm')#此url
def密码确认视图(请求、uidb64、令牌):
上下文={}
如果request.method==“POST”:
form=SetPasswordForm(data=request.POST,user=request.user)
如果form.is_有效():
form.save()#我有错误
更新会话验证哈希(请求、表单、用户)
返回重定向('password\u reset\u done')
其他:
form=SetPasswordForm(user=request.user)
上下文['form']=form
返回呈现(请求“mdm/registration/password_confirm.html”,上下文)
异常类型:NotImplementedError
异常值:Django不为AnonymousUser提供DB表示。
模板:
form enctype="multipart/form-data" method="post">
{% csrf_token %}
<div class="input-group register">
{{ form.new_password1.errors }}
<label for="id_new_password1">Пароль: </label>
{{ form.new_password1 }}
</div>
<div class="input-group register">
{{ form.new_password2.errors }}
<label for="id_new_password2">Подтвердите пароль: </label>
{{ form.new_password2 }}
</div>
<div class="justify-content-center">
<button class="btn btn-block btn-sm btn-info mt-5" type="submit">Сменить пароль</button>
</div>
</form>
form enctype=“多部分/表单数据”method=“post”>
{%csrf_令牌%}
{{form.new_password1.errors}
Пароль:
{{form.new_password1}}
{{form.new_password2.errors}
Подтвердите пароль:
{{form.new_password2}}
Сменить пароль
我发送电子邮件要求更改未授权用户的密码(忘记密码)。他跟踪了电子邮件中的链接。他必须输入密码,确认并保存表格。
如何验证用户身份?我想,我必须使用(uidb64,token)。这很好用。谢谢你,丹尼尔·罗斯曼
path('reset/<uidb64>/<token>/',
auth_views.PasswordResetConfirmView.as_view(template_name='app/registration/password_confirm.html'),
name='password_reset_confirm')
path('reset//'),
auth_views.PasswordResetConfirmView.as_view(template_name='app/registration/password_confirm.html'),
name='password\u reset\u confirm')
您的问题不清楚。此代码要求用户已登录。我发送电子邮件要求更改未授权用户的密码(忘记密码)。他跟踪了电子邮件中的链接。他必须输入密码、确认并保存表单。但之后您不应使用请求。用户
。你为什么这么做?关键是用户是由UID和令牌标识的。请注意,在任何情况下,整个代码都是毫无意义的,因为这个功能是。没有必要自己写。是的。我使用django的功能如下:path('reset//',auth_views.PasswordResetConfirmView.as_view(),name='password_reset_confirm'),它可以工作,但我想在没有管理面板的情况下执行此操作。什么是更好的方法?