# -*- 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 from django.utils.translation import ugettext as _ 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})