0

Flask restx 是一个开发api函数的库,通过在flask框架中分文件来开发,支持swaggerui。在一台flask服务器上提供api和web页面时,可以将api部分分成文件,使用restx开发。但是,在注册命名空间以编写flask restx 时需要注意。下面两个源码的区别在于api的命名空间注册部分和api的app.route函数部分,以及api的命名空间注册部分是在app.route之前还是之后。

from flask import Flask, render_template, url_for
from datetime import datetime
from flask_restx import Api
from test import test


app = Flask(__name__)


@app.route('/')
def index():
    return 'index'


api = Api(
    app,
    doc="/doc/",
    version="0.1",
    title="test",
)


api.add_namespace(test, '/test')

if __name__ == '__main__':
    app.run(debug=True)

from flask import Flask, render_template, url_for
from datetime import datetime
from flask_restx import Api
from test import test


app = Flask(__name__)
api = Api(
    app,
    doc="/doc/",
    version="0.1",
    title="test",
)


api.add_namespace(test, '/test')


@app.route('/')
def index():
    return 'index'


if __name__ == '__main__':
    app.run(debug=True)

首先,用第一个源代码执行时,通常在接近/和/test路径时被识别。

127.0.0.1 - - [27/Sep/2021 15:40:40] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Sep/2021 15:40:40] "GET /test HTTP/1.1" 404 -

但是,第二个源代码只能正常识别 /test 而 / 不能。

127.0.0.1 - - [27/Sep/2021 15:40:40] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Sep/2021 15:40:40] "GET /test HTTP/1.1" 200 -

可以看到,console log 和 web browser 在接近 / route 的时候也显示 404 错误。但是,在第二个源代码中,并非所有 / 的子路由都不可能。

from flask import Flask, render_template, url_for
from datetime import datetime
from flask_restx import Api
from test import test


app = Flask(__name__)
api = Api(
    app,
    doc="/doc/",
    version="0.1",
    title="test",
)


api.add_namespace(test, '/test')


@app.route('/')
def index():
    return 'index'


@app.route('/main')
def main():
    return 'main'


if __name__ == '__main__':
    app.run(debug=True)

这样,/root 不被识别,但 /main 识别。

127.0.0.1 - - [27/Sep/2021 15:40:35] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [27/Sep/2021 15:40:40] "GET /test HTTP/1.1" 200 -
127.0.0.1 - - [27/Sep/2021 15:40:45] "GET /main HTTP/1.1" 200 -

我不知道他们为什么这样做。

4

1 回答 1

0

尝试将路由字符串留空以查看是否有效

@app.route('')
def index():
    return 'index'
于 2021-11-09T13:55:53.290 回答