[python] 장고는 DEBUG = False 일 때 잘못된 요청 (400)을 제공합니다.

django-1.6을 처음 사용합니다. 로 django 서버를 실행하면 DEBUG = True완벽하게 실행됩니다. 내가 변경할 때 DEBUGFalse설정 파일에, 서버는 중지하고 프롬프트 명령에 다음과 같은 오류를 제공합니다 :

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

내가 변경 한 후 ALLOWED_HOSTS["http://127.0.0.1:8000",], 브라우저에서 나는 오류가 발생합니다 :

Bad Request (400)

디버그 모드없이 장고를 실행할 수 있습니까?



답변

ALLOWED_HOSTS목록은 완전한 포함해야 호스트 이름 , 하지 URL을. 포트와 프로토콜을 제외하십시오. 를 사용 하는 경우 목록에도 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).

대담한 강조 광산 .

상태 400 응답은 호스트 헤더가 해당 목록의 값과 일치하지 않을 때 SuspiciousOperation예외 가 발생 하기 때문 입니다.


답변

USE_X_FORWARDED_HOST에게 true로 설정하지 않으면이 오류가 발생했습니다 . 문서에서 :

이 헤더를 설정하는 프록시가 사용중인 경우에만 활성화해야합니다.

내 호스팅 서비스 설명서 에이 설정을 사용해야 한다고 명시 적으로 기록했으며 잊어 버린 경우 400 오류가 발생합니다.


답변

나는 같은 문제가 있었고 ALLOWED_HOSTS = ['*']정적 이미지의 문제를 설정 하고 해결하여 환경 구성에서 가상 경로를 다음과 같이 변경해야합니다.

가상 경로
                디렉토리

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

도움이 되길 바랍니다.

PD : 나쁜 영어로 죄송합니다.


답변

나는 같은 문제가 있었고 어떤 대답도 내 문제를 해결하지 못했습니다. 이와 같은 상황을 해결하기 위해 다음 구성을 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 = Truesettings.py(내 경우에는 내가 포트에서의 Nginx에 요청 말을 들었 때문이다 8080과에 전달 guni포트8000


답변

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 : (사용 된 포트) / 프로젝트 및 voila로 변경하십시오!

Linux에서 bitnami django stack 2.2.3-1을 사용하므로 django가 사용중인 포트를 확인할 수 있습니다. 오류가있는 경우 (400 나쁜 요청) 다른 가상 네트워크에서 django를 추측합니다.. 행운을 빕니다
여기에 이미지 설명을 입력하십시오


답변

함께 DEBUG = False하면 설정 파일에, 당신은 또한 ALLOWED_HOST 목록을 설정해야합니다. 포함 해보십시오ALLOWED_HOST = ['127.0.0.1', 'localhost', 'www.yourdomain.com']

그렇지 않으면 django로부터 잘못된 요청 (400) 오류가 수신 될 수 있습니다.


답변

다음과 같이-안전하지 않은 상태로 서버를 실행하십시오.

python manage.py runserver-안전하지 않은