2017-03-22 1 views
-1

web2pyのエラーログにエラーチケットを追加したいが、依然としてカスタムページを返す。これを行う方法はありますか?何らかのアクション固有のエラー?特定のアクションに対して、エラーページを表示せずにweb2pyでエラーチケットを作成できますか?

アプリごとの静的エラーを返すようにしたい場合は、HTMLページにリダイレクトすることができます - ドキュメントとroutes.py例えばhereを参照してください。

routes_onerror = [ 
    ('init/400', '/init/default/login'), 
    ('init/*', '/init/static/fail.html'), 
    ('*/404', '/init/static/cantfind.html'), 
    ('*/*', '/init/error/index') 
] 

しかし、アクションごとにこれを行うにはどのような方法?

答えて

0

ご提供いただいた最初のリンクに関して、routes_onerrorは静的エラーページを返すことに限定されません。指定されたエラールートは、動的応答を生成するweb2pyアクションです。ドキュメントに記載されているように、エラーアクションは、HTTPステータスコード、エラーチケット識別子、および最初に要求されたURLをクエリ文字列で受け取ります。したがって、チケットが生成されますが、ユーザーはエラー処理アクションによって返されるカスタムHTML応答を表示します。

懸念がちょうど単一コントローラのアクションでは、しかし、別のオプションは、標準のPythonのエラー処理機能を使用することですされている場合:

def myaction(): 
    try: 
     [do something] 
     return response.render(dict(...)) 
    except: 
     [create error response] 
     response.status = 500 
     return error_response # or raise HTTP(500, error_message) 
+0

ありがとう! routes.pyを使って500sをアクションにマッピングすると、私はアプリケーション全体に500sをマッピングします。私が扱うことに興味がある特定のアクションの条件付きコードでその作業を行うことができますが、単一のグローバルアクションでページ固有のエラー処理コードを持つアンチパターンのように感じます。 – Chris

+0

プロダクションアプリケーションでは、通常、デフォルトのエラーページ(ユーザーがアクセスできないチケットリンクを単に表示する)をカスタムエラーページに置き換えます。したがって、(特定のタイプの)すべてのエラーを(特定のエラーソースに応じてさらにロジックにルーティングできる)単一のハンドラにルーティングすることは、私にとって妥当なパターンのようです。しかし、実際には単一のアクションに対して特別なエラー処理が必要な場合は、標準の 'try/except'ブロックを使用してエラーをキャッチするだけで十分です。 – Anthony

+0

理想的には、(1)web2pyチケットとして例外を記録する、(2)そのページのユーザーに特別なエラー応答を表示する、(3)エラーハンドラに特殊なケースコードを付けないでください。上記の解は(1)を除いて(2)と(3)を得て、特別なエラー経路を使うと(3)を除いて(1)と(2)を得る。しかし、提案を感謝します。 – Chris

関連する問題