You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

57 lines
2.0 KiB

# -*- coding: utf-8 -*-
from django.http import HttpResponseRedirect
from django.views.generic import TemplateView, CreateView, ListView, UpdateView, DetailView
from django.views.generic.edit import FormMixin
from django.forms.util import ErrorList
from django.conf import settings
from django.core.urlresolvers import reverse
from expobanner.models import Banner, Paid
from expobanner.forms import ClientStatForm
class BannerStat(FormMixin, DetailView):
model = Banner
form_class = ClientStatForm
template_name = 'client/expobanners/banner_stat.html'
def get_success_url(self):
return reverse('banner_stat_client', kwargs={'pk': self.object.pk})
def get_context_data(self, **kwargs):
context = super(BannerStat, self).get_context_data(**kwargs)
obj = self.object
cookie_name = obj.get_cookie_name()
cookie = self.request.session.get(cookie_name)
if not cookie:
form = context.get('form')
# form in context if form invalid called
if not form:
context['form'] = self.get_form(self.form_class)
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form(self.form_class)
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
obj = self.object
success = form.check_pass(obj)
if success:
self.request.session[obj.get_cookie_name()] = 1
return HttpResponseRedirect(self.get_success_url())
else:
form.errors['stat_pswd'] = ErrorList([u'Неправильный пароль'])
return self.form_invalid(form)
class PaidStat(BannerStat):
model = Paid
template_name = 'client/expobanners/paid_stat.html'
def get_success_url(self):
return reverse('paid_stat_client', kwargs={'pk': self.object.pk})