【发布时间】:2014-07-11 00:39:25
【问题描述】:
我有自定义中间件,我在其中设置用户详细信息,例如用户名,如下所示。但是每次用户请求新的 url 时,会话上下文都会丢失,我最终再次设置详细信息我在这里做错了什么
settings.py
MIDDLEWARE_CLASSES = (
....
....
'custom.api.get_username'
)
INSTALLED_APPS = (
....
'custom',
)
自定义/api.py
class get_username(object):
def process_request(self, request):
print dir(request.session)
if request.user.is_authenticated():
if not in hasattr(request.session,'username'):
user = api.get_user.(request.user.id).get("result")
username = user.get('first_name')
request.session["username"] = u.username
request.session.save()
print dir(request.session)
这是下面的两个目录打印语句
['TEST_COOKIE_NAME', 'TEST_COOKIE_VALUE', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get_new_session_key', '_get_or_create_session_key', '_get_session', '_get_session_key', '_hash', '_session', '_session_cache', '_session_key', 'accessed', 'clear', 'clear_expired', 'create', 'cycle_key', 'decode', 'delete', 'delete_test_cookie', 'encode', 'exists', 'flush', 'get', 'get_expire_at_browser_close', 'get_expiry_age', 'get_expiry_date', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'load', 'modified', 'pop', 'save', 'serializer', 'session_key', 'set_expiry', 'set_test_cookie', 'setdefault', 'test_cookie_worked', 'update', 'values']
['TEST_COOKIE_NAME', 'TEST_COOKIE_VALUE', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get_new_session_key', '_get_or_create_session_key', '_get_session', '_get_session_key', '_hash', '_session', '_session_cache', '_session_key', 'accessed', 'clear', 'clear_expired', 'create', 'cycle_key', 'decode', 'delete', 'delete_test_cookie', 'username', 'encode', 'exists', 'flush', 'get', 'get_expire_at_browser_close', 'get_expiry_age', 'get_expiry_date', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'load', 'modified', 'pop', 'save', 'serializer', 'session_key', 'set_expiry', 'set_test_cookie', 'setdefault', 'test_cookie_worked', 'update', 'values']
编辑:
名字不可用,必须进行 api 调用才能获得名字,这就是我选择这种使用会话变量的途径的原因。如果我错了,请纠正我
【问题讨论】:
标签: django django-views django-middleware django-sessions