首页 > 解决方案 > AssertionError:视图函数映射正在覆盖现有端点函数:newRoom

问题描述

我正在创建一个游戏。我想要它让玩家调用“room/new_game”,为他们创建一个新的 URL,并呈现一个新的 newroom.html。第一次一切都很好,但如果另一个用户尝试托管自己的房间,我会收到错误消息。

这是我想要的示例过程:

  1. 客户端访问 index.html 并点击与“@app.route('/room/new_game', methods=['POST'])”关联的“主机游戏”。

  2. 服务器创建一个新的游戏对象,它有房间代码:aaaa。

  3. 服务器为那个房间创建一个新的 url。类似“/room/aaaa”的东西。

  4. 服务器将房间代码发送给客户端。

  5. 客户去 /room/aaaa。

这是我的代码

@app.route('/')
def index():
    return render_template("index.html", server=server)

@app.route('/room/new_game', methods=['POST'])
def newGame():
    game = Games.Game
    result = {}
    result["game_code"] = game.room_code

    @app.route('/room/' + game.room_code)
    def newRoom():
        return render_template("newroom.html", room_code=game.room_code.upper())
    return jsonify(result)

错误

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/ianc/.local/lib/python3.7/site-packages/flask_cors/extension.py", line 165, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/ianc/Documents/OneNightUltimateWerewolf/test.py", line 35, in newGame
    @app.route('/room/' + game.room_code)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1250, in decorator
    self.add_url_rule(rule, endpoint, f, **options)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 66, in wrapper_func
    return f(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1221, in add_url_rule
    'existing endpoint function: %s' % endpoint)
AssertionError: View function mapping is overwriting an existing endpoint function: newRoom
192.168.14.15 - - [03/Mar/2021 00:51:30] "POST /room/new_game HTTP/1.1" 500 -

标签: pythondjangoflask

解决方案


代替

@app.route('/room/' + game.room_code)
    def newRoom():
        return render_template("newroom.html", room_code=game.room_code.upper())
    return jsonify(result)

redirect(url_for('newRoom'))

查看此文档https://flask.palletsprojects.com/en/1.1.x/quickstart/#redirects-and-errors了解更多详细信息。


推荐阅读