2017-11-29 4 views
0

私はで設定されたdjangoproject.comウェブサイトでこのdev settingsを設定しています。サブドメインコンフィグレーションで壊れたdjango-debug-toolbarパネル

私がのdjanoproject.comで報告したの問題を発見しましたが、いくつかのテストの後、私はそれが構成上の問題だと思って解決する必要があると思います。

以下の文はすべて、ブランチmasterのコードと関連しています。

Django Debug Toolbarは、たとえば、私がhttp://www.djangoproject.dev:8000/を開いた場合、wwwのツールバーを表示してSQLパネルを開くことができます。

私は例http://docs.djangoproject.dev:8000/en/1.11/のために開こうとすると、私はSQLパネル

を開こうとする場合、私は、ツールバーを見ることができますが、私は0: errorを持ってこれは私がブラウザのコンソールで見たメッセージです。

に失敗しました。読み込み http://www.djangoproject.dev:8000/debug/render_panel/?store_id=212b2bb5adc54a3a81b97b6da5547d4c&panel_id=SQLPanel 要求された リソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。したがって、Origin 'http://docs.djangoproject.dev:8000'は にアクセスできません。

私が直接URLを開く場合、私は、すべてのデータを見ることができます:

http://www.djangoproject.dev:8000/debug/render_panel/?store_id=212b2bb5adc54a3a81b97b6da5547d4c&panel_id=SQLPanel

私は問題はツールバーがWWWをオープンしようとしているということだと思います。パネルの場合はの代わりにとなります。 urlですが、これを修正するための設定を更新する方法はわかりません。

このバグを修正し、docs.djangoproject.comの場合とは異なる第3レベルのドメインにあるパネルを使用するコードを提案することはできますか?

答えて

0

この解決策の回答が私のPRの後にdjangoproject.comコードにマージされたので、解決策を書いて、一部のユーザーが同様の質問から解決策を見つけることができます。

これは、問題を説明issue @jezdezからの答えです:

要するに

:それは許可されていない別のサブドメイン上でJavaScriptを使用してリソースを要求しようとするので、これはCORSエラーです要求される。
debug_toolbarでレンダリングされたURLがwwwサブドメインを自動的に使用する理由は、djangoprojectプロジェクトにdjango-hosts hosts_override機能がインストールされているため、自動的にDjango-built-in URLテンプレートタグを無効にするためですDjangoのURLをURLパスとしてだけでなく、完全修飾URLとして解決します。
URLテンプレートタグが使用されたときに呼び出されるhost_urlテンプレートタグは、DEFAULT_HOST設定で定義されているホストを使用します(この場合はwwwです)。 デバッグツールバーテンプレートのurlタグへの呼び出しを別のホスト(たとえばdocs)に渡すために簡単にオーバーライドすることはできないため、基本的には他に1つのオプションがあります。適切なCORSヘッダーのAccess-Control-Allow- docsサブドメインの下にロードされたページがwwwサブドメインの下のリソースにアクセスできるようにします。私はそれを行うことを強くお勧めし、URLの生成を混乱させないでください。つまり、これは開発環境にのみ適用されるべきものであり、生産における悪用の可能性を減らすものです。
実際にCORSヘッダーを設定するのは、手作業で行う非常に小さなミドルウェアを作成するのと同じくらい簡単です。 django-cors-headersのような本格的なアプリを使う必要はありません。

私は、デバッグを可能にするためにCORSの「Access-Control-Allow-Origin」ヘッダーを設定するローカル専用のミドルウェアでこの問題を解決しました。

class CORSMiddleware(object): 
    """ 
    Set the CORS 'Access-Control-Allow-Origin' header to allow the debug 
    toolbar to work on the docs domain. 
    """ 
    def __init__(self, get_response): 
     self.get_response = get_response 

    def __call__(self, request): 
     response = self.get_response(request) 
     response['Access-Control-Allow-Origin'] = '*' 
     return response 

ここでは、実際に動作しているcommitがマージされています。