장고

2011-07-04 7 views
0

에서 AJAX 요청에 서버 오류가 발생하는 방법이 코드장고

if form.is_valid(): 
      form.save() 
      if request.POST.get('ajax') == 'true': 
       return HttpResponse('Data Entered Successfully') # Redirect after POST 
      else: 
       return HttpResponseRedirect('/thanks/') # Redirect after POST 

나는 JQuery와 POST 방법을 통해 양식을 제출하고 사용하고 있습니다.

들여 쓰기와 같은 오류가 있거나 모델 오류가 발생할 때마다 문제가 발생합니다. 내가 아약스를 해제하여 정상적인 방법을 통해 제출하여 페이지를 테스트하고 노란색 django 오류 페이지를 볼 누른 다음 오류를 수정했다.

내가 요청이 아약스이고 그 다음은 아약스 오류 응답을 반환에서 경우 일반적으로 JQuery와

+1

실제로 심지어 AJAX 응답을 검색하고 확인할 수있는 오류입니다. –

+0

테스트에서 구문 오류를 포착하지 않는 이유는 무엇입니까? –

+0

나는 내 바탕 화면에서 응용 프로그램을 만들고 많은 것을 변경하고 있습니다. 나는 나 자신을 시험하고있다. 나는 문제가있다. 방화 광 콘솔도 서버 측에서 발생하는 오류를 보이지 않습니다. –

답변

2

에 대한 응답으로 자신의 handler500 및 테스트를 등록 할 수있는 것을 볼 수있는 오류가 발생해도 어떤 방법이 DEBUG가 True이면 어떤 일이 발생했는지 나타내며, DEBUG가 False이면 일반 오류 만 표시합니다.

다른 옵션은 Firebug 또는 Chrome Inspector를 사용하여 Ajax 응답을 탐색하거나 어떤 사이트에서 부검을 수행하기 위해 사이트가 배포 된 경우에도 유용한 오류를 기록하는 일부 형태의 기록을 설정하는 것입니다 발생할 수있는 오류.

장고 자체에는 로깅 기능이 내장되어 있으며 그 중 하나는 관리자에게 전자 메일을 보내지 만 사용자는 Django's integration with Python's built in logging을 사용하여 자신을 정의 할 수 있습니다. 이들에 대한 처리기의 한 가지 옵션은 발생하는 모든 오류를 기록하기 위해 모든 제작 사이트에서 사용하는 django-sentry이며 정확한 오류를 찾는 데 사용할 수있는 참조 번호를 최종 사용자에게 제공하기 위해 handler500을 무시하는 기능을 포함합니다 예.

센트리는 2 개의 앱으로 구성되며, 하나는 서버이고 다른 하나는 클라이언트입니다. 일반적인 프로덕션 환경에서 동일한 시스템에 여러 시스템이있는 경우에는 센트리 서버 전용 서버가 있습니다. 그러나 하나의 사이트가 사이트에 통합되어있는 것은 괜찮습니다.

센트리를 구성하려면 INSTALLED_APPSsentry (서버)과 sentry.client (클라이언트)을 모두 추가해야합니다. 그런 다음 로깅을 구성해야합니다.

LOGGING = { 
    "version": 1, 
    "disable_existing_loggers": False, 

    "handlers": { 
     "mail_admins": { 
      "class": "django.utils.log.AdminEmailHandler", 
      "level": "ERROR" 
     }, 
     "sentry": { 
      "class": "sentry.client.handlers.SentryHandler", 
      "level": "ERROR", 
     } 
    }, 

    "loggers": { 
     "django.request": { 
      "handlers": ["sentry", "mail_admins"], 
      "level": "ERROR", 
      "propagate": True 
     } 
    }, 
} 

위의 예는 오류가 계속 이메일 관리자 발생 할 경우 DEBUG = False : 여기

은 예입니다. 그렇게하고 싶지 않다면 django.request의 핸들러에서 mail_admins을 제거하십시오.

+0

sentry를 설치하고 syncdb가 완료되었습니다.이제 자동으로 오류를 기록하거나 코드에 프로그램을 작성해야합니다. 내가 장고를 배우고 있기 때문에 나는 아직 느긋한 부분을 만지지 않았다. –

+0

대답으로 대답했다. –

+0

내가 말한대로 코딩했는데, 보초 홈페이지에 오류가없는 것을 볼 때, 그 빈 –

1

얼마 전에이 시나리오를 위해 정확하게 설계된 django-ajaxerrors이라는 작은 유틸리티를 작성했습니다. 이것은 AJAX 요청의 결과인지 여부를 결정하고 오류가 발생한 응답을 확인하고 새로운 브라우저 창에서 django 기술 오류 페이지를 열어주는 미들웨어로 만들어졌습니다 (요청을 발행 한 원본 페이지는 그대로 유지됨).

나는 사람들이 AJAX를 어떻게 알고없이 장고,하지만 어쩌면 내가 여기에 완전히 객관적 아니에요하지 않습니다 ... 방화범 또는 크롬 관리자의