2011-07-04 21 views
0

在AJAX請求服務器錯誤,我用這個代碼如何接收在Django

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方法的形式。

問題是每當我有一些像縮進的錯誤,或模型錯誤,那麼我什麼都沒有回來。我必須通過禁用ajax來測試頁面,並通過正常的方法提交,然後我看到黃色的django錯誤頁面,然後我糾正錯誤。

有沒有什麼辦法,即便我得到任何的錯誤,我認爲這是響應的jQuery

+1

在螢火蟲或Chrome檢查你其實可以瀏覽甚至Ajax響應,並檢查什麼錯誤是。 –

+0

爲什麼您的測試不能捕捉語法錯誤? –

+0

我從我的桌面構建應用程序並進行了許多更改。我正在測試自己,因爲我有問題。螢火蟲控制檯也沒有顯示任何錯誤,因爲他們發生在服務器端 –

回答

2

一般來說,如果該請求是AJAX,然後從返回Ajax錯誤的反應,你可以註冊自己的handler500和測試它表明如果DEBUG爲True,會發生什麼情況,或者如果DEBUG爲False,則會發出一般性錯誤。

其他選項是使用Firebug或Chrome Inspector來瀏覽Ajax響應,或者設置某種形式的記錄日誌記錄錯誤,即使在部署站點時也可以使用,以便對任何可能發生的錯誤。

Django的本身已經內置的日誌記錄功能,其中之一是發送電子郵件到管理員,但可以使用Django's integration with Python's built in logging定義自己。對於這些處理程序的一個選項是django-sentry,我在我的所有生產站點上都使用它來記錄發生的任何錯誤,並且還包括重寫handler500以便爲最終用戶提供可用於查找其確切錯誤的參考編號的功能實例。

Sentry自帶2個應用程序,一個是服務器,一個是客戶端。在一臺典型的生產環境中,當你有多臺機器服務於同一個站點時,你將擁有一個只有哨兵的專用哨兵服務器。但是,對於與網站集成的單個站點而言,確定無疑。

要配置哨兵,您需要將sentry(服務器)和sentry.client(客戶端)都添加到您的INSTALLED_APPS。然後你需要配置你的日誌記錄。

下面是一個例子:

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

我已經安裝了哨兵和syncdb完成。現在它會自動記錄錯誤,或者我需要在代碼中編程。因爲我正在學習Django,並且我還沒有觸及盜鏈部分 –

+0

已回覆。 –

+0

我已經編碼,如你所說,但是當我看到哨兵主頁沒有錯誤那裏,它的空 –

1

前一段時間,我寫了一個名爲django-ajaxerrors的小工具,它專門爲此場景而設計。它由中間件構成,它鉤入錯誤響應,確定它們是否是AJAX請求的結果,並在新的瀏覽器窗口中打開django技術錯誤頁面(因此發出請求的原始頁面保持不變)。

我不知道別人怎麼做AJAX,沒有它Django的,但我也許我並不完全客觀這裏...