Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django不';t为匿名用户提供数据库表示_Django_Django Forms - Fatal编程技术网

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'),它可以工作,但我想在没有管理面板的情况下执行此操作。什么是更好的方法?