問題タブ [django-middleware]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - Django:ミドルウェアシグナルリスナーはリクエストオブジェクトを操作できますか?
したがって、基本的には、ミドルウェアがリクエストオブジェクトに何かを追加するシグナルリスナーを接続する必要があります。その後、この情報を応答に含めることができます。私は現在これを持っています:
問題は、リスナーに追加したものが表示されないことです。どうしたの?
最終的に、リスナーは、レンダリングの直前に応答に追加するために時間内に実行される場合とされない場合がある並列タスクを登録する必要があります。
編集-スニペットの引用符
django - ジャンゴのコンテキストプロセッサとミドルウェア
コンテキスト プロセッサでできることはすべて、ミドルウェアでできるように思えます。では、コンテキスト プロセッサのポイントは何でしょうか。それらは単なるミドルウェアライトですか?
django - Djangostartでモジュールメソッドをオーバーライドする
モジュールを使用django.contrib.messages
してフラッシュメッセージを作成します。これらのメッセージは、追加のタグに応じて、ページのさまざまなブロックに表示できます。
'global'という名前のデフォルトのタグがあり、extra_tagsが設定されていない場合は、新しいメッセージに追加する必要があります。django.contrib.messages.add_message()
そこで、アプリケーションの起動時にメソッドをラップするミドルウェアを作成しました。
メソッドが呼び出されているのがわかりますinit_messages()
が、を呼び出すとdjango.contrib.messages.add_message()
、でラップされていませんadd_message_wrapper()
。
私の失敗はどこにありますか?
django - Django の app_cache_ready メソッドは、開発環境では True を返し、本番環境では False を返します
何が原因かわかりません。
私の開発マシンでは、まったく同じ django プロジェクトが適切に実行されますが、カスタム ミドルウェア コード app_cache_ready() メソッドの運用環境では常に False が返されます。無視してバイパスすると、cache.set はオブジェクトをキャッシュしません。
私の開発環境では runserver を使用してサーバーを起動しますが、本番環境では Apache と mod_wsgi を virtualhost ディレクティブと共に使用します。
何が問題なのか、誰にも手がかりがありますか? 私はすでに成功せずに数時間を費やしました。
前もって感謝します
以下は、再度キャッシュに失敗する単純化されたコードです。
その後の呼び出しでは、キャッシュされたキーが利用できないことが常に表示されます。
django - 独自のミドルウェアを作成すると Django アプリケーションがクラッシュするのはなぜですか?
アプリのビューが読み込まれる前に関数を実行したいので、独自のミドルウェアを作成しました。「my_app_name」フォルダーにある「DoBeforeMiddleWare.py」というファイルにあり、今のところ、次のようになります
この関数を settings.py のミドルウェアのリストに配置しようとしています。
ただし、パッセンジャーを再起動した後、アプリが読み込まれません。なんで?|MIDDLEWARE_CLASSES| の最後の行をコメントアウトすると、アプリが読み込まれます。
python - これはどのように wsgi ミドルウェアですか?
WSGI 仕様を理解していると思いました。だから私はこのDjangoモジュールを見ていますhttps://github.com/django/django/blob/master/django/middleware/locale.pyそして、pep0333が説明するように、それがwsgiミドルウェアの実装であることがわかりませんそれ。
次のようなどこかで署名を期待していました
また、別のアプリケーションを呼び出してその戻り値を処理する小さなルーチンも含まれています。
サーバービットがどこにあり、このミドルウェアのアプリケーションがどこにあるのか誰か説明できますか?
python - 完全にレンダリングされたリクエストのカウント
私はDjango(1年間の実務経験)に不慣れではありませんが、対処できない奇妙なタスクがあります。したがって、リクエストをカウントするミドルウェアを作成するために作成する必要がありますが、クライアントによって中止されなかったもの(ブラウザーで完全にレンダリングされたもの)のみです。
クライアントが接続を中止すると、サーバー(Python)がソケットへの書き込みに失敗したためにerrno 32 Broken Pipeをスローすることがわかりました[接続サーバークライアントはTCPであるため、何も問題はありません]。
しかし、問題は、ブラウザがページを完全にレンダリングしたかどうかを確認したり、そのエラーが発生したかどうかを確認したりする方法が見つからないことです(もちろん、そのエラーは別の原因である可能性がありますが、良いスタートです)。
ああ、私はJSを使いたくありません(JSではそれは簡単なことです)が、HTML5を使うことができます(それが役立つなら...)
django - Django: ミドルウェアで session_key にアクセスする方法
session_key
カスタム Django ミドルウェアでにアクセスできません。次を使用してアクセスしようとします:
また
エラーが発生します:
ファイルの最後MIDDLEWARE_CLASSES
とその後django.contrib.sessions.middleware.SessionMiddleware
にミドルウェアを配置しました。settings.py
ミドルウェアでセッション キーを設定できますが、session_key はページ全体が表示された後にのみ生成/アクセスできるように見えます。ページが初めて表示されると、テンプレートに{{ request.session.session_key }}
返されるためです。None
ページを更新すると、session_key
. アクセス方法に関するヒントはsession_key
大歓迎です。
django - Django ミドルウェアへのログインが必要
ここにある情報に基づいて、サイト全体のログイン制限を実装しようとしています:
私はで作成しlogin_required_middleware.py
ました:
MIDDLEWARE_CLASSES に以下を追加しましたsettings.py
ブラウザで更新すると、次のエラーが表示されます。
次はどこに行こう?
database - 拡張されたDjangoサイトモデルからデータを取得するためのデータベース集約度の低い方法はありますか?
特定のサイトに関連付けられているオブジェクトの名前と表示を除いて、多くのURLで同じように動作するサイトを運営しています。このため、サイトモデルを拡張して、サイトに関する他のさまざまな情報を含め、標準のサイトオブジェクト情報をリクエストオブジェクトに入れるミドルウェアを作成しました。以前は、リクエストオブジェクトで必要な情報はサイト名だけでした。これは、Djangoが提供するサイトモデルから取得できました。拡張サイトモデル(以前は他のさまざまなアプリモデルでのみ使用されていた)に存在する情報が必要になりました。
request.site = Site.objects.get_current()
これは、現在のサイトを取得し、モデルから関連する拡張Siteオブジェクトを取得する必要があるため、各ページ()に1つのクエリを追加することから2つを追加することまでになります。
2つのクエリを使用せずにこの情報を取得する方法はありますか?それとも使用せずに?
models.py:
ミドルウェア.py:
私のsettings.py
ファイルには、すべての共有構成データがあります。私のサーバーインスタンス(gunicorn)は[site]_settings.py
、すべてのサイト固有の設定(Djangoを含むSITE_ID
)を保持するロードするように構成されています。
SITE_ID
でハードコードされた参照を含まないオプション(存在する場合)を探しています[site]_settings.py
。
アップデート:
以下に示すように、サブクラス化されたオブジェクトは、引き続き親オブジェクトとすべての親オブジェクトの機能にアクセスできる必要があります。Siteオブジェクトの場合、奇妙なことに、これは当てはまらないようです。