1615 готово

1609 небольшой рефакторинг + фикс для частного случая
remotes/origin/stage6
Alexander Burdeiny 9 years ago
parent 1bbb64937b
commit 956b44e115
  1. 8
      proj/middleware.py
  2. 1618
      service/migrations/0003_auto__add_field_catalog_referer1__add_field_catalog_referer2__add_fiel.py
  3. 15
      service/models.py
  4. 11
      service/order_forms.py
  5. 70
      service/views.py

@ -58,7 +58,7 @@ class Referer(object):
search.append(val)
request.session['search'] = search
if userlog is not None:
for i, d in enumerate(search):
for i, d in enumerate(search, start=1):
setattr(userlog, key + str(i), d)
else:
attr1 = key + '1'
@ -115,7 +115,7 @@ MIDDLEWARE_CLASSES += ('core_utils.middleware.SpacelessMiddleware',)
class SpacelessMiddleware(object):
""" trim spaces between tags if not in DEBUG """
def process_response(self, request, response):
cont = response.content
cont = strip_spaces_between_tags(cont)
response.content = re.sub(r'^\s+<','<', cont )
if response.get('Content-Type').startswith('text/html'):
cont = strip_spaces_between_tags(response.content)
response.content = re.sub(r'^\s+<','<', cont)
return response

@ -71,6 +71,21 @@ class AbstractOrder(models.Model):
seminar = models.ForeignKey('seminar.Seminar', null=True)
created = models.DateTimeField(auto_now_add=True)
viewed = models.DateTimeField(null=True, blank=True)
#
referer1 = models.TextField(
verbose_name=_(u'Первый переход'), null=True, blank=True)
referer2 = models.TextField(
verbose_name=_(u'Второй переход'), null=True, blank=True)
utm_source1 = models.TextField(null=True, blank=True)
utm_medium1 = models.TextField(null=True, blank=True)
utm_campaign1 = models.TextField(null=True, blank=True)
utm_source2 = models.TextField(null=True, blank=True)
utm_medium2 = models.TextField(null=True, blank=True)
utm_campaign2 = models.TextField(null=True, blank=True)
search1 = models.TextField(null=True, blank=True)
search2 = models.TextField(null=True, blank=True)
search3 = models.TextField(null=True, blank=True)
class Meta:
abstract = True

@ -23,6 +23,15 @@ class AbstractOrderForm(forms.ModelForm):
conference = forms.CharField(widget=forms.HiddenInput(), required=False)
seminar = forms.CharField(widget=forms.HiddenInput(), required=False)
def save(self, commit=True, userlog=None):
obj = super(AbstractOrderForm, self).save(commit=False)
if userlog is not None:
for attr, val in userlog.iteritems():
setattr(obj, attr, val)
if commit:
obj.save()
return obj
def clean_exposition(self):
exp_id = self.cleaned_data.get('exposition')
if not exp_id:
@ -66,8 +75,6 @@ class AbstractOrderForm(forms.ModelForm):
fname = person_inf[0]
lname = ' '.join(person_inf[1:])
user = User.objects.create_user(email, fname, lname)
return user
def clean_phone(self):

@ -1,25 +1,61 @@
# -*- coding: utf-8 -*-
import json
from itertools import chain
from django.http import HttpResponse
from models import Service
from functions.custom_views import ExpoListView
from django.views.generic import ListView, FormView, TemplateView
from haystack.query import EmptySearchQuerySet
from django.shortcuts import get_object_or_404
from django.http import Http404
import json
from django.http import HttpResponseRedirect, HttpResponse
from meta.views import MetadataMixin
#from functions.search_forms import CompanySearchForm
from haystack.query import EmptySearchQuerySet
from meta.views import MetadataMixin
from accounts.models import UserLog
from exposition.models import Exposition
from conference.models import Conference
from functions.custom_views import ExpoListView
from models import Service
from order_forms import TranslationForm, CatalogForm, VisitForm, RemoteForm, ParticipationForm, TicketsForm,\
AdvertiseForm, BuildStandForm
#from functions.search_forms import CompanySearchForm
order_forms = {'translator': TranslationForm, 'catalog': CatalogForm, 'participation': ParticipationForm,
'remote': RemoteForm, 'tickets': TicketsForm, 'visit': VisitForm, 'buildstand': BuildStandForm}
meta = {'translator': 80, 'participation': 85,
'remote': 84, 'tickets': 81, 'visit': 82}
meta = {
'translator': 80,
'participation': 85,
'remote': 84,
'tickets': 81,
'visit': 82
}
def get_userlog_data(request):
userlog = None
data = {}
if request.user.is_authenticated():
try:
userlog = UserLog.objects.get(pk=request.user.pk)
except:
pass
attrs = [
'referer1', 'referer2', 'utm_source1', 'utm_medium1',
'utm_campaign1', 'utm_source2', 'utm_medium2', 'utm_campaign2',
]
search_attrs = ['search1', 'search2', 'search3',]
if userlog is not None:
for attr in chain(attrs, search_attrs):
data[attr] = getattr(userlog, attr)
else:
for attr in attrs:
data[attr] = request.session.get(attr)
for i, s in enumerate(request.session.get('search', []), start=1):
data['search' + str(i)] = s
return data
class ServiceView(MetadataMixin, FormView):
success_url = '/service/thanks/'
@ -44,7 +80,8 @@ class ServiceView(MetadataMixin, FormView):
return self.form_invalid(form)
def form_valid(self, form):
order = form.save(commit=False)
userlog = get_userlog_data(self.request)
order = form.save(commit=False, userlog=userlog)
order.save()
return HttpResponseRedirect(self.success_url)
@ -54,21 +91,18 @@ class ServiceView(MetadataMixin, FormView):
kwargs.update({'meta_id': meta_id})
return super(ServiceView, self).get_context_data(**kwargs)
from exposition.models import Exposition
from conference.models import Conference
def advertise(request, catalog=None, event_url=None):
if request.POST:
response = {'success': False}
form = AdvertiseForm(request.POST)
if form.is_valid():
userlog = get_userlog_data(request)
if not catalog or not event_url:
form.save()
form.save(userlog=userlog)
else:
order = form.save(commit=False)
order = form.save(commit=False, userlog=userlog)
if catalog == 'expo':
try:
expo = Exposition.objects.get(url=event_url)
except Exposition.DoesNotExist:
@ -82,15 +116,9 @@ def advertise(request, catalog=None, event_url=None):
order.conference= conf
order.save()
response['success'] = True
else:
response['errors'] = form.errors
return HttpResponse(json.dumps(response), content_type='application/json')
else:
raise HttpResponse('not ajax')

Loading…
Cancel
Save