关于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

你可能感兴趣的:(关于python+django的又一坑,请python班的同学进来看)