Django FormWizard и разрешения

Мне было интересно, есть ли способ использовать декораторы разрешений для Django Мастер форм. Я знаю, что есть способ сделать это через urlconf, но я хотел бы избежать этого и настроить все свои разрешения через представления.

Я попытался переопределить MyFormWizard.as_view() и добавить туда декораторы, но потом понял, что as_view() — это метод @classonly.

У меня нет большого опыта работы с представлениями на основе классов, и мне было интересно, есть ли простой способ добавить декоратор разрешений в один из методов FormWizard? Любые подсказки?


person mzu    schedule 26.11.2013    source источник


Ответы (2)


Вам не нужно украшать представление в конфигурации URL. Вы можете сделать это в своем views.py,

protected_wizard_view = login_required(MyWizardView.as_view())

а затем импортируйте protected_wizard_view в свой urls.py.

(r'^wizard/', protected_wizard_view),

Еще один вариант — украсить метод dispatch, как описано в документации.

class MyWizardView(WizardView):

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(MyWizardView, self).dispatch(*args, **kwargs)
person Alasdair    schedule 26.11.2013
comment
Спасибо, dispatch() и @method_decorator — это именно то, что я искал! - person mzu; 26.11.2013

Ответ @Alasdair хороший, есть также отличное приложение, содержащее множество помощников и миксинов, которые вы можете использовать для просмотра на основе классов, взгляните здесь.

Запустите pip install django-braces, и вы можете использовать LoginRequiredMixin

from braces.views import LoginRequiredMixin

class MyWizardView(LoginRequiredMixin, WizardView):
    pass

Также есть миксины типа PermissionRequiredMixin, MultiplePermissionsRequiredMixin, GroupRequiredMixin...

person Mounir    schedule 26.11.2013