Python 使用django创建配置文件页面

Python 使用django创建配置文件页面,python,django,hash,change-password,Python,Django,Hash,Change Password,我用django创建了一个个人资料页面,以允许用户更改我在sing-up表单中提供的信息。(如姓名、电子邮件、密码) 我在密码字段上有两个问题: 1-当用户在文本字段中插入密码时,它以原始格式提交,我需要django用户的表格式 <algorithm>$<iterations>$<salt>$<hash> 正如您在评论中看到的,我使用make_password函数来散列密码,它工作正常,但在提交页面后,用户无法转到其他页面,需要重新登录。。。为什

我用django创建了一个个人资料页面,以允许用户更改我在sing-up表单中提供的信息。(如姓名、电子邮件、密码)

我在密码字段上有两个问题:

1-当用户在文本字段中插入密码时,它以原始格式提交,我需要django用户的表格式

<algorithm>$<iterations>$<salt>$<hash>
正如您在评论中看到的,我使用make_password函数来散列密码,它工作正常,但在提交页面后,用户无法转到其他页面,需要重新登录。。。为什么

2-当配置文件页面显示给用户时,它将填充数据库中的当前信息,密码也采用上述格式(哈希) 如果用户提交表单,在密码字段没有任何更改的情况下,它的密码已更改(它发送散列1并再次散列!)


如何解决这个问题并在django中创建一个简单的工作概要页面?(我真的不喜欢它自己的管理面板!它看起来不好看!)

来自文档:

如果启用SessionAuthenticationMiddleware,更改用户密码将注销其所有会话

因此,您必须使用
update\u session\u auth\u hash(请求,用户)

有关详细信息,请参阅


关于预填充的密码字段:您应该将该字段设置为默认情况下不预填充的
passwordInput
,请参见它的工作原理!非常感谢,那么第二个问题呢?在这种情况下,用户每次都应该输入他的密码(因为如果他将密码留空,他将得到一个错误,如果他只是输入submit,他的密码将变长!)我在回答的最后一部分谈到了第二个问题,基本上你需要修改你的表格…对不起,我没有看到你的评论。。。是的,我理解你的意思,我认为你应该更新除密码以外的所有字段,并且只有在密码不为空时才更新密码。。。您可以在视图中执行此操作。此外,您可能希望有两个字段,并要求用户键入两次新密码。。。这将有助于防止用户不必要的键入错误。。。
def user_profile(request):
    current_user = request.user
    form = UserProfileForm(request.POST or None, instance=current_user)
    if request.POST:
        if form.is_valid():
             # pwd = form.cleaned_data['password']
             # form_obj = form.save(commit=False)
             # form_obj.password = make_password(pwd)
             form.save()
             message = "saved successfully"
             return render(request, 'Profile.html', {'form':form, 'message':message}, context_instance=RequestContext(request))

    return render_to_response('Profile.html', {
        'form': form,
    }, context_instance=RequestContext(request))