Использование ETag для оптимистичной блокировки в приложении REST Django - PullRequest
5 голосов
/ 26 января 2012

Я пытаюсь выбрать REST-фреймворк для Django, который позволит мне легко использовать ETag для оптимистичной блокировки.Я планирую изучить Django-поршни и библиотеки Django Rest Framework, но я открыт для любого решения не-GPL (требования корпоративного лицензирования не позволяют мне их использовать).

Мое приложение отправляет данные изМодель SQLAlchemy (не модель Django) в форме JSON / YAML, и по модулю проблема ETag прекрасно работает с Django Rest Framework.Однако я не вижу простого способа применения заголовков ETag к моим представлениям.

Для своих представлений я хочу сделать следующее:

  1. Учитывая ответ, легко добавьте ETag к заголовкам ответов, которые я отправляю в случае успеха.Это должно быть рассчитано мной, так как это будет зависеть от модели;недостаточно хэшировать значение ответа или что-то в этом роде.

  2. На POST / PUT убедитесь, что получаемый ETag совпадает с отправленным, или отклоните запрос.

Этап 1 доставляет мне немного хлопот;Я не уверен, какая среда REST сделает это проще всего, и я не уверен, что лучший способ сделать это.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Django поддерживает ETag через декораторы (@etag, @last_modified, @condition) или промежуточное ПО - вы можете проверить документы .Если вы хотите использовать эти декораторы с Django Rest Framework, вы можете использовать django-rest-framework-condition.

0 голосов
/ 11 июня 2015

Выбор каркаса не имеет значения. В любом случае вы должны поддерживать etag в кеше (memcache или redis), представляющий состояние ресурса. Вы можете использовать Алгоритм кеширования поколений (https://signalvnoise.com/posts/3113-how-key-based-cache-expiration-works).). Тогда вы можете легко написать миксин, который извлекает etag каждого ресурса и отправляет его. По моему личному опыту, Django Rest Framework будет простаивать из-за его большой гибкости и хорошо написанный код.

...