def edit_user(request):
    user = request.user
    rater = user.rater
    profile = user.profile
    if request.method == "POST":
        if "user_edit" in request.POST:
            user_form = UserForm(request.POST)
            if user_form.is_valid():
                user_form.save(commit=False)
                password = user_form.password
                user.set_password(password)
                user.save()
                messages.add_message(request, messages.SUCCESS, "You have updated your account")
        elif "rater_edit" in request.POST:
            rater_form = RaterForm(request.POST)
            if rater_form.is_valid():
                rater_form.save()
                messages.add_message(request, messages.SUCCESS, "You have updated your demographic info")
        elif "profile_edit" in request.POST:
            profile_form = ProfileForm(request.POST)
            if profile_form.is_valid():
                profile_form.save()
                messages.add_message(request, messages.SUCCESS, "You have updated your profile")

    user_form = UserForm(request.POST or None, instance=request.user)
    rater_form = RaterForm(request.POST or None, instance=request.user.rater)
    profile_form = ProfileForm(request.POST or None, instance=request.user.profile)
    return render(request, "user_edit.html", {'user_form': user_form,
                                        'rater_form': rater_form, 'profile_form':profile_form})
def view_dashboard(request):
    user = request.user
    rater = user.rater
    if request.method == "GET":
        pass
    elif request.method == "POST":
        if "user_edit" in request.POST:
            user_form = UserForm(request.POST)
            if user_form.is_valid():
                user.username = requet.POST.get('username')
                user.email = requet.POST.get('email')
                user.save()
                messages.add_message(request, messages.SUCCESS, "You have updated your account")
        elif "rater_edit" in request.POST:
            rater_form = RaterForm(request.POST)
            if rater_form.is_valid():
                rater.age = request.POST.get('age')
                rater.gender = request.POST.get('gender')
                rater.occupation = request.POST.get('occupation')
                rater.zip_code = request.POST.get('zip_code')
                rater.save()
                messages.add_message(request, messages.SUCCESS, "You have updated your profile")
        elif "delete_button" in request.POST:
            idx = int(request.POST.get('rating'))
            rating = Rating.objects.get(pk=idx)
            sometext = "Sucessfully deleted rating of {}".format(rating.movie.title)
            Rating.objects.get(pk=idx).delete()
            messages.add_message(request, messages.SUCCESS, sometext)

    user_form = UserForm(initial={'username':user.username, 'email':user.email})
    rater_form = RaterForm(initial = {'age':rater.age, 'gender':rater.gender,
                        'occupation':rater.occupation, 'zip_code':rater.zip_code})
    return render(request, "movies/dashboard.html", {'user_form': user_form,
                                        'rater_form': rater_form})
def view_register(request):
    if request.method == "GET":
        user_form = UserForm()
        profile_form = ProfileForm()
        rater_form = RaterForm()
    elif request.method == "POST":
        user_form = UserForm(request.POST)
        rater_form = RaterForm(request.POST)
        profile_form = ProfileForm(request.POST)
        if user_form.is_valid() and rater_form.is_valid():
            user = user_form.save()
            rater = rater_form.save(commit=False)
            rater.user = user
            profile = profile_form.save(commit=False)
            profile.user = user
            profile.age = rater.age
            profile.gender = rater.gender
            profile.save()
            rater.save()

            password = user.password
            # The form doesn't know to call this special method on user.
            user.set_password(password)
            user.save()

            # You must call authenticate before login. :(
            user = authenticate(username=user.username,
                                password=password)
            login(request, user)
            messages.add_message(
                request,
                messages.SUCCESS,
                "Congratulations, {}, on creating your new account! You are now logged in.".format(
                    user.username))
            return redirect('/')
    return render(request, "profiles/register.html", {'user_form': user_form,
                                                   'rater_form': rater_form})