关于python+django的又一坑,请python班的同学进来看

事情是这样的。

在使用django1.6+的时候,默认会吧session存放在数据库django_session表里。

如果要把session放在内存中,就应该在settings.py 中配置

SESSION_ENGINE = "django.contrib.sessions.backends.cache"


使用的时候:

新增:request.session["userName"] = "Tom"

查询:name = request.session["userName"]

删除:del request.session["userName"]


好,那更复杂一点的数据该如何存储呢:比如一个对象Student。

按照其他语言的习惯,比如java和C#,按理说应该是:

stu = Student(name="Tom",age = 12)

新增:request.session["user"] = stu

查询:stu = request.session["user"]

删除:del request.session["user"]


存放对象的时候,如果session是存放在内存中,那么是没有问题的。但是一旦存放在数据库中就不行了。

为何?

因为存放在数据库中的东西,是需要能够进行json序列化的。

Student是不能被序列化json的。需要把Student转换为字典,没错,是字典。

{“name”:“Tom”,“age”:12}

这样才能存放在数据库session中。



另外,如果stu是一个对象。那么执行下列语句:

print(“1111111”)

request.session["user"] = stu

print(“2222222”)


输出是

111111

222222


这说明,session的新增操作是用了多线程,并不会阻止222222的输出,但是在http请求的时候,会报stu不可以被json序列化的错误。坑点,要注意。

 

交流专业、技术问题等加Python交流群: 338985564

转载于:https://my.oschina.net/u/2393162/blog/531638

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值