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 -
我不知道他们为什么这样做。