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