/
views.py
118 lines (94 loc) · 3.69 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
from django.contrib import messages
from django.shortcuts import render, redirect
from django.views.generic import ListView, DetailView
from django.views.generic.edit import DeleteView, CreateView
from django.views.generic.simple import direct_to_template
from .decorators import skip_has_account_middleware
from .forms import AccountForm, SiteForm
from .models import Account, Site
@login_required
def dashboard(request):
return direct_to_template(request, 'main/dashboard.html')
@login_required
def settings(request):
return direct_to_template(request, 'main/settings.html')
@skip_has_account_middleware
@login_required
def account_setup(request, force=False):
account = None
try:
account = request.user.account
except Account.DoesNotExist:
pass
form = AccountForm(request.POST if request.method == "POST" else None,
instance=account)
if request.method == "POST":
if form.is_valid():
account = form.save(commit=False)
account.owner = request.user
account.save()
messages.add_message(request, messages.INFO,
_("Your account has been updated!"))
return redirect("account_setup")
else:
if force:
messages.add_message(
request, messages.WARNING,
_("You need to configure your account on this page before you can use the site.")
)
return render(request, 'main/account.html', {"form": form})
class LoginRequiredMixin(object):
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(*args, **kwargs)
class SiteListView(LoginRequiredMixin, ListView):
model = Site
context_object_name="sites"
class SiteDetailView(LoginRequiredMixin, DetailView):
model = Site
class SiteDeleteView(LoginRequiredMixin, DeleteView):
model = Site
def delete(self, request, *args, **kwargs):
messages.add_message(request, messages.INFO, _("Site has been deleted."))
response = super(SiteDeleteView, self).delete(request, *args, **kwargs)
return response
def get_success_url(self):
return reverse("sites")
class SiteVerifyView(LoginRequiredMixin, DeleteView):
"""
View to kick off site verification.
(Hm a lot of code - not sure that CBV's are really an advantage)
"""
model = Site
template_name_suffix = '_confirm_verify'
def post(self, *args, **kwargs):
return self.verify(*args, **kwargs)
def verify(self, request, **kwargs):
self.object = self.get_object()
self.object.verify(request)
messages.add_message(
request, messages.INFO,
_("Verification started. You will be notified of the result shortly.")
)
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse("sites")
class SiteCreateView(LoginRequiredMixin, CreateView):
model = Site
form_class = SiteForm
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.belongs_to = self.request.user.account
self.object.save()
messages.add_message(
self.request, messages.INFO,
_("Site '%s' has been created") % self.object.name
)
return super(SiteCreateView, self).form_valid(form)
def get_success_url(self):
return reverse("sites")