Chr*_*s R 5 django rest etag optimistic-locking
我正在尝试为Django选择一个REST框架,这将允许我轻松地使用ETag进行乐观锁定.我打算检查Django-活塞和Django Rest Framework库,但我对任何非GPL解决方案持开放态度(公司许可要求阻止我使用它们).
我的应用程序是以JSON/YAML形式从SQLAlchemy模型(不是Django模型)中销售数据,并且模拟ETag问题与Django Rest Framework一起正常工作.但是,我看不到在我的视图上应用ETag标头的简单方法.
对于我的观点,我想这样做:
给定响应,轻松地将ETag添加到我发送成功的响应标头中.这必须由我计算,因为它将取决于模型; 它不足以散列响应值或类似的东西.
在POST/PUT上,确保我收到的ETag与我发出的ETag匹配,或拒绝请求.
这是第一步给我带来一些麻烦; 我不确定哪个REST框架会使这个最简单,我也不确定实现它的最佳方法是什么.
框架的选择并不重要。无论如何,您都必须在缓存(memcache 或 redis)中维护一个表示资源状态的 etag。您可以使用分代缓存算法(https://signalvnoise.com/posts/3113-how-key-based-cache-expiration-works)。然后您可以轻松编写一个 mixin 来提取每个资源的 etag 并将其发送。根据我个人的经验,Django Rest Framework 非常适合它,因为它具有高度的灵活性和编写良好的代码。