使用 django 创建个人资料页面

create a profile page with django

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

密码字段有两个问题:

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

<algorithm>$<iterations>$<salt>$<hash>

我对个人资料页面的看法:

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))

正如您在评论中看到的那样,我使用 make_password 函数对密码进行哈希处理,它工作正常但是在提交页面后,用户无法转到其他页面并需要重新登录...为什么? !

2 - 当个人资料页面显示给用户时,它填充了数据库中的当前信息,密码也是上述格式(哈希) 如果用户提交表单,密码字段没有任何更改,则密码已更改(它发送哈希一次并再次哈希!)

我怎样才能解决这个问题并在 django 中制作一个简单的工作配置文件页面? (我真的不喜欢它自己的管理面板!它看起来不好看!)

来自文档:

Changing a user’s password will log out all their sessions if the SessionAuthenticationMiddleware is enabled.

所以你必须使用update_session_auth_hash(request, user)

有关详细信息,请参阅 https://docs.djangoproject.com/en/1.9/topics/auth/default/#session-invalidation-on-password-change

关于预填充的密码字段:您应该将该字段设置为 passwordInput,默认情况下不预填充,请参阅 https://docs.djangoproject.com/en/1.9/ref/forms/widgets/#django.forms.PasswordInput