我正在尝试检查user.is_authenticated()
或user.has_perm()
,但似乎无法扩展基于类的基于视图的基本视图。我找到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.user
是AnonymusClass
的实例,无论我是否登录。
(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_required
或permissions_required
装饰器不是一种选择。我需要在检索对象后检查权限/登录:如果对象的布尔字段registration_required
设置为True
,则只有重新注册的用户才能看到该页面,其他用户将被重定向到登录页面(例如从django.contrib.flatpages
)借来的行为。
答案 0 :(得分: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
可能是个错误?
答案 1 :(得分: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
装饰器。有关详细信息,请查看文档:{{3}}
答案 2 :(得分:0)
我将mixins用于基于类的视图。在这种情况下,您可以这样做: