DEBUG = False olduğunda Django Kötü İstek (400) verir


254

Ben django-1.6'da yeniyim. Django sunucusunu DEBUG = Trueçalıştırdığımda mükemmel çalışıyor. Değişmek Ama DEBUGhiç Falseayarlar dosyasında, sunucu durdurulmuş ve istemi komutu aşağıdaki hatayı veriyor:

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

Değiştim sonra ALLOWED_HOSTSiçin ["http://127.0.0.1:8000",], tarayıcıda hata iletisi:

Bad Request (400)

Django'yu hata ayıklama modu olmadan çalıştırmak mümkün müdür?


Hatırlanması gereken bir şey: 'http' veya 'https' ALLOWED_HOSTS
eklemeyin

Yanıtlar:


415

ALLOWED_HOSTSListe tam içermelidir ana bilgisayar adlarını , değil URL'ler. Bağlantı noktasını ve protokolü dışarıda bırakın. Eğer kullanıyorsanız 127.0.0.1, ben localhostde listeye eklemek istiyorum :

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

Herhangi bir ana bilgisayarı *eşleştirmek için de kullanabilirsiniz :

ALLOWED_HOSTS = ['*']

Belgelerin alıntılanması:

Bu listedeki değerler tam olarak nitelenmiş adlar olabilir (örn. 'www.example.com'), Bu durumda isteğin Hostbaşlığına tam olarak eşleştirilirler (büyük / küçük harfe duyarlı değil , bağlantı noktası dahil değil ). : Bir süre ile başlayan bir değer, bir alt alan joker olarak kullanılabilen '.example.com'maç olacak example.com, www.example.comve diğer herhangi bir alt etki alanı example.com. Değeri '*'her şeyle eşleşir; bu durumda, Hostbaşlık için kendi doğrulamanızı sağlamaktan siz sorumlusunuz (belki bir ara katman yazılımında; öyleyse bu ara katman yazılımı ilk önce listelenmelidir MIDDLEWARE_CLASSES).

Cesur vurgu benim .

Aldığınız durum 400 yanıtı , ana bilgisayar üstbilginiz bu listedeki hiçbir değerle eşleşmediğinde bir SuspiciousOperationözel durum oluşmasından kaynaklanır .


3
Çalıştığı için teşekkürler, Ama Yanlış ayarladığımda, bir sorun geliyor, çünkü tüm statik dosyalar 404 olarak gösteriliyor. Neden bulunmadığını anlayamadım
MegaBytes

@MegaBytes: üzgünüm, bunun ne olabileceğini bilmiyorum.
Martijn Pieters

1
Bana nasıl yapılacağını önerebilir misin, çünkü projem üretime devam ediyor.
MegaBytes

Yine, ne ayarladığınızı bile bilmiyorum False. Belki yeni bir soru gönderebilirsin?
Martijn Pieters

9
@MegaBytes DEBUG yanlış olduğunda, tüm statik dosya STATIC_ROOT servis edilir, bu yüzden ./manage.py collectstaticmuhtemelen bir yapacak.
Blackeagle52

6

Benim için bu hatayı USE_X_FORWARDED_HOSTtrue olarak ayarlayarak aldım . Dokümanlardan:

Bu, yalnızca bu üstbilgiyi ayarlayan bir proxy kullanımdaysa etkinleştirilmelidir.

Hosting hizmetim belgelerinde açıkça bu ayarın kullanılması gerektiğini yazdı ve unutursam bu 400 hatasını alıyorum.


ALLOWED_HOSTS = ['*'] ise bu gerekli mi?
Mike Stoddart

1
ALLOWED_HOSTS tüm ana bilgisayarı engellediğini düşünüyorum. USE_X_FORWARDED_HOST yalnızca bir HTTP üstbilgisi kullanılıp kullanılmayacağını belirler.
Keith

3

Ben aynı sorunu vardı ve ayarlayarak ALLOWED_HOSTS = ['*']ve statik görüntüler ile sorunu çözmek için bu gibi ortam yapılandırmasında sanal yolları değiştirmek zorunda düzeltildi :

Sanal Yol                 Dizini

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

Umarım size yardımcı olur.

PD: Kötü ingilizcem için özür dilerim.


2

Aynı sorunu yaşadım ve cevapların hiçbiri sorunumu çözmedi, durumu bu şekilde çözmek için aşağıdaki yapılandırmayı settings.pygeçici olarak ekleyerek günlüğe kaydetmeyi etkinleştirmek daha iyi

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, }, }, }

ve deneyin tail -f /tmp/debug.log. ve sorununuzu gördüğünüzde, kör hata ayıklamadan çok daha kolay işleyebilirsiniz.

Benim sorunum

Geçersiz HTTP_HOST başlığı: 'pt_web: 8000'. Belirtilen alan adı RFC 1034/1035'e göre geçerli değil.

ve ekleyerek çözmek proxy_set_header Host $host;Nginx yapılandırma dosyasına tarafından port yönlendirme sağlayan USE_X_FORWARDED_PORT = Trueiçinde settings.py(o benim durumumda ben noktası üzerinde Nginx istek dinledim çünkü var 8080ve onu geçmek gunibağlantı noktasında8000


Paylaşım için teşekkürler. Prod benim durumumda, LOGGING = ... ekledikten sonra "ValueError: Eksik statik dosya ... css için manifest giriş eksik" hatasını görüyorum. Sonra @ @ Blackeagle52 tarafından belirtildiği gibi "python manager.py collectstatic" kullanın, 500 hata (ayrıca yerel geliştirici 400 hata olabilir) çözüldü.
zhihong

1

Benim için 127.0.0.1'de xampp ve 127.0.1.1'de django var ve ana bilgisayar eklemeye çalıştım

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

ve aynı hatayı aldım veya (400) hatalı istek aldım resim açıklamasını buraya girin

bu yüzden url'yi 127.0.1.1:(The kullanılan port) / project ve voila olarak değiştirdim!

Linux üzerinde bitnami django yığını 2.2.3-1 kullandığım için sanal ağ adresinizin ne olduğunu kontrol etmelisiniz, django'nun hangi bağlantı noktasını kullandığını kontrol edebilirim. bir hata (400 kötü istek) varsa o zaman farklı sanal ağ üzerinde django sanırım .. iyi şanslar resim açıklamasını buraya girin


0

İle DEBUG = Falsesize ayarlar dosyasında, ayrıca ALLOWED_HOST liste kurmak gerekir. Dahil etmeyi deneyinALLOWED_HOST = ['127.0.0.1', 'localhost', 'www.yourdomain.com']

Aksi takdirde, django'dan bir Kötü İstek (400) hatası alabilirsiniz.


0

Sunucunuzu --insecure ile şu şekilde çalıştırmayı deneyin:

python manage.py runserver --insecure


0

Önce apache sunucusunu durdurmak zorunda kaldım.

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

Bu, ' settings.py' dosyasını düzenlemenin yanı sıra sorunumu çözdü

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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.