ディレクトリ
1.アボート()
アボート()関数も事前を終了し、指定されたエラーコードを返すように要求、ビュー機能が終了すると呼ばれています。それが終了関数の図であるため、すなわち、アボート()関数は、ビューに書き込まれます。URLが正当でないと、ビュー関数に入ることができないため、この関数は、原因URLが違法な原因となった例外を処理することはできません。
フラスコ安らか()コードでは、フラスコアボート()コードでカプセル化されアボート。
フラスコ・アボート()出典:
def abort(status, *args, **kwargs):
return _aborter(status, *args, **kwargs)
フラスコ-安らかアボート()出典:
def abort(http_status_code, **kwargs):
try:
original_flask_abort(http_status_code)
except HTTPException as e:
if len(kwargs):
e.data = kwargs
raise
ここ)アボートのフラスコ(である)(original_flask_abort。実際には、我々は我々が必要とする機能を実現するためにアボート()関数をカプセル化するために所有することができます。
1.1を使用してください:エラーコードを送信
from flask import abort
@app.route("/")
def index():
# abort函数可以提前终止视图函数
abort(404)
# 下面这条消息无法打印出来,因为上面abort函数已经终止了这个视图函数的运行。
print("我还在运行ing")
return "Index Page"
パラメータはHTTP_STATUS_CODE:配達ステータスコード(エラーコード)は、標準のHTTPステータスコードでなければなりません。
エラーコードに対応するエラーメッセージのフロントページに直接戻されます。
エラーコードを確認します。
from werkzeug.exceptions import default_exceptions
import pprint
pprint.pprint(default_exceptions)
結果:
その場合、内部サーバーエラーが以下のリスト外で報告されます:{「メッセージ」:「内部サーバーエラー」}
の2xxと3xxのは、このリストに含まれていない見ることができます。
{400: <class 'werkzeug.exceptions.BadRequest'>,
401: <class 'werkzeug.exceptions.Unauthorized'>,
403: <class 'werkzeug.exceptions.Forbidden'>,
404: <class 'werkzeug.exceptions.NotFound'>,
405: <class 'werkzeug.exceptions.MethodNotAllowed'>,
406: <class 'werkzeug.exceptions.NotAcceptable'>,
408: <class 'werkzeug.exceptions.RequestTimeout'>,
409: <class 'werkzeug.exceptions.Conflict'>,
410: <class 'werkzeug.exceptions.Gone'>,
411: <class 'werkzeug.exceptions.LengthRequired'>,
412: <class 'werkzeug.exceptions.PreconditionFailed'>,
413: <class 'werkzeug.exceptions.RequestEntityTooLarge'>,
414: <class 'werkzeug.exceptions.RequestURITooLarge'>,
415: <class 'werkzeug.exceptions.UnsupportedMediaType'>,
416: <class 'werkzeug.exceptions.RequestedRangeNotSatisfiable'>,
417: <class 'werkzeug.exceptions.ExpectationFailed'>,
418: <class 'werkzeug.exceptions.ImATeapot'>,
422: <class 'werkzeug.exceptions.UnprocessableEntity'>,
423: <class 'werkzeug.exceptions.Locked'>,
428: <class 'werkzeug.exceptions.PreconditionRequired'>,
429: <class 'werkzeug.exceptions.TooManyRequests'>,
431: <class 'werkzeug.exceptions.RequestHeaderFieldsTooLarge'>,
451: <class 'werkzeug.exceptions.UnavailableForLegalReasons'>,
500: <class 'werkzeug.exceptions.InternalServerError'>,
501: <class 'werkzeug.exceptions.NotImplemented'>,
502: <class 'werkzeug.exceptions.BadGateway'>,
503: <class 'werkzeug.exceptions.ServiceUnavailable'>,
504: <class 'werkzeug.exceptions.GatewayTimeout'>,
505: <class 'werkzeug.exceptions.HTTPVersionNotSupported'>}
1.2第二の方法:書式文字列のJSONを渡します
from flask import abort, jsonify
@app.route("/")
def index():
code = 50000
data = [{"data1": "lalallala", {"data2": "lolololo"}]
json_data = jsonify({"code": code, "data": data})
abort(json_data)
# 下面这条消息无法打印出来,因为上面abort函数已经终止了这个视图函数的运行。
print("我还在运行ing")
return "Index Page"
この方法は、リターンデータはアボートのフロントエンドに直接渡され、リターンに相当します。
3 1.3を使用してください:レスポンスボディを送信
from flask import abort, Response
@app.route("/")
def index():
res = Response("Not Found", 404, {"name": "ttytty"}) # Response也可以返回响应体信息
abort(res)
# 下面这条消息无法打印出来,因为上面abort函数已经终止了这个视图函数的运行。
print("我还在运行ing")
return "Index Page"
直接バック前端に応じ。第二の方法と3つの方法非常に似て。
2.のErrorHandler
アプリ青写真または現在のステータスコードをキャプチャし、処理をカスタマイズすることができます。
2.1は、単純な使用します。
from flask import jsonify
from . import admin
@admin.errorhandler(404)
def error_404(error):
"""这个handler可以catch住所有abort(404)以及找不到对应router的处理请求"""
response = dict(status=0, message="404 Not Found")
return jsonify(response), 404
@admin.errorhandler(Exception)
def error_500(error):
"""这个handler可以catch住所有的abort(500)和raise exeception."""
response = dict(status=0, message="500 Error")
return jsonify(response), 400
class MyError(Exception):
"""自定义错误类"""
pass
@admin.errorhandler(MyError)
def MyErrorHandle(error):
response = dict(status=0, message="400 Error")
return jsonify(response), 400
グローバル例外トラップハンドラにパッケージ化2.2:
- カスタム例外クラス(必要な場合)
from werkzeug.exceptions import HTTPException
class EigenException(HTTPException):
code = 500
eigen_code = 4000
description = 'Inner Server Error'
class RequestError(EigenException):
code = 400
class DataNotFound(RequestError):
code = 404
eigen_code = 4004
description = 'Data Not Found'
def __init__(self, message):
self.description = '%s Not Found' % message
class InvalidRequest(RequestError):
eigen_code = 4005
description = 'Invalid Request URL'
class MissingKey(RequestError):
eigen_code = 4006
description = 'Missing Key'
def __init__(self, key):
self.description = 'Missing Key `%s`' % key
- キャッチと取り扱い:
# 制定一个响应
def json_response(code, error, status_code):
response = make_response(json.dumps(dict(code=code, error=error)), status_code)
response.headers['Content-Type'] = 'application/json; charset=utf-8'
return response
# 异常捕获处理
@app.errorhandler(Exception)
def handler_exception(e):
if isinstance(e, 其他异常):
code, status_code, error = 4000, 400, e.description
elif isinstance(e, EigenException):
code, status_code, error = e.eigen_code, e.code, e.description
elif isinstance(e, HTTPException):
code, status_code, error = e.code, e.code, e.description
else:
code, status_code, error = 5000, 500, '%s(%s)' % (e.__class__.__name__, str(e))
return json_response(code, error, status_code)
3. app_errorhandler
グローバル状態コード、およびカスタム例外処理をキャプチャ
少し異なるエラーハンドラの青写真の準備では、ErrorHandlerのデコレータ場合は、エラーの唯一の青写真がトリガされます。あなたはグローバルエラーハンドラを登録したい場合は、app_errorhandlerを使用しています。
例えば:
from bookapp import bokkapp
@bookapp.app_errorhandler(Exception)
def handler_exception(e):
if isinstance(e, 其他异常):
code, status_code, error = 4000, 400, e.description
elif isinstance(e, EigenException):
code, status_code, error = e.eigen_code, e.code, e.description
elif isinstance(e, HTTPException):
code, status_code, error = e.code, e.code, e.description
else:
code, status_code, error = 5000, 500, '%s(%s)' % (e.__class__.__name__, str(e))
response = dict(code=code, status=status_code, msg=error)
return jsonify(response)
注意:私たちは、グローバルな状態401をキャプチャするために、アプリ、app.errorhandler(401)を作成するために、工場出荷時のパターンを使用していないときに、アプリはcreate_appの方法を使用して作成された場合は、キャプチャすることはできません、あなたがキャプチャしたい場合、あなたは青写真で書くことができ、 admin.errorhandler(401)、すなわち、すべての管理青写真、admin.app_errorhandler(401)を捕捉するステータス・コード401、グローバル状態コード401を捕捉することである、すなわち、状態401の他の設計図は、それが処理され、捕捉され
参考記事: