从装饰器访问Django会话

2 投票
3 回答
2577 浏览
提问于 2025-04-15 21:27

我有一个装饰器,用于我的视图,叫做 @valid_session。

from django.http import Http404

def valid_session(the_func):
"""
function to check if the user has a valid session
"""
def _decorated(*args, **kwargs):        
    if ## check if username is in the request.session:
        raise Http404('not logged in.')
    else:
        return the_func(*args, **kwargs)
return _decorated

我想在我的装饰器里访问我的会话。当用户登录时,我会把用户名放进我的会话里。

相关问题:

3 个回答

0

你可以把请求(或者只是会话)作为一个参数传递给装饰器。我只是不知道怎么获取它来传递进去。昨晚我也在试着弄类似的事情。

1

视图函数的第一个参数是请求,所以装饰器也会把这个请求作为它的第一个参数。你可以通过简单地使用 request.session 来获取会话信息。

4

像下面这样的代码能解决你的问题吗:

def valid_session(func):
    def decorated(request, *args, **kwargs):
        print request.session
        return func(request, *args, **kwargs)
    return decorated

撰写回答