django类视图与装饰和会话
发布时间:2020-12-20 12:15:42 所属栏目:Python 来源:网络整理
导读:我试图将我的一些 django视图从基于函数的视图转换为基于类的视图,我遇到了一个小问题. 我的OO有点弱,我认为问题在于我已经忘记了事情的进展. 我有一个自定义的登录装饰器,我需要在视图上,所以我… 首先,我从这个例子中得到了View类 http://www.djangosnippe
我试图将我的一些
django视图从基于函数的视图转换为基于类的视图,我遇到了一个小问题.
我的OO有点弱,我认为问题在于我已经忘记了事情的进展. 我有一个自定义的登录装饰器,我需要在视图上,所以我… 首先,我从这个例子中得到了View类 然后我的视图类看起来像这样…… class TopSecretPage(View): @custom_login def __call__(self,request,**kwargs): #bla bla view stuff... pass 问题是我的装饰者由于某种原因无法访问request.session … 我的装饰师看起来像这样…… def myuser_login_required(f): def wrap(request,*args,**kwargs): # this check the session if userid key exist,# if not it will redirect to login page if 'field' not in request.session.keys(): return wrap 我觉得这很简单,我很想念,所以感谢大家的耐心等待! 更新: “ViewDoesNotExist:在模块projectname.application.views中尝试了TopSecretPage.错误是:类型对象’TopSecretPage’没有属性’session’” 我简化了装饰器,看起来像这样…. def myuser_login_required(request,**kwargs): # this check the session if userid key exist,# if not it will redirect to login page if 'username' not in request.session.keys(): return HttpResponseRedirect(reverse("login-page")) return True 解决方法
问题是你的包装器期望“request”作为第一个参数,但是类上的方法总是将“self”作为第一个参数.所以在你的装饰器中,它认为请求对象实际上是TopSecretPage本身.
无论是Vinay还是artran的解决方案都应该有效,所以我不再重复了.只是想更清楚地描述问题可能会有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |