Tho*_*ltz 3 django session views class decorator
我试图将我的一些django视图从基于函数的视图转换为基于类的视图,我遇到了一个小问题.
我的OO有点弱,我认为问题在于我已经忘记了事情的进展.
我有一个自定义的登录装饰器,我需要在视图上,所以我...
首先,我从这个例子中获得了View类 http://www.djangosnippets.org/snippets/760/
然后我的视图类看起来像这样......
class TopSecretPage(View):
@custom_login
def __call__(self, request, **kwargs):
#bla bla view stuff...
pass
Run Code Online (Sandbox Code Playgroud)
问题是我的装饰者由于某种原因无法访问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
Run Code Online (Sandbox Code Playgroud)
我觉得这很简单,我很想念,所以感谢大家的耐心等待!
更新:好的,这就是我得到的错误......
"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
Run Code Online (Sandbox Code Playgroud)
对于应用于任何基于类的视图方法的任何装饰器,执行此操作的正确方法是使用django.utils.decorators.method_decorator().我不确定何时引入了method_decorator(),但这是Django 1.2 发行说明中的示例/更新.像这样使用它:
from django.utils.decorators import method_decorator
class TopSecretPage(View):
@method_decorator(custom_login)
def __call__(self, request, **kwargs):
#bla bla view stuff...
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3970 次 |
| 最近记录: |