Add basic functionality for self-registration.
[cas.git] / src / accounts / views.py
1 # Create your views here.
2 from django import http
3 from django.contrib.auth.decorators import login_required
4 from django.contrib import messages
5 from django.shortcuts import render, redirect
6 from django.utils.translation import ugettext as _
7 from django.views.decorators.http import require_POST
8 from accounts.forms import UserBasicForm, UserPasswordForm
9 from .models import Service
10 from django.views.generic.edit import FormView
11 from django.contrib.auth import login
12 from django.contrib.auth.models import User
13 from django.contrib.auth.forms import UserCreationForm
14
15
16 @login_required
17 def account_profile(request, basic_form=None, pass_form=None):
18     return render(request, "account/profile.html", {
19         "basic_form": basic_form or UserBasicForm(instance=request.user),
20         "pass_form": pass_form or UserPasswordForm(),
21         "services": Service.objects.all(),
22     })
23
24
25 @require_POST
26 @login_required
27 def account_change_basic_profile(request):
28     form = UserBasicForm(request.POST, instance=request.user)
29
30     if form.is_valid():
31         form.save()
32         messages.add_message(request, messages.INFO, _("Profile has been changed."))
33         return http.HttpResponseRedirect('/accounts/')
34
35     return account_profile(request, basic_form=form)
36
37 @require_POST
38 @login_required
39 def account_change_password(request):
40     form = UserPasswordForm(request.POST)
41
42     if form.is_valid():
43         request.user.set_password(form.cleaned_data['new_password'])
44         request.user.save()
45
46         messages.add_message(request, messages.INFO, _("Password has been changed."))
47         return http.HttpResponseRedirect('/accounts/')
48
49     return account_profile(request, pass_form=form)
50
51
52 class Register(FormView):
53     form_class = UserCreationForm
54     template_name = "account/register.html"
55
56     def form_valid(self, form):
57         user = form.save()
58         user.backend='django.contrib.auth.backends.ModelBackend'
59         login(self.request, user)
60         return redirect('account_profile')