Tôi gặp một chút khó khăn khi hiểu cách thức hoạt động của CBV mới. Câu hỏi của tôi là này, tôi cần yêu cầu đăng nhập trong tất cả các chế độ xem và trong một số trong số đó, các quyền cụ thể. Trong các chế độ xem dựa trên chức năng, tôi thực hiện điều đó với @ allow_Vquired () và thuộc tính login_Vquired trong chế độ xem, nhưng tôi không biết cách thực hiện điều này trên các chế độ xem mới. Có một số phần trong tài liệu django giải thích điều này? Tôi không tìm thấy gì cả. Có gì sai trong mã của tôi?
Tôi đã thử sử dụng @method_decorator nhưng nó trả lời " TypeError at / space / prueba / _wrapping_view () mất ít nhất 1 đối số (0 đã cho) "
Đây là mã (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