3

我正在尝试检查是否user.is_authenticated()或是否user.has_perm(),但似乎不可能扩展基于 django 类的生成视图。我发现request出现的唯一方法是get().

class MyDetailView(DetailView):
    def get(self, request, **kwargs):
        import pdb
        pdb.set_trace()
        self.object = self.get_object()
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)

在那里我发现这request.userAnonymusClass无论我是否登录的实例。

(Pdb) request.user.__class__
<class 'django.contrib.auth.models.AnonymousUser'>

因此检查身份验证或权限总是会失败:

(Pdb) self.request.user.is_authenticated()
False

我尝试过覆盖其他方法,例如 , 和其他get_object()方法get_context_data()。我每个人都有self.request可用的属性,但user仍然是Anonymus.

所以我的问题是:我到底应该如何检查用户是否使用基于类的视图登录!?

这是否意味着我必须(返回并)使用基于函数的视图?

我正在使用Python 2.7.1+Django version 1.4 pre-alpha SVN-16627




回应 EVIAAC 帖子: 使用login_requiredpermissions_required装饰器不是一种选择。我需要在检索对象后检查权限/登录:如果对象的布尔字段registration_required设置为True只有请求的用户才能看到该页面,其他人将被重定向到登录页面(示例行为借用自django.contrib.flatpages)。

4

3 回答 3

2

在 1.3 中正常工作:

class TestView(DetailView):
    def get(self, request, **kwargs):
        import ipdb; ipdb.set_trace()

ipdb> request.user
<User: zk>
ipdb> request.user.is_authenticated()
True

可能是一个错误?

于 2011-08-21T14:59:55.047 回答
1

尝试使用django.contrib.auth.decorators. 在您的urls.py中,您可以执行以下操作:

from django.contrib.auth.decorators import login_required

...
url(r'^something/?$', login_required(MyDetailView.as_view()))
...

要检查权限,您可以使用premissions_required装饰器。有关更多信息,请查看文档:https ://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator

于 2011-08-21T14:34:35.460 回答
0

我将 mixins 用于基于类的视图。在这种情况下,您可以这样做:

Django 基于类的通用视图和身份验证

于 2014-03-12T13:20:52.107 回答