# -*- coding: utf-8 -*- import cPickle as pickle from django.shortcuts import render_to_response, get_object_or_404 from django import newforms as forms from django.http import HttpResponseRedirect, HttpResponse from django.views.generic.list_detail import object_list, object_detail from fortunes.models import Fortune COOKIE_KEY = 'votes' COOKIE_AGE = 60*60*24*30 PAGINATION = 30 class FortuneForm(forms.ModelForm): tartanpion = forms.CharField() def clean_tartanpion(self): print self.cleaned_data['tartanpion'] if self.cleaned_data['tartanpion'].lower() == 'quatre': return "quatre" raise forms.ValidationError('On va réviser les additions, merci.') class Meta: model = Fortune def fortune_add(request): if request.method =='POST': form = FortuneForm(request.POST) if form.is_valid(): fortune = form.save() return HttpResponseRedirect(fortune.get_absolute_url()) else: form = FortuneForm() return render_to_response('fortune_form.html', { 'form': form }) def fortune_show(request, object_id = None, ordre=None): votes = {} if COOKIE_KEY in request.COOKIES: votes = pickle.loads(request.COOKIES[COOKIE_KEY]) params = { 'queryset': Fortune.objects.all(), 'template_object_name': 'fortune', 'extra_context': {'votes': votes}, } if object_id is None: params['template_name'] = 'fortune_list.html' params['paginate_by'] = PAGINATION if ordre == 'top': params['queryset'] = params['queryset'].order_by('-note')[:PAGINATION] elif ordre == 'flop': params['queryset'] = params['queryset'].order_by('note')[:PAGINATION] return object_list(request, **params) else: params['object_id'] = object_id params['template_name'] = 'fortune_detail.html' return object_detail(request, **params) def vote(request, object_id, vote): fortune = get_object_or_404(Fortune, pk = object_id) votes = {} if COOKIE_KEY in request.COOKIES: votes = pickle.loads(request.COOKIES[COOKIE_KEY]) if fortune.id not in votes: if vote == 'pour': fortune.note += 1 else: fortune.note -= 1 fortune.save() if request.method == 'GET': response = HttpResponseRedirect(fortune.get_absolute_url()) else: response = HttpResponse(str(fortune.note)) votes[fortune.id] = True response.set_cookie(COOKIE_KEY, pickle.dumps(votes), COOKIE_AGE) return response