如何在Django中使用request.session.get()获取会话嵌套数据?
如何用
request.session.get()获取会话中的嵌套数据 Django的request.session.get()**不支持直接用斜杠分隔的路径(如person/name)**获取嵌套字典的值,因为该方法仅接受顶层键进行查找。你可以通过以下两种方式实现需求:
方法1:分步获取(推荐,简洁安全)
先通过get()获取顶层字典,再对该字典调用get()获取嵌套字段,同时可以设置默认值避免KeyError或AttributeError:
# views.py from django.http import HttpResponse def my_view(request): request.session['person'] = {'name':'John','age':27} # 先获取顶层的person字典,默认返回空字典防止person不存在时出错 person_dict = request.session.get('person', {}) # 再获取嵌套字段,可按需设置默认值 name = person_dict.get('name', 'Unknown') age = person_dict.get('age', 0) print(name) # John print(age) # 27 return HttpResponse("Test")
方法2:封装工具函数(支持路径式键)
如果习惯用斜杠分隔的路径格式,可以自己写一个工具函数来解析路径并递归获取嵌套值:
# 工具函数示例,可放在utils.py或视图文件中 def get_nested_session(session, key_path, default=None): keys = key_path.split('/') current_data = session for key in keys: current_data = current_data.get(key) if current_data is None: return default return current_data # 视图中使用 from django.http import HttpResponse def my_view(request): request.session['person'] = {'name':'John','age':27} name = get_nested_session(request.session, 'person/name') age = get_nested_session(request.session, 'person/age') print(name) # John print(age) # 27 return HttpResponse("Test")
为什么原方法失效?
request.session.get('person/name')会把person/name当作一个完整的顶层键去会话中查找,但你的会话里只有person这个顶层键,自然返回None。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

