Django DEBUG = गलत होने पर खराब अनुरोध (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 चलाना संभव है?


एक बात याद रखें: ALLOWED_HOSTS
शेल्बी

जवाबों:


415

ALLOWED_HOSTSसूची पूरी तरह से योग्य होनी चाहिए होस्ट नाम , नहीं यूआरएल। पोर्ट और प्रोटोकॉल को छोड़ दें। यदि आप उपयोग कर रहे हैं 127.0.0.1, तो मैं localhostसूची में भी जोड़ दूंगा:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

आप किसी भी मेजबान *से मेल खाने के लिए भी उपयोग कर सकते हैं :

ALLOWED_HOSTS = ['*']

दस्तावेज का हवाला देते हुए:

इस सूची में मान पूरी तरह से योग्य नाम (जैसे 'www.example.com') हो सकते हैं, जिस स्थिति में वे अनुरोध के Hostहेडर के खिलाफ मिलान किए जाएंगे (केस-असंवेदनशील, पोर्ट सहित नहीं )। : एक अवधि से एक मूल्य एक उपडोमेन वाइल्डकार्ड के रूप में इस्तेमाल किया जा सकता '.example.com'से मेल खाएगा example.com, www.example.comऔर, के किसी भी अन्य उप डोमेन example.com'*'कुछ भी मैच करेगा का एक मूल्य ; इस मामले में आप Hostशीर्षलेख के अपने सत्यापन प्रदान करने के लिए जिम्मेदार हैं (शायद एक मिडलवेयर में; यदि ऐसा है तो इस मिडलवेयर को पहले सूचीबद्ध किया जाना चाहिए MIDDLEWARE_CLASSES)।

बोल्ड जोर मेरा

आपके द्वारा होस्ट किया गया शीर्ष लेख उस सूची के किसी भी मान से मेल नहीं खाने पर SuspiciousOperationअपवाद के कारण आपको मिलने वाली स्थिति 400 प्रतिसाद देती है ।


3
धन्यवाद यह काम करता है, लेकिन जब मैं गलत सेट करता हूं, तो एक समस्या आती है, सभी स्थिर फ़ाइलों के लिए 404 के रूप में दिखाया गया है। मैं समझ नहीं पाया कि यह क्यों नहीं देता है
मेगाबाइट्स

@MegaBytes: क्षमा करें, मुझे नहीं पता कि यह क्या हो सकता है।
मार्टिन पीटर्स

1
क्या आप मुझे सुझाव दे सकते हैं कि यह कैसे करना है, क्योंकि मेरी परियोजना उत्पादन पर चल रही है।
मेगाबाइट्स

फिर से, मुझे पता नहीं है कि आप क्या कर रहे हैं False। शायद आप एक नया प्रश्न पोस्ट कर सकते हैं?
मार्टिन पीटर्स

9
@MegaBytes जब DEBUG गलत होता है, तो सभी स्टेटिक फ़ाइल STATIC_ROOT से प्राप्त की जाती हैं, इसलिए संभवतः ऐसा ./manage.py collectstaticकरेंगे।
ब्लैकियागल 52

6

मेरे लिए, मुझे यह त्रुटि USE_X_FORWARDED_HOSTसही पर सेट नहीं करने से मिली । डॉक्स से:

यह केवल तभी सक्षम होना चाहिए जब एक प्रॉक्सी जो इस हेडर को सेट करता है उपयोग में है।

मेरी होस्टिंग सेवा ने उनके प्रलेखन में स्पष्ट रूप से लिखा है कि इस सेटिंग का उपयोग किया जाना चाहिए, और अगर मुझे यह भूल जाता है तो मुझे यह 400 त्रुटि मिलती है।


क्या यह आवश्यक है अगर ALLOWED_HOSTS = ['*']?
माइक स्टोडार्ड

1
मुझे लगता है कि ALLOWED_HOSTS पूरे होस्ट को ब्लॉक करता है। USE_X_FORWARDED_HOST केवल निर्धारित करता है कि क्या HTTP हेडर का उपयोग किया जाता है।
कीथ

3

मुझे भी यही समस्या थी और मैंने इसे सेट करके ALLOWED_HOSTS = ['*']और स्थिर छवियों के साथ समस्या को हल करने के लिए आपको इस तरह से पर्यावरण कॉन्फ़िगरेशन में वर्चुअल पथ बदलना होगा:

वर्चुअल पाथ                 डायरेक्टरी

/ स्टैटिक / / ऑप्ट / पाइथन / करंट / एप / आपकी / बीजेपी / स्टेटिक /
/ मीडिया / ऑप्ट / पाइथन / करंट / एप / न्यूवो / मीडिया /

मुझे उम्मीद है इससे आपको मदद मिली होगी।

पीडी: मेरी खराब अंग्रेजी के लिए खेद है।


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 के लिए प्रविष्टि प्रविष्टि ... css" दिखाई देती है। फिर मैं @ Blackeagle52 द्वारा उपरोक्त "python manager.py सामूहिक" का उपयोग करता हूं, 500 त्रुटि (मेरे स्थानीय देव में 400 त्रुटि भी हो सकती है) हल हो गई है।
ज़ीहोंग

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:( इस्तेमाल किए गए पोर्ट) / प्रोजेक्ट और वॉइला में बदलता हूं!

आपको यह जांचना होगा कि आपका वर्चुअल नेटवर्क एड्रेस क्या है, मेरे लिए जैसा कि मैं लिनक्स पर बिटनामी डीजैंगो स्टैक 2.2.3-1 का उपयोग करता हूं, मैं जांच कर सकता हूं कि पोर्ट डेंजो किस पोर्ट का उपयोग कर रहा है। अगर आपको कोई त्रुटि (400 खराब अनुरोध) है तो मुझे लगता है कि विभिन्न आभासी नेटवर्क पर django .. सौभाग्य यहां छवि विवरण दर्ज करें


0

साथ DEBUG = Falseमें आप सेटिंग्स फ़ाइल, आप भी ALLOWED_HOST सूची सेट अप की जरूरत है। सहित प्रयास करेंALLOWED_HOST = ['127.0.0.1', 'localhost', 'www.yourdomain.com']

अन्यथा आपको django से खराब अनुरोध (400) त्रुटि प्राप्त हो सकती है।


0

अपने सर्वर को इस तरह से --insecure के साथ चलाने का प्रयास करें:

अजगर प्रबंधन ओरेकल धावक --insecure


0

मुझे पहले अपाचे सर्वर को बंद करना पड़ा।

(फ़े sudo systemctl stop httpd.service/ sudo systemctl disable httpd.service)।

कि ' settings.py' फ़ाइल को संपादित करने के अलावा मेरी समस्या हल हो गई

सेवा ALLOWED_HOSTS = ['se.rv.er.ip', 'www.example.com']


-4

सेटिंग पर नेविगेट करें और बेसकैम फाइल को खोजें। अनुमत मेजबानों को ALLOWED_HOSTS = ['*'] पर सेट करें


4
स्वीकार किए गए उत्तर को न दोहराएं। क्लीन फोरम रखने के लिए इसे डिलीट करें
वुडकॉपर

इस तरह का उत्तर न दें, इसे टिप्पणी करें
अदनान अब्दुल्ला ज़की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.