gpt4 book ai didi

python - Django 模板在无效的编辑个人资料表单上呈现更改的用户名

转载 作者:太空宇宙 更新时间:2023-11-03 21:00:36 24 4
gpt4 key购买 nike

我有一个可以更改用户名和用户名的 View 。字段名称具有自定义验证器。如果验证器失败,则不会保存表单。它甚至有效。

唯一的问题是我使用此代码在我的 base.html 模板中呈现用户名

Login as {{ user.username }}

即使表单失败并且数据库中用户的用户名未更改,用户名也会发生更改。

当我转到另一个 URL 时,用户名是正确的(它是未更改的值)。

你能帮我吗?感觉像是错误,而不是我的代码中的错误。

我的 edit_profile View 的代码。

def edit_profile(request):

if request.method == 'POST':
form = EditProfileForm(request.POST, instance=request.user)

if form.is_valid():
form.save()
return redirect('profile')
else:
return render(request, 'accounts/edit_profile.html', {'form': form})

form = EditProfileForm(instance=request.user)
return render(request, 'accounts/edit_profile.html', {'form': form} )

最佳答案

我想说这个功能是 Django 设计的。表单直接修改request.user对象,在渲染之前会被POST数据修改。

另一种解决方案是检索用户对象的单独副本,而不是直接修改 request.user 对象。然后,“实时”用户对象仅在对象经过验证并将其存储到数据库后(即在下一个请求之后)才会被修改。

它可能也更安全,因为它可能会对渲染的其他部分产生副作用。例如,如果您在代码中的某个位置根据角色表检查了用户名,则用户可能(暂时,在渲染范围内)通过将自己重命名为“admin”来提升他/她的权限。

关于python - Django 模板在无效的编辑个人资料表单上呈现更改的用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55729843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com