如何在django中更新密码后重新输入变量到会话?

时间:2015-03-10 06:53:53

标签: python django django-views

我是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')

我将非常感谢您的意见。所以,请帮帮我。非常感谢你:))

1 个答案:

答案 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中登录,如上所示。