首页 > 解决方案 > 为什么从会话中检索整数字典键作为字符串?

问题描述

在下面的代码中,为什么字典的1people在视图中检索为字符串session_retrieve?如何保留原始(整数)类型?

另外,为什么值不会发生同样的情况45

def session_add(request):
    people = {
        1: {
            'name': 'Tom',
            'age': 45,
        }   
    }
    request.session['people'] = people
    print(request.session['people'])
    # prints {1: {'name': 'Tom', 'age': 45}}
    return HttpResponse('added')

def session_retrieve(request):
    print(request.session['people'])
    # prints {'1': {'name': 'Tom', 'age': 45}}
    return HttpResponse('retrieved')

标签: pythondjango

解决方案


文档中已经提到了这种行为。以文档为例

>>> # initial assignment
>>> request.session[0] = 'bar'
>>> # subsequent requests following serialization & deserialization
>>> # of session data
>>> request.session[0]  # KeyError
>>> request.session['0']
'bar'

另外,为什么值不会发生同样的情况45

JSON 仅支持字符串键,但值可以是任何值。


推荐阅读