SORU
20 Mayıs 2011, Cuma


Django üzerinde permission_required dekoratörler nasıl kullanılacağı sınıf tabanlı görünümler

Sorun biraz yeni CBVs nasıl çalıştığını anlamakta güçlük çekiyorum. Benim sorum bazıları tüm görünümlerde ve giriş gerektiren ihtiyacım var, özel izinler. Fonksiyon tabanlı yaptığım @permission_required ile görünümler() ve login_required görünümünde öznitelik, ama yeni görünümler bunu yapmak için nasıl bilmiyorum. Django belgeleri bu açıklanmasında bir bölüm var mı? Bir şey bulduğunu bilmiyordum. Benim kodda yanlış olan nedir?

@Method_decorator kullanmaya çalıştım ama bu cevaplar "/ _wrapped_view/prueba /boşluklar eğer data() en az 1 argüman (0 verilen) alır"

İşte kod (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

CEVAP
20 Mayıs 2011, Cuma


https://docs.djangoproject.com/en/dev/topics/class-based-views/intro/#decorating-class-based-views bkz

urls.py, örneğin, dekoratör ekleyebilirsiniz

login_required(ViewSpaceIndex.as_view(..))

veya *örneğin* 6, dispatch yöntemi süsleyin

from django.utils.decorators import method_decorator

@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
    return super(ViewSpaceIndex, self).dispatch(*args, **kwargs)

TypeError alıyorsun sebebini doktorlar olarak açıklanmıştır:

Not: method_decorator sınıf dekore edilmiş yönteme parametre olarak *args ve **kwargs geçer. Eğer yöntem parametreleri uyumlu bir dizi kabul değilse İlişkilendirilmiş bir özel durum neden olur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dcigs

    dcigs

    9 EYLÜL 2006
  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • William Hyde

    William Hyde

    23 HAZİRAN 2008