加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django类视图与装饰和会话

发布时间:2020-12-20 12:15:42 所属栏目:Python 来源:网络整理
导读:我试图将我的一些 django视图从基于函数的视图转换为基于类的视图,我遇到了一个小问题. 我的OO有点弱,我认为问题在于我已经忘记了事情的进展. 我有一个自定义的登录装饰器,我需要在视图上,所以我… 首先,我从这个例子中得到了View类 http://www.djangosnippe
我试图将我的一些 django视图从基于函数的视图转换为基于类的视图,我遇到了一个小问题.

我的OO有点弱,我认为问题在于我已经忘记了事情的进展.

我有一个自定义的登录装饰器,我需要在视图上,所以我…

首先,我从这个例子中得到了View类
http://www.djangosnippets.org/snippets/760/

然后我的视图类看起来像这样……

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的解决方案都应该有效,所以我不再重复了.只是想更清楚地描述问题可能会有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读