我试图检查是否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.user
是AnonymusClass
如果我登录与否,无论实例。
(Pdb) request.user.__class__
<class 'django.contrib.auth.models.AnonymousUser'>
所以检查认证或烫发总是会失败:
(Pdb) self.request.user.is_authenticated()
False
我试着重写其他方法,如get_object()
,get_context_data()
ADN别人。我每个人都有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
借用的行为)。
这一定是别的。我创建了测试项目testapp与testmodel与testview使用django 1.3,它仍然是相同的结果。也许有一些我错过了。你能不能发布完整的测试代码? – seler
这是完整的代码。唯一缺少的是urlconf,正如你所期望的那样:'url(r'^ test',TestView.as_view())' – zeekay
看来这个bug只存在于使用firefox,这很奇怪。 :/ – seler