J'ai un peu de mal à comprendre comment fonctionnent les nouveaux CBV. Ma question est la suivante, je dois exiger une connexion dans toutes les vues, et dans certaines d'entre elles, des autorisations spécifiques. Dans les vues basées sur les fonctions, je fais cela avec @permission_required () et l'attribut login_required dans la vue, mais je ne sais pas comment faire cela sur les nouvelles vues. Y a-t-il une section dans la documentation django expliquant cela? Je n'ai rien trouvé. Quel est le problème dans mon code?
J'ai essayé d'utiliser le @method_decorator mais il répond " TypeError at / spaces / prueba / _wrapped_view () prend au moins 1 argument (0 donné) "
Voici le code (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