问题
老规矩,先上代码:
from flask import Blueprint, request, session
from src.api.urlSet import MyEnum
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity, get_jwt
class sysTest():
def __init__(self):
self.bp = Blueprint("sys", __name__, url_prefix="/sys/")
self.Myenum = MyEnum()
self.bp.route(self.Myenum.route1, methods=['POST'])(self.route1)
self.bp.route(self.Myenum.route2, methods=['GET'])(self.route2)
@jwt_required
def route1():
pass
@jwt_required
def route2():
pass
看着很正常吧,但启动的时候 坑来了~
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/Users/project/venv/lib/python3.11/site-packages/flask/__main__.py", line 3, in <module>
main()
File "/Users/project/venv/lib/python3.11/site-packages/flask/cli.py", line 1064, in main
cli.main()
File "/Users/project/venv/lib/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/click/decorators.py", line 92, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/flask/cli.py", line 912, in run_command
raise e from None
File "/Users/project/venv/lib/python3.11/site-packages/flask/cli.py", line 898, in run_command
app = info.load_app()
^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/flask/cli.py", line 309, in load_app
app = locate_app(import_name, name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/flask/cli.py", line 219, in locate_app
__import__(module_name)
File "/Users/project/seoSysMange/app.py", line 55, in <module>
app.register_blueprint(userService_bp)
File "/Users/project/venv/lib/python3.11/site-packages/flask/sansio/scaffold.py", line 44, in wrapper_func
return f(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/flask/sansio/app.py", line 597, in register_blueprint
blueprint.register(self, options)
File "/Users/project/venv/lib/python3.11/site-packages/flask/sansio/blueprints.py", line 335, in register
deferred(state)
File "/Users/project/venv/lib/python3.11/site-packages/flask/sansio/blueprints.py", line 431, in <lambda>
lambda s: s.add_url_rule(
^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/flask/sansio/blueprints.py", line 110, in add_url_rule
self.app.add_url_rule(
File "/Users/project/venv/lib/python3.11/site-packages/flasgger/utils.py", line 980, in wrapper
return f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/flask/sansio/scaffold.py", line 44, in wrapper_func
return f(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/project/venv/lib/python3.11/site-packages/flask/sansio/app.py", line 659, in add_url_rule
raise AssertionError(
AssertionError: View function mapping is overwriting an existing endpoint function: sys.wrapper
重点看:
AssertionError: View function mapping is overwriting an existing endpoint function: sys.wrapper
各种AI ,百度,Google 没有找到答案! 在 www.5axxw.com/questions/c… 找到 类似的bug ,但按照 这位大神 的方法,是无法解决我的问题的 呜呜~~~不过也在其中受到了启发
AI 给的答案 是
from flask import Blueprint bp = Blueprint("sysUser", __name__, url_prefix="/sys/user") def route1(): pass def route2(): pass bp.add_url_rule('/route1', view_func=route1, endpoint='route1') bp.add_url_rule('/route2', view_func=route2, endpoint='route2')
但我的 '/route1' 是从 Myenum 中读取的,所以 在保持 源码 的情况下解决问题的方法是:
from flask import Blueprint, request, session
from src.api.urlSet import MyEnum
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity, get_jwt
class sysTest():
def __init__(self):
self.bp = Blueprint("sys", __name__, url_prefix="/sys/")
self.Myenum = MyEnum()
self.bp.add_url_rule(self.Myenum.route1, methods=['POST'],
view_func=self.route1, endpoint='route1')
self.bp.add_url_rule(self.Myenum.route2, methods=['GET'],
view_func=self.route2, endpoint='route2')
@jwt_required
def route1():
pass
@jwt_required
def route2():
pass
呜呜~~~真是太难了~