Saya mengalami sedikit kesulitan memahami cara kerja CBV baru. Pertanyaan saya adalah ini, saya perlu meminta login di semua tampilan, dan di beberapa dari mereka, izin khusus. Dalam tampilan berbasis fungsi saya melakukannya dengan @permission_required () dan atribut login_required dalam tampilan, tapi saya tidak tahu bagaimana melakukan ini pada tampilan baru. Apakah ada bagian dalam dokumen django yang menjelaskan hal ini? Saya tidak menemukan apa pun. Apa yang salah dalam kode saya?
Saya mencoba menggunakan @method_decorator tetapi menjawab " TypeError at / spasi / prueba / _wrapped_view () membutuhkan setidaknya 1 argumen (0 diberikan) "
Berikut adalah kode (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