100 lines
3.9 KiB
Python
Raw Normal View History

2013-09-28 17:17:15 +02:00
# -*- coding: utf-8 -*-
2013-12-15 18:27:59 +01:00
from django.views.generic import TemplateView, FormView
from django.contrib.auth import logout
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_protect
from django.views.decorators.debug import sensitive_post_parameters
from django.core.urlresolvers import reverse, reverse_lazy
from django.shortcuts import redirect
from django.contrib import messages
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth import update_session_auth_hash
2013-09-28 17:17:15 +02:00
from .forms import UserForm, UserProfileForm
from .models import UserProfile
2013-09-28 17:17:15 +02:00
2013-09-28 18:33:45 +02:00
class UserProfileView(TemplateView):
template_name = "accounts/user_settings_profile.html"
2013-09-28 18:33:45 +02:00
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(UserProfileView, self).dispatch(*args, **kwargs)
def get(self, request, *args, **kwargs):
profile = UserProfile.objects.get(user=request.user)
profileform = UserProfileForm(instance=profile)
userform = UserForm(instance=request.user)
context = dict(userform=userform, profileform=profileform)
2013-09-28 17:17:15 +02:00
context['nav_user_profile'] = True
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
profile = UserProfile.objects.get(user=request.user)
profileform = UserProfileForm(data=request.POST, instance=profile)
userform = UserForm(data=request.POST, instance=request.user)
if userform.is_valid() and profileform.is_valid():
u = userform.save()
p = profileform.save(commit=False)
p.user = u
p.save()
return redirect(reverse('account_profile'))
else:
context = dict(userform=userform, profileform=profileform)
context['nav_user_profile'] = True
return self.render_to_response(context)
class UserChangePasswordView(FormView):
form_class = PasswordChangeForm
success_url = reverse_lazy('account_settings')
template_name = 'accounts/user_settings_account.html'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(UserChangePasswordView, self).dispatch(*args, **kwargs)
def get_form_kwargs(self):
kwargs = super(UserChangePasswordView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def form_valid(self, form):
form.save()
# Updating the password logs out all other sessions for the user
# except the current one if
# django.contrib.auth.middleware.SessionAuthenticationMiddleware
# is enabled.
update_session_auth_hash(self.request, form.user)
messages.add_message(self.request, messages.SUCCESS, _('Your password was changed!'))
return super(UserChangePasswordView, self).form_valid(form)
class DeleteUserView(TemplateView):
template_name = "accounts/delete_user.html"
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(DeleteUserView, self).dispatch(*args, **kwargs)
def get_context_data(self, **kwargs):
context = super(DeleteUserView, self).get_context_data(**kwargs)
context['nav_user_profile'] = True
return context
def post(self, request, *args, **kwargs):
user = request.user
if user.is_active:
# if admin set the user to inactive, the user may not delete his own account
# this is important for abuse handling: abusers shall not be able to delete
# their account (and all hosts/domains) and then just recreate them without
# abuse_blocked flags set by the admin.
user.delete()
logout(request)
return redirect(reverse('home'))
else:
return redirect(reverse('account_delete'))