Ho un po 'di problemi a capire come funzionano i nuovi CBV. La mia domanda è questa, ho bisogno di richiedere l'accesso in tutte le viste e in alcune di esse, autorizzazioni specifiche. Nelle viste basate su funzioni lo faccio con @permission_required () e l'attributo login_required nella vista, ma non so come farlo nelle nuove viste. C'è qualche sezione nei documenti di Django che spiega questo? Non ho trovato niente Cosa c'è di sbagliato nel mio codice?
Ho provato a usare @method_decorator ma risponde " TypeError at /pace / prueba / _wrapped_view () richiede almeno 1 argomento (0 dato) "
Ecco il codice (GPL):
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required, permission_required
class ViewSpaceIndex(DetailView):
"""
Show the index page of a space. Get various extra contexts to get the
information for that space.
The get_object method searches in the user 'spaces' field if the current
space is allowed, if not, he is redirected to a 'nor allowed' page.
"""
context_object_name = 'get_place'
template_name = 'spaces/space_index.html'
@method_decorator(login_required)
def get_object(self):
space_name = self.kwargs['space_name']
for i in self.request.user.profile.spaces.all():
if i.url == space_name:
return get_object_or_404(Space, url = space_name)
self.template_name = 'not_allowed.html'
return get_object_or_404(Space, url = space_name)
# Get extra context data
def get_context_data(self, **kwargs):
context = super(ViewSpaceIndex, self).get_context_data(**kwargs)
place = get_object_or_404(Space, url=self.kwargs['space_name'])
context['entities'] = Entity.objects.filter(space=place.id)
context['documents'] = Document.objects.filter(space=place.id)
context['proposals'] = Proposal.objects.filter(space=place.id).order_by('-pub_date')
context['publication'] = Post.objects.filter(post_space=place.id).order_by('-post_pubdate')
return context