0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

djangoで複数のアプリに共通して使用するmixinクラスの配置について

Posted at

結論

ユーティリティディレクトリをプロジェクト内に作成し、その中にmixinクラスを作成するという方法があるそうです。作成後はsettings.pyINSTALLED_APPSにユーティリティディレクトリを追加しておきます。

はじめに

djangoで、mixinクラスを複数のアプリで共通して使用したいなという場面がありました。どういう方法が良いのか、最終的に落ち着いた方法を備忘録として投稿します。

ChatGPTに聞いた

自身だけでは答えが出ないので、ChatGPTに聞いてみました。

djangoで複数のアプリに共通して使用するmixinクラスはプロジェクトのどこに配置すれば良いですか?

Djangoで複数のアプリで共通して使用するmixinクラスを配置する場所にはいくつかの選択肢があります。以下にいくつかの一般的な配置方法を紹介します。

  1. プロジェクトのルートディレクトリに配置する: mixinクラスをプロジェクトのルートディレクトリに配置することができます。通常、ルートディレクトリにはプロジェクトの設定ファイル(settings.pyなど)がありますが、そこにmixinクラスを配置することもできます。
  2. ユーティリティディレクトリに配置する: プロジェクト内に専用のユーティリティディレクトリ(例:utils)を作成し、その中にmixinクラスを配置する方法もあります。ユーティリティディレクトリは、プロジェクト全体で共有されるユーティリティ関数やクラスなどを格納する場所として利用されます。
  3. 共通アプリを作成する: 共通の機能やユーティリティを提供するための独立したアプリケーションを作成する方法もあります。このアプリケーションにmixinクラスを配置し、他のアプリから参照することができます。この方法は、複数のアプリで共有される機能を明示的に分離するために使用されます。
    これらの選択肢の中で、最も一般的な配置方法は、プロジェクトのルートディレクトリまたは専用のユーティリティディレクトリにmixinクラスを配置することです。ただし、プロジェクトの構造や要件に応じて最適な配置方法を選択してください。また、mixinクラスを使用するアプリケーションやビューで適切にインポートして利用できるようにする必要があります。

3つの例のうち、2の方法を採用することにします。

実行

  1. プロジェクトのフォルダの中にutilsフォルダを作成します。

  2. utilsフォルダの中にmixins.pyを作成し、任意のmixinクラスをファイル内に実装します。

    mixins.py
    from django.contrib.auth.mixins import LoginRequiredMixin
    
    # LoginRequiredMixinを継承したMixinの場合
    class CustomLoginRequiredMixin(LoginRequiredMixin):
        # Mixinクラスを実装する
        pass
    
  3. settings.pyファイルのINSTALLED_APPSutilsを追加します。

    settings.py
    INSTALLED_APPS = [
        
        'utils'
    ]
    
  4. 実際にmixinクラスを使用するファイルではutilsに作成したmixinクラスをimportすればOKです。

    .py
    from utils.mixins import CustomLoginRequiredMixin
    

以上です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?