【问题标题】:Weird session object behavior in djangodjango中奇怪的会话对象行为
【发布时间】:2014-09-16 13:42:12
【问题描述】:

我正在尝试使用字典实现一个简单的购物车

{item_id:数量}

@dajaxice_register
def inc_items(request, item_id):
    item_id=int(item_id)
    print "ITEMID: ", item_id
    #cart is a list of items {(id:qty)}
    dajax=Dajax()

    if 'cart' not in request.session :
        request.session['cart']={}

    cart = request.session['cart']

    if item_id not in cart:
        cart[item_id]=0

    cart[item_id] += 1

    print "CART:", cart
    request.session['cart']=cart
    request.session.modified = True
    request.session.save()
    count=sum(cart.values())
    dajax.assign('#cart_items', 'innerHTML', str(count))

我尝试按照文档中的说明使用 request.session.modified 无论如何,我都会收到一个非常奇怪的结果

CART: {u'1': 1, 1: 1, u'3': 1, u'2': 1}

注意:我将 item_id 显式转换为整数,所以我不知道字符串键的来源!

注意:购物车对象也不超过 4 个键!

提前致谢

【问题讨论】:

  • 也许它们仍然存在于以前版本的代码中?
  • 感谢您的回复,我在尝试时将 django_session 表截断了很多次

标签: python django session


【解决方案1】:

会话使用的默认序列化是 JSON 格式。 JSON 只允许字符串作为键,所以当数据保存到数据库时,所有整数键都转换为字符串。当您加载数据时,它们是整数的事实会丢失,并且键是纯字符串(好吧,unicode 字符串)。

最简单的解决方案是在会话数据键中专门使用字符串,并且只将它们转换为整数以进行进一步处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2014-03-03
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多