2013-05-21 9 views

risposta

2

Quando si utilizza una vista di classe a base si può creare una base di classe/mixin per tutti questi punti di vista, che implementa la funzionalità desiderata (anche utilizzando decorators) e quindi avere tutti i punti di vista ereditare da questa base vista.

from django.views.generic import TemplateView 

class BaseView(TemplateView): 

    def get(self, request, *args, **kwargs): 
     # do some checking here 
     if not request.user.is_authenticated(): 
      # do something if anonymous user 
     return super(BaseView, self).get(request, *args, **kwargs) 


class MyView(BaseView): 
    pass 
6

negli URL

url(r'someregexp/$', mydecorator(view.myview.dude), 'name_of_view'), 
+1

In realtà ciò sposta semplicemente le annotazioni sul controller. Vorresti racchiudere la dichiarazione di inclusione –

+1

Sì, assolutamente, ma sostengo che è meglio per la leggibilità e la manutenibilità. Direi che l'uso di un middleware (come normalmente sostenevo prima perché pensavo che fossero fantastici) non dovrebbe essere responsabile di ciò. Introdurrebbe un ulteriore livello di complessità e interferirebbe anche con le viste che potrebbero essere esenti per le tue regole, ma che logicamente ha bisogno di vivere in quelle particolari views.py. Ma sei corretto al 100% in quanto sposta il decoratore da views.py a urls.py. –

+0

Lo so, indicandolo all'OP, sono d'accordo che questo è più esplicito e trasparente :-) –

Problemi correlati