Djangoは、DEBUG = FalseのときにBad Request(400)を出します


254

私はdjango-1.6を初めて使用します。でdjangoサーバーを実行するとDEBUG = True、完全に実行されます。しかし、設定ファイルでに変更DEBUGするFalseと、サーバーが停止し、コマンドプロンプトに次のエラーが表示されます。

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

に変更ALLOWED_HOSTSした後["http://127.0.0.1:8000",]、ブラウザーで次のエラーが発生します。

Bad Request (400)

デバッグモードなしでDjangoを実行することは可能ですか?


覚えておくべきこと:「http」または「https」を追加しないでくださいALLOWED_HOSTS
shellbye

回答:


415

ALLOWED_HOSTSリストには、完全修飾含まれている必要があり、ホスト名ない URLを。ポートとプロトコルは省略します。を使用している場合は、リストにも127.0.0.1追加localhostします。

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

任意のホスト*に一致させるために使用することもできます。

ALLOWED_HOSTS = ['*']

ドキュメントを引用:

このリストの値は完全修飾名(例:)にすることができます。'www.example.com'その場合、それらはリクエストのHostヘッダーに対して正確に照合されます(大文字と小文字は区別されず、portは含まれません)。:ピリオドで始まる値は、サブドメインのワイルドカードとして使用することができます'.example.com'一致しますexample.comwww.example.comとの他のサブドメインexample.com。の値は'*'すべてに一致します。この場合、Hostヘッダーの独自の検証を提供する必要があります(おそらくミドルウェアにあります。その場合、このミドルウェアは最初ににリストする必要がありますMIDDLEWARE_CLASSES)。

大胆な強調鉱山

返されるステータス400の応答は、ホストヘッダーがそのリストの値と一致しない場合に発生するSuspiciousOperation例外が原因です。


3
おかげで機能しますが、Falseを設定すると、すべての静的ファイルが404として表示されるため、1つの問題が発生します。なぜそれが見つからないのか理解できませんでした
MegaBytes

@MegaBytes:すみません、それが何であるかわかりません。
Martijn Pieters

1
私のプロジェクトが生産中であるので、それを行う方法を私に提案できますか?
MegaBytes

繰り返しますが、私はあなたが何を設定しているのかさえわかりませんFalse。たぶん、新しい質問を投稿できますか?
Martijn Pieters

9
@MegaBytes DEBUGがFalseの場合、すべての静的ファイルはSTATIC_ROOTから提供されるため、おそらくa ./manage.py collectstaticが行います。
Blackeagle52 2015

6

私にとっては、USE_X_FORWARDED_HOSTtrueに設定しないことでこのエラーが発生しました。ドキュメントから:

これは、このヘッダーを設定するプロキシが使用されている場合にのみ有効にする必要があります。

私のホスティングサービス、この設定を使用する必要があることをドキュメントに明示的に書いており、忘れるとこの400エラーが発生します。


ALLOWED_HOSTS = ['*']の場合、これは必要ですか?
Mike Stoddart 2017年

1
ALLOWED_HOSTSはホスト全体をブロックすると思います。USE_X_FORWARDED_HOSTは、HTTPヘッダーを使用するかどうかのみを決定します。
キース

3

私は同じ問題を抱えていましたALLOWED_HOSTS = ['*']が、静的イメージの問題を設定して解決するには、次のように環境構成の仮想パスを変更する必要があります。

仮想パス                 ディレクトリ

/ static / / opt / python / current / app / yourpj / static /
/ media / / opt / python / current / app / Nuevo / media /

お役に立てば幸いです。

PD:私の悪い英語でごめんなさい。


2

私は同じ問題を抱えていましたが、どの回答も私の問題を解決しませんでした。このような状況を解決するには、settings.py一時的に次の設定を追加してログを有効にすることをお勧めします

LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/tmp/debug.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, }, }

してみてくださいtail -f /tmp/debug.log。問題が発生した場合は、ブラインドデバッグよりもはるかに簡単に対処できます。

私の問題はまもなく

無効なHTTP_HOSTヘッダー: 'pt_web:8000'。提供されたドメイン名はRFC 1034/1035に従って無効です。

そして、追加して、それを解決するproxy_set_header Host $host;nginxの設定ファイルにとでポートフォワーディングを有効USE_X_FORWARDED_PORT = Trueにあるsettings.py(私の場合は私がポート上でnginxの内の要求に耳を傾けてきたからだと8080し、それを渡すguniポート上8000


共有いただきありがとうございます。私の製品の場合、LOGGING = ...を追加した後、「ValueError:Missing staticfiles manifest entry for ... css」というエラーが表示されます。次に、@ Blackeagle52で前述したように「python manager.py collectstatic」を使用すると、500エラー(ローカル開発では400エラーになることもあります)が解決されます。
zhihong 2018年

1

127.0.0.1でxamppを、127.0.1.1でdjangoをすでに持っているので、ホストを追加しようとしました

ALLOWED_HOSTS = ['127.0.0.1', 'localhost', 'www.yourdomain.com', '*', '127.0.1.1']

そして私は同じエラーまたは(400)悪いリクエストを受け取りました ここに画像の説明を入力してください

したがって、URLを127.0.1.1 :(使用されるポート)/ projectとvoilaに変更します!

私はLinuxでbitnami djangoスタック2.2.3-1を使用しているため、仮想ネットワークアドレスを確認する必要があります。djangoが使用しているポートを確認できます。エラー(400不正なリクエスト)が発生した場合は、別の仮想ネットワークでdjangoを使用していると思います。 ここに画像の説明を入力してください


0

ではDEBUG = False、あなたの設定ファイルで、あなたもALLOWED_HOSTリストを設定する必要があります。含めてみてくださいALLOWED_HOST = ['127.0.0.1', 'localhost', 'www.yourdomain.com']

そうしないと、djangoからBad Request(400)エラーを受け取る可能性があります。


0

次のように--insecureを使用してサーバーを実行してみてください。

python manage.py runserver --insecure


0

最初にApacheサーバーを停止する必要がありました。

(fe sudo systemctl stop httpd.service/ sudo systemctl disable httpd.service)。

' settings.py'ファイルの編集以外の問題が解決しました

ALLOWED_HOSTS = ['se.rv.er.ip', 'www.example.com']


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.