代码之家  ›  专栏  ›  技术社区  ›  rg88

烧瓶蓝图404

  •  3
  • rg88  · 技术社区  · 6 年前

    当我试图进入烧瓶蓝图中定义的路线时,我得到了404,我不明白为什么。有人知道我做错了什么吗(我对flask和python是新手,所以它可能是一些基本的东西)?

    我的蓝图( test.py ):

    from flask import Blueprint, jsonify, request
    from werkzeug.local import LocalProxy
    
    test_blueprint = Blueprint(
        'test_blueprint', __name__, url_prefix='/test')
    
    
    @test_blueprint.route('/test', methods=['GET'])
    def get_all_tests():
    
        return jsonify([{
            "id": "1",
            "name": "Foo"
        }, {
            "id": "2",
            "name": "Bar"
        }, {
            "id": "3",
            "name": "Baz"
        }]), 200
    

    我的 app.py :

    from test import test_blueprint
    
    from flask import abort, Flask
    from os import environ
    
    
    def create_app():
    
        app = Flask(__name__)
    
        app.config.from_object('config.settings')
        app.template_folder = app.config.get('TEMPLATE_FOLDER', 'templates')
        app.url_map.strict_slashes = False
    
        app.register_blueprint(test_blueprint)
    
        return app
    

    打击的结果 http://127.0.0.1:5000/test 是:

    (venv) mymachine:api myusername$ python run.py
     * Restarting with stat
    Starting server at 127.0.0.1 listening on port 5000 in DEBUG mode
     * Debugger is active!
     * Debugger PIN: 123-456-789
    127.0.0.1 - - [2018-06-03 17:02:56] "GET /test HTTP/1.1" 404 342 0.012197
    

    App.Py 测试.py 在同一个目录中,仅供参考。


    额外信息: 从上面可以看出,我是用一个名为 run.py 为了完整起见,这是那个文件:

    from flask_failsafe import failsafe
    from gevent import monkey
    from gevent.pywsgi import WSGIServer
    from werkzeug.debug import DebuggedApplication
    from werkzeug.serving import run_with_reloader
    
    @failsafe
    def failsafe_app():
        from app import create_app
        return create_app()
    
    
    app = failsafe_app()
    
    
    @run_with_reloader
    def run():
    
        app.debug = app.config['DEBUG']
    
        print('Starting server at %s listening on port %s %s' %
              (app.config['HOST'], app.config['PORT'], 'in DEBUG mode'
               if app.config['DEBUG'] else ''))
    
        if app.config['DEBUG']:
            http_server = WSGIServer((app.config['HOST'], app.config['PORT']),
                                     DebuggedApplication(app))
        else:
            if app.config['REQUEST_LOGGING']:
                http_server = WSGIServer((app.config['HOST'], app.config['PORT']),
                                         app)
            else:
                http_server = WSGIServer(
                    (app.config['HOST'], app.config['PORT']), app, log=None)
    
        http_server.serve_forever()
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   PRMoureu    6 年前

    当您使用 url_prefix ,此蓝图的每个规则都将此前缀与给定的路由连接起来。

    在您的示例中,url应该是 http://127.0.0.1:5000/test/test 访问视图 get_all_tests

        2
  •  0
  •   John Gordon    6 年前

    您的端口号在URL中的错误位置。

    应该是 http://127.0.0.1:5000/test

    正如你所拥有的,你正在访问标准端口80,寻找url /test:5000