0

我是 django 新手,刚刚完成教程(第 4 部分),所以现在我想继续看看是否可以为我的项目添加一些身份验证。我想限制对 polls_results 页面的访问,您只能在登录时看到它。在最后一部分中,结果页面由一个通用视图(DetailView)提供服务,我将其子类化并添加了一个方法装饰器到覆盖的调度方法。

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

按照教程,在提交我的投票后,我希望看到一个not authorized error(401?),但即使我肯定没有登录,我仍然看到结果页面(没有错误)。我错过了什么吗?正如我相信的文档所示,所有中间件和已安装的应用程序都存在于 settings.py 中。

任何线索我在这里做错了什么?

可能是调度方法名称中的拼写错误。所以装饰器从未被击中。

4

1 回答 1

0

代替装饰器,使用具有类似行为的 mixin。你可以自己写一个,但我强烈建议使用LoginRequiredMixinDjango Braces

编辑:详细说明,方法装饰器不起作用,因为您将其应用于错误的方法。您可以使用login_required, 但在 URLConf 中调用实际视图时,如下所示:

url(r'^my_url$', login_required(MyClassView.as_view()), name='my_view')

但是,mixin 是一种更简洁、更通用的方法。

于 2013-09-11T23:16:32.847 回答