from django.contrib.auth import login from django.shortcuts import render, reverse from django.views.generic import DetailView, UpdateView from django.contrib import messages from django.contrib.auth import get_user_model from django.contrib.auth.hashers import check_password, make_password from apps.course.models import Course from .forms import UserEditForm User = get_user_model() class UserView(DetailView): model = User template_name = 'user/profile.html' def get_context_data(self, object): context = super().get_context_data() context['published'] = Course.objects.filter( author=self.object, status=Course.PUBLISHED ) context['paid'] = Course.objects.none() return context class UserEditView(UpdateView): model = User template_name = 'user/profile-settings.html' form_class = UserEditForm def post(self, request, *args, **kwargs): # it's magic *-*-*-*-* self.object = self.get_object() if not request.POST._mutable: request.POST._mutable = True old_password = request.POST.pop('old_password')[0] new_password1 = request.POST.pop('new_password1')[0] new_password2 = request.POST.pop('new_password2')[0] if old_password: if request.user.check_password(old_password) and new_password1 == new_password2: request.user.set_password(new_password1) request.user.save() login(request, request.user) else: messages.error(request, 'Неверный пароль.') messages.info(request, 'Данные сохранены.') return super().post(request, *args, **kwargs) def get_success_url(self): return reverse('user-edit', args=[self.object.id])