gpt4 book ai didi

带有装饰器和 session 的 django 类 View

转载 作者:行者123 更新时间:2023-12-01 07:48:56 25 4
gpt4 key购买 nike

我正在尝试将我的一些 django View 从基于函数的 View 转换为基于类的 View ,但遇到了一个小问题。

我的 OO 有点弱,我认为问题在于我已经忘记了事情的发展方向。

我有一个自定义登录装饰器,我需要在 View 上使用它,所以我有......

首先我有这个例子中的 View 类
http://www.djangosnippets.org/snippets/760/

然后我的 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, *args, **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

最佳答案

对应用于任何基于类的 View 方法的任何装饰器执行此操作的正确方法是使用 django.utils.decorators.method_decorator() .我不确定何时引入 method_decorator() 但这里是 Django 1.2 release notes 中的示例/更新.像这样使用它:

from django.utils.decorators import method_decorator

class TopSecretPage(View):
@method_decorator(custom_login)
def __call__(self, request, **kwargs):
#bla bla view stuff...
pass

关于带有装饰器和 session 的 django 类 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com