Djangoの楽観排他制御を簡単に実装
目次
django-concurrencyをインストールして設定する
楽観排他制御は、システム作成している人なら当たり前にする制御。
使う側からしたら、たまーーーーーに、
「他のユーザーが更新しているので、更新に失敗しました。」
的な、メッセージが表示されて更新できないことがあった時の処理ですね。
Djangoは世界的に使われているフレームワークなので本当に助かるものがたくさん無料で提供されている😀
大阪人の気質なのか、無料で使えて早くできるならこんな儲けものないって思う(笑)
インストール
それでは、『django-concurrency』をインストールしてきまーす
インストールは簡単!
pip install django-concurrency
たっとこれだけでインストールは完了です。
ViewファイルにインポートしてVersionフィールドを追加
from concurrency.fields import AutoIncVersionField
class Model(models.Model):
version = AutoIncVersionField(verbose_name="バージョン")
これだけで設定完了
あとは設定ファイルにミドルウェアに追加するだけ
settings ファイルにMIDDLEWAREに追加
MIDDLEWARE = [
'concurrency.middleware.ConcurrencyMiddleware', # 追加
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
エラー発生時の表示画面
エラーが発生した時には、templatesフォルダの直下にある409.htmlが読み込みされるようになっている。
{% extends "layout/base.html" %}
{% block title %}排他エラー{% endblock title %}
{% block content %}
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative" role="alert">
<strong class="font-bold">排他エラー</strong>
<span class="block sm:inline">他のユーザーが更新を行っています。再読み込みを実施して再入力をお願いします</span>
<span class="absolute top-0 bottom-0 right-0 px-4 py-3">
<svg class="fill-current h-6 w-6 text-red-500" role="button" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><title>Close</title><path d="M14.348 14.849a1.2 1.2 0 0 1-1.697 0L10 11.819l-2.651 3.029a1.2 1.2 0 1 1-1.697-1.697l2.758-3.15-2.759-3.152a1.2 1.2 0 1 1 1.697-1.697L10 8.183l2.651-3.031a1.2 1.2 0 1 1 1.697 1.697l-2.758 3.152 2.758 3.15a1.2 1.2 0 0 1 0 1.698z"/></svg>
</span>
</div>
{% endblock content %}
Djangoは、本当にスピード開発向きのフレームワークです。
どんどんファンが増えていくこと間違いない!
コメント