2011-07-04 5 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メソッドを経由してフォームを送信していますを使用しています。

問題は、インデントやモデルエラーのようなエラーが発生した場合、何も戻ってこない場合です。私はajaxを無効にしてページをテストし、通常の方法でサブミットしてから、黄色のdjangoエラーページを表示してエラーを修正しなければなりませんでした。

私はすべてのエラーを取得した場合でも、私は、要求がAJAXであれば、一般的にはjqueryの

+1

...私は、人々はそれなしAJAXとDjangoを行う方法を知りませんが、私は多分私はここで完全に客観的ではありませんよエラーはです。 –

+0

テストで構文エラーが検出されないのはなぜですか? –

+0

私は自分のデスクトップからアプリケーションを構築しており、多くの変更を加えています。私は自分自身をテストしており、私は問題を抱えています。 Firebugコンソールにもサーバー側で発生するエラーが表示されません –

答えて

2

への応答として、あなたがあなた自身のhandler500とテストを登録することができ、その後、そこからAJAXエラー応答を返すことを確認することをどのような方法がありますDEBUGがTrueの場合に何が起きたかを示し、DEBUGがFalseの場合には一般的なエラーを返します。

その他のオプションは、FirebugまたはChrome Inspectorを使用してAjaxレスポンスをブラウズするか、サイトが配備されていても死亡しないようにエラーを記録するログを設定することですエラーが発生する可能性があります。

Django自体にはログ機能が組み込まれていますが、そのうちの1つは管理者に電子メールを送信しますが、Django's integration with Python's built in loggingを使用して自分自身を定義することができます。これらのハンドラのハンドラの1つのオプションは、私が実際に発生したエラーを記録するために私のすべての本番サイトで使用するdjango-sentryであり、正確なエラーを検索するために参照番号をエンドユーザに与えるためにhandler500を上書きする機能も含まれていますインスタンス。

セントリーには2つのアプリケーションが付属しています.1つはサーバー、もう1つはクライアントです。典型的な運用環境では、複数のマシンが同じサイトにサービスを提供している場合、セントリーサーバーだけがセントリーを処理します。しかし、それがサイトと統合されている単一のサイトはOKです。

セリフを設定するには、sentry(サーバー)とsentry.client(クライアント)の両方をINSTALLED_APPSに追加する必要があります。次に、ロギングを設定する必要があります。ここで

は一例です:エラーが発生した場合DEBUG = False

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

上記の例では、まだ管理者にメールでお知らせいたします。それをしたくない場合は、django.requestのハンドラーからmail_adminsを取り除いてください。

+0

私はsentryをインストールしてsyncdbが完了しました。今それは自動的にエラーを記録するか、コードに何かをプログラムする必要があります。私はジャンゴを学んでいるので、私はささやき部分にまだ触れていないので、 –

+0

答えで返信。 –

+0

あなたが言ったように私はコーディングしましたが、セントリリーのホームページにエラーがないと –

1

これまで、このシナリオ用に設計されたdjango-ajaxerrorsという小さなユーティリティを書きました。これは、エラー応答にフックし、AJAXリクエストの結果であるかどうかを判断し、新しいブラウザウィンドウでdjangoの技術的エラーページを開きます(リクエストを発行した元のページは同じままです)。

FirebugのやChromeインスペクタで、あなたが実際にも、AJAXの応答を参照し、何を確認することができ