Projet

Général

Profil

Télécharger (4,5 ko) Statistiques
| Branche: | Tag: | Révision:

root / corbo / views.py @ 6a3e75ef

1
from datetime import datetime
2

    
3
from django.conf import settings
4
from django.core import signing
5
from django.core.urlresolvers import reverse
6
from django.views.generic import CreateView, UpdateView, DeleteView, \
7
                                 ListView, TemplateView
8
from django.contrib.syndication.views import Feed
9
from django.utils.feedgenerator import Atom1Feed
10
from django.utils.http import urlencode
11
from django.http import Http404
12

    
13
import models
14
from .forms import AnnounceForm, CategoryForm
15

    
16
class HomepageView(ListView):
17
    model = models.Announce
18
    template_name = 'corbo/homepage.html'
19

    
20
homepage = HomepageView.as_view()
21

    
22
class AnnounceCreateView(CreateView):
23
    form_class = AnnounceForm
24
    template_name = 'corbo/announce_form.html'
25

    
26
    def get_success_url(self):
27
        """
28
        redirect to the category page of the new created announce
29
        """
30
        return reverse('manage') + '?' + urlencode({'category': self.object.category.id})
31

    
32
add_announce = AnnounceCreateView.as_view()
33

    
34
class AnnounceEditView(UpdateView):
35
    model = models.Announce
36
    form_class = AnnounceForm
37

    
38
    def get_success_url(self):
39
        return reverse('manage') + '?' + urlencode({'category': self.object.category.id})
40

    
41
edit_announce = AnnounceEditView.as_view()
42

    
43
class AnnounceDeleteView(DeleteView):
44
    model = models.Announce
45

    
46
    def get_success_url(self):
47
        return self.request.META['HTTP_REFERER'] or \
48
            reverse('manage') + '?' + urlencode({'category': self.object.category.id})
49

    
50
delete_announce = AnnounceDeleteView.as_view()
51

    
52
class CategoryCreateView(CreateView):
53
    form_class = CategoryForm
54
    template_name = 'corbo/category_form.html'
55

    
56
    def get_success_url(self):
57
        return reverse('manage')
58

    
59
    def form_valid(self, form):
60
        form.save()
61
        return super(CategoryCreateView, self).form_valid(form)
62

    
63
add_category = CategoryCreateView.as_view()
64

    
65
class CategoryEditView(UpdateView):
66
    form_class = CategoryForm
67
    model = models.Category
68

    
69
    def get_success_url(self):
70
        return self.request.META['HTTP_REFERER'] or \
71
            reverse('manage') + '?' + urlencode({'category': self.object.id})
72

    
73
edit_category = CategoryEditView.as_view()
74

    
75
class CategoryDeleteView(DeleteView):
76
    model = models.Category
77

    
78
    def get_success_url(self):
79
        return reverse('manage')
80

    
81
delete_category = CategoryDeleteView.as_view()
82

    
83

    
84
class UnsubscribeView(DeleteView):
85
    model = models.Subscription
86

    
87
    def get_object(self, queryset=None):
88
        data = signing.loads(self.kwargs['unsubscription_token'])
89
        try:
90
            return models.Subscription.objects.get(category__pk=data['category'],
91
                                identifier=data['identifier'])
92
        except models.Subscription.DoesNotExist:
93
            raise Http404
94

    
95
    def get_success_url(self):
96
        return reverse('unsubscription_done')
97

    
98
unsubscribe = UnsubscribeView.as_view()
99

    
100

    
101
class UnsubscriptionDoneView(TemplateView):
102
    template_name='corbo/unsubscription_done.html'
103

    
104
unsubscription_done = UnsubscriptionDoneView.as_view()
105

    
106

    
107
class ManageView(ListView):
108
    paginate_by = settings.ANNOUNCES_PER_PAGE
109
    template_name = 'corbo/manage.html'
110
    model = models.Announce
111

    
112
    def get_queryset(self):
113
        queryset = super(ManageView, self).get_queryset()
114
        if self.request.GET.get('category'):
115
            queryset = queryset.filter(category__id=self.request.GET['category'])
116
        return queryset
117

    
118
    def get_context_data(self, **kwargs):
119
        context = super(ManageView, self).get_context_data(**kwargs)
120
        context['categories'] = models.Category.objects.all().order_by('-ctime')
121
        if self.request.GET.get('category'):
122
            try:
123
                context['category_id'] = int(self.request.GET['category'])
124
            except:
125
                pass
126
        return context
127

    
128
manage = ManageView.as_view()
129

    
130
class AtomView(Feed):
131
    title = settings.RSS_TITLE
132
    description = settings.RSS_DESCRIPTION
133
    link = settings.RSS_LINK
134
    feed_item_link_template = settings.RSS_LINK_TEMPLATE
135
    feed_type = Atom1Feed
136

    
137
    def __init__(self, **kwargs):
138
        self.__dict__.update(kwargs)
139

    
140
    def items(self):
141
        return models.Announce.objects.exclude(expiration_time__lt=datetime.now()).order_by('-publication_time')
142

    
143
    def item_title(self, item):
144
        return item.title
145

    
146
    def item_description(self, item):
147
        return item.text
148

    
149
    def item_link(self, item):
150
        return self.feed_item_link_template.format(item.pk)
151

    
152
    def item_pubdate(self, item):
153
        return item.publication_time or item.mtime
154

    
155
atom = AtomView()
(10-10/11)