Как применить декоратор ко всем представлениям (модуля) в django

это происходит много, когда все представления в определенном модуле должны быть доступны только тогда, когда пользователь авторизован, или все они должны делать те же проверки.

Как я могу избежать повторения аннотаций по всему файлу?

3 ответов


при использовании представлений на основе классов вы можете создать базовый класс / mixin для всех этих представлений, который реализует желаемую функциональность (также используя декораторы), а затем все представления наследуются от этого базового представления.

from django.views.generic import TemplateView

class BaseView(TemplateView):

    def get(self, request, *args, **kwargs):
        # do some checking here
        if not request.user.is_authenticated():
            # do something if anonymous user
        return super(BaseView, self).get(request, *args, **kwargs)


class MyView(BaseView):
    pass

в ваших urls

url(r'someregexp/$', mydecorator(view.myview.dude), 'name_of_view'),

вы можете написать диспетчер, но если у вас есть много URL-адресов для модуля, вероятно, было бы удобнее создать промежуточное слой.

Читайте также: украшение-все-django-admin-Просмотры-1-4