Browse Source

fix: 调整error-handler的创建方式

SongZihuan 2 years ago
parent
commit
bface08ebd
1 changed files with 16 additions and 7 deletions
  1. 16 7
      app/app.py

+ 16 - 7
app/app.py

@@ -1,7 +1,7 @@
 import os
 import sys
 
-from flask import Flask, url_for, request, current_app, render_template, Response
+from flask import Flask, url_for, request, current_app, render_template, Response, jsonify
 from flask_mail import Mail
 from flask_login import LoginManager, current_user
 from flask_moment import Moment
@@ -59,13 +59,20 @@ class HBlogFlask(Flask):
                 return None
             return user
 
-        func = {"render_template": render_template, "Response": Response, "self": self}
+        res = []
         for i in [400, 401, 403, 404, 405, 408, 410, 413, 414, 423, 500, 501, 502]:
-            exec(f"def error_{i}(e):\n"
-                 f"\tself.print_load_page_log('{i}')\n"
-                 f"\tdata = render_template('error.html', error_code='{i}', error_info=e)\n"
-                 f"\treturn Response(response=data, status={i})", func)
-            self.errorhandler(i)(func[f"error_{i}"])
+            def create_error_handle(status):
+                def error_handle(e):
+                    self.print_load_page_log(status)
+                    if "/api" in request.base_url:
+                        rsp = jsonify({"status": status, "error": str(e)})
+                        rsp.status_code = status
+                        return rsp
+                    data = render_template('error.html', error_code=status, error_info=e)
+                    return Response(response=data, status=status)
+                return error_handle
+
+            self.errorhandler(i)(create_error_handle(i))
 
     def register_all_blueprint(self):
         import app.index as index
@@ -75,6 +82,7 @@ class HBlogFlask(Flask):
         import app.oss as oss
         import app.auth as auth
         import app.about_me as about_me
+        import app.api as api
 
         self.register_blueprint(index.index, url_prefix="/")
         self.register_blueprint(archive.archive, url_prefix="/archive")
@@ -83,6 +91,7 @@ class HBlogFlask(Flask):
         self.register_blueprint(auth.auth, url_prefix="/auth")
         self.register_blueprint(about_me.about_me, url_prefix="/about")
         self.register_blueprint(oss.oss, url_prefix="/oss")
+        self.register_blueprint(api.api, url_prefix="/api")
 
     def update_configure(self):
         """ 更新配置 """