Django 无状态性?

5 投票
4 回答
4954 浏览
提问于 2025-04-16 23:59

我只是想知道,Django是不是被设计成一个完全无状态的框架?

看起来它是鼓励无状态的设计,并且使用外部存储机制(比如数据库和缓存),但我在想,在我的应用开发过程中,使用manage.py runserver运行时,是否可以在服务器的内存中存储一些东西。

4 个回答

0

有一个叫做LocMemCache的缓存后端,它会把数据存储在程序内部。你可以用它来处理会话(不过要小心:这个缓存不能跨进程使用,所以你在部署的时候必须用单个进程,因为后续的请求不一定会由同一个进程处理)。全局变量也可以用(如果不想让所有进程的线程共享,可以使用线程局部变量;关于跨进程通信的警告在这里也适用)。

顺便问一下,外部存储有什么问题呢?外部存储可以方便地在不同进程之间共享数据,还提供其他功能(比如缓存的内存限制算法或者和数据库的持久化)。

1

这要看你说的“把东西存储在服务器内存里”是什么意思。还要看数据的类型。如果可以的话,存储“全局数据”在数据库或者文件系统里会更好。除非这些数据在每次请求时都需要,不然把它存储在Django实例里其实没什么意义。你需要实现某种锁定机制来防止竞争条件,但如果你把所有东西都存储在服务器对象上,你也得担心竞争条件。

当然,如果你说的是用户相关的数据,Django是支持会话的。或者,如果你愿意让用户自己保存数据,使用cookies也是一个不错的选择。

3

当然这是可能的。不过如果你在写一个网页应用的话,可能不太想这么做,因为这样会有线程方面的问题。

撰写回答