我是django的新手,我正在尝试创建一个Admin具有CRUD功能的应用程序。我的问题是当管理员更新其他用户时,它的功能正常工作。但是,当管理员更新他/她自己时,更新功能无法正常运行。我知道当我更改用户密码时出现的问题,他们的会话被重置。 Django负责重新注入会话哈希,因此存储在会话中的值将消失。所以我想问一下,在我更新会话密码后如何输入值?
这是我的观点:
def update_user(request, pk, template_name='update_user.html'):
#cek session
if 'username' in request.session:
user = get_object_or_404(User, pk=pk) #ambil id dengan get
profile = UserProfile.objects.filter(user=user).first()
user_form = UserForm(data=request.POST, instance=user) #gunakan instance untuk mengambil data yang sudah ada
profile_form = UserProfileForm(data=request.POST, instance=profile) #gunakan instance untuk mengambil data yang sudah ada
users = User.objects.all()
if request.POST:
if user_form.is_valid() and profile_form.is_valid():
user.set_password(user.password) #hashing
user.save()
# update_session_auth_hash(request, user_form.instance)
profile = profile_form.save(commit=False)
profile.user = user
profile.save()
return redirect('manajemen_user')
else:
user_form = UserForm(instance=user)
profile_form = UserProfileForm(instance=profile)
data = {
'user_form': user_form,
'profile_form': profile_form,
'object_list': users,
}
return render(request, template_name, data)
else:
return HttpResponseRedirect('/simofa/login')
我将非常感谢您的意见。所以,请帮帮我。非常感谢你:))
答案 0 :(得分:0)
from django.contrib.auth import authenticate, login
#...
if user_form.is_valid() and profile_form.is_valid():
#...
user = authenticate(username= user.username, user.password=password)
login(request, user)
#...
使用authenticate,在django.contrib.auth中登录,如上所示。