Djangoの楽観排他制御を簡単に実装

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は、本当にスピード開発向きのフレームワークです。

どんどんファンが増えていくこと間違いない!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

「@縁紡ぐ」にご訪問頂きありがとうございます。
業務改善やIT化、システム開発・プロジェクトチーム運用支援を行っています。
お気軽にご相談ください。

コメント

コメントする

CAPTCHA


目次