[解決済み] 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'
)
決まりました! これで、すべてのクライアントからのすべてのリクエストは、あなたのカスタムミドルウェアを呼び出し、あなたのカスタムコードを処理するようになります!
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] if 節の終了方法
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。