【发布时间】:2015-09-25 15:16:43
【问题描述】:
我正在尝试为 Django 中的基于类的视图编写自定义装饰器。我想检查一个特定条件,即用户被列为场景对象的所有者。我已经编写了装饰器,如果用户是所有者,它可以正常工作 - 它允许用户正确地继续访问页面。但是,如果用户不是所有者,我会收到“此页面未正确重定向”错误。
这是我的装饰器:
def scene_is_yours(function):
def wrap(request, *args, **kwargs):
pk = kwargs.get('pk')
scene = Scene.objects.get(id=pk)
if not (scene.user.id == request.user.id):
return HttpResponseRedirect('project-mine')
return function(request, *args, **kwargs)
return wrap
这是我的看法:
class SceneUpdateView(TemplateView):
model = Scene
fields = ['name', 'short_name', 'description']
template_name = 'scene/edit.html'
@method_decorator(login_required)
@method_decorator(scene_is_yours)
def dispatch(self, *args, **kwargs):
return super(SceneUpdateView, self).dispatch(*args, **kwargs)
我的回溯就是重复的这两行:
[07/Jul/2015 22:10:35]"GET /accounts/login/?next=/scenes/1/edit/ HTTP/1.1" 302 0
[07/Jul/2015 22:10:35]"GET /scenes/1/edit/ HTTP/1.1" 302 0
我尝试删除 login_required 装饰器,但没有效果。我正在测试的用户帐户已登录,所以我无法弄清楚为什么它试图让我登录然后返回装饰视图。怎么回事?
【问题讨论】:
标签: django