Django在视图之间传递数据

ima*_*453 33 python django django-views

我想知道在视图之间传递数据的"最佳"方式是什么.创建不可见字段并使用POST传递它还是应该在我的URL中编码它更好?或者有更好/更简单的方法吗?对不起,如果这个问题很愚蠢,我是网络编程的新手:)

谢谢

Sri*_*aju 49

在视图之间传递数据的方法有很多种.实际上,在两个不同的脚本之间传递数据的问题,当然也有一些进程间通信的概念也没有太大的不同.想到的一些事情是 -

  1. GET请求 - 第一个请求命中view1->将数据发送到浏览器 - >浏览器重定向到view2
  2. POST请求 - (如您所建议)与上面相同的流程,但在涉及更多数据时适用
  3. Django会话变量 - 这是最简单的实现
  4. 客户端cookie - 可以使用,但存储的数据有限制.
  5. Web服务器级别的共享内存 - 棘手但可以完成.
  6. REST API - 如果您可以拥有独立服务器,那么该服务器可以使用REST API来调用视图.
  7. 消息队列 - 如果可以使用独立服务器,甚至消息队列也可以工作.即,第一个视图(API)接受请求并将其推送到队列,而其他一些进程可以弹出消息并点击您的第二个视图(另一个API).这将解耦第一和第二视图API,并可能更好地管理负载.
  8. 缓存 - 也许像memcached这样的缓存可以充当中介.但是如果一个人走这条路线,最好使用Django会话,因为它隐藏了大量的实现细节,但如果规模是一个问题,memcached或redis是不错的选择.
  9. 持久存储 - 将数据存储在某些持久存储机制(如mysql)中.这使得您的请求(可能是面向API的客户端)与处理部分(通过在中间使用DB)分离.
  10. NoSql存储 - 如果写入速度是每秒数十万的其他顺序,那么MySql性能将成为瓶颈(有很多方法可以通过调整mysql配置来解决这个问题,但这并不容易).然后考虑NoSql DB可能是另一种选择.例如:dynamoDB,Redis,HBase等.
  11. 流处理 - 如StormAWS Kinesis可以是一个选项,如果您的用例是实时计算.实际上,您可以在中间使用AWS Lambda作为无服务器计算模块,该模块将读取并调用您的第二个视图API.
  12. 将数据写入文件 - 然后下一个视图可以从该文件中读取(真正的丑陋).这可能永远不应该完成,但把这一点放在这里是不应该做的事情.

不能再想了.如果我得到任何更新将更新.希望这在某种程度上有所帮助.