1. ホーム
  2. python

[解決済み] Djangoでカスタムミドルウェアをセットアップする方法

2023-01-07 02:21:17

質問

条件を満たすすべてのビューにオプションでkwargを渡すミドルウェアを作成しようとしています。

問題は、ミドルウェアを設定する方法の例を見つけることができないことです。 私がしたいメソッドをオーバーライドするクラスは見たことがあります。 process_view :

Class CheckConditionMiddleware(object):  
    def process_view(self, request):  

        return None  

しかし、このクラスはどこに置けばいいのでしょうか?ミドルウェアのアプリを作って、その中にこのクラスを入れて、それを settings.middleware ?

どのように解決するのですか?

まず パスの構造

パスがない場合は ミドルウェア フォルダを作成する必要があります。

yourproject/yourapp/middleware

ミドルウェアのフォルダは、settings.py、urls、templates...と同じフォルダに配置する必要があります。

重要です。を作成することを忘れないでください。 init .py 空ファイルをミドルウェアフォルダ内に作成し、アプリがこのフォルダを認識するようにします。

第2回:ミドルウェアの作成

ここで、カスタムミドルウェア用のファイルを作成する必要があります。この例では、IPに基づいてユーザーをフィルタリングするミドルウェアが必要だと仮定して、次のようなファイルを作成します。 filter_ip_middleware.py というファイルを作成します。 の中に ミドルウェア フォルダの中で、このコードを使ってください。

class FilterIPMiddleware(object):
    # Check if client IP is allowed
    def process_request(self, request):
        allowed_ips = ['192.168.1.1', '123.123.123.123', etc...] # Authorized ip's
        ip = request.META.get('REMOTE_ADDR') # Get client IP
        if ip not in allowed_ips:
            raise Http403 # If user is not allowed raise Error
 
       # If IP is allowed we don't do anything
       return None

3つ目: 'settings.py' にミドルウェアを追加します。

探す必要があります。

  • MIDDLEWARE_CLASSES (django < 1.10)
  • MIDDLEWARE (django >= 1.10)

settings.py の中で、ミドルウェアを追加する必要があります ( 最後の位置に追加します。 ). 以下のようになります。

MIDDLEWARE = ( #  Before Django 1.10 the setting name was 'MIDDLEWARE_CLASSES'
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
     # Above are django standard middlewares

     # Now we add here our custom middleware
     'yourapp.middleware.filter_ip_middleware.FilterIPMiddleware'
)

決まりました! これで、すべてのクライアントからのすべてのリクエストは、あなたのカスタムミドルウェアを呼び出し、あなたのカスタムコードを処理するようになります!