2013-11-26 60 views
0

我想知道是否有方法使用Django的FormWizard权限装饰器。我知道有一种方法可以通过urlconf来完成,但我想避免这种情况,并通过视图设置我的权限。Django FormWizard和权限

我试图覆盖MyFormWizard.as_view()并在那里添加装饰器,但后来意识到as_view()是@classonly方法。

我没有很多基于类的视图的经验,并想知道是否有一种简单的方法在FormWizard的方法之一上添加权限装饰器?任何线索?

回答

1

您不必在url conf中修饰视图。您可以在views.py这样做,

protected_wizard_view = login_required(MyWizardView.as_view()) 

,然后在urls.py导入protected_wizard_view

(r'^wizard/', protected_wizard_view), 

另一个另一种选择是装饰dispatch方法,如described in the docs

class MyWizardView(WizardView): 

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

感谢,调度()和@method_decorator的正是我一直在寻找! – mzu

0

@Alasdair反应良好,也有包含许多助手和混入,你可以使用基于类的查看,看看here一个伟大的应用程序。

运行pip install django-braces,你可以使用LoginRequiredMixin

from braces.views import LoginRequiredMixin 

class MyWizardView(LoginRequiredMixin, WizardView): 
    pass 

还有混入像PermissionRequiredMixinMultiplePermissionsRequiredMixinGroupRequiredMixin ...