好的,我在PyCharm中有以下结构的项目:
test_ns.py
的内容如下:
from flask_restplus import Api
from flask_restplus import Resource
from flask_restplus import reqparse
api = Api(version='1.0', title='My Blog API',
description='A simple demonstration of a Flask RestPlus powered API')
ns = api.namespace('blog/posts', description='Operations related to blog posts')
parser = reqparse.RequestParser()
parser.add_argument('Hello', required=True, location='form')
@ns.route('/')
class PostsCollection(Resource):
@api.expect(parser)
def get(self):
"""
Returns list of blog posts.
"""
return "Hello World from Swagger"
server.py
的内容如下:
from web.test_ns import ns, api
from flask import Flask, Blueprint
app = Flask(__name__)
def configure_app(flask_app):
flask_app.config['SWAGGER_UI_DOC_EXPANSION'] = 'List'
flask_app.config['RESTPLUS_VALIDATE'] = True
flask_app.config['RESTPLUS_MASK_SWAGGER'] = False
def initialize_app(flask_app):
configure_app(flask_app)
blueprint = Blueprint('api', __name__, url_prefix='/api')
api.init_app(blueprint)
api.add_namespace(ns)
flask_app.register_blueprint(blueprint)
def main():
initialize_app(app)
app.run(host="127.0.0.1", port="5000")
if __name__ == '__main__':
main()
问题是我没有获得适当的Swagger UI。当我运行server.py并在浏览器中访问它时,这就是我得到的:
基本上,这不是我想要的实际Swagger-UI。
我想要的是在flask_restplus site上刊登的广告:
我就是不明白我在做什么错。
我已经完成了GitHub over here上的一个项目,但是我不明白自己在做什么或有所不同。该项目使用与我相同的Swagger软件包,但我无法获得正确的输出。我要去哪里错了?
可以在here中找到运行GitHub项目的说明。
我的项目与GitHub的唯一区别是,后者只是使用更多的模块。
查看Flask的服务器日志,我可以看到GitHub项目正在对后端进行更多的调用以生成UI:
对我来说,我只拨打少量电话即可生成不正确的Swagger UI:
* Serving Flask app "server" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [08/Feb/2019 23:37:00] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [08/Feb/2019 23:37:04] "GET /api/ HTTP/1.1" 200 -
127.0.0.1 - - [08/Feb/2019 23:37:04] "GET /swaggerui/favicon-16x16.png HTTP/1.1" 200 -
127.0.0.1 - - [08/Feb/2019 23:37:04] "GET /api/swagger.json HTTP/1.1" 200 -
造成差异的原因是什么?
我已经搜索过文档,但找不到任何东西。我想念什么?
即使使用flask_restplus site中的示例,也无法如广告所示那样提供正确的Swagger UI。
GitHub项目有什么神奇之处,为什么它是唯一可行的项目?正确的做法是,我显然不是。
答案 0 :(得分:1)
两个图像都是Swagger UI,只是版本不同。
Swagger UI v。3中的第一个图像(您得到的图像),这是UI的当前版本。您可以在https://pestore.swagger.io的官方Swagger UI演示中看到它。
第二张图片(来自flask_restplus的文档)是Swagger UI v 2,该旧版本已不再开发/受支持。
flask_restplus通过使其依赖项(包括Swagger UI)保持最新状态来按预期工作。问题出在flask_restplus的文档上,因为它包含了一个过时的Swagger UI屏幕截图,与用户实际得到的截屏不同。考虑向flask_restplus项目提交文档更新请求。