Nay*_*try 6 python flask swagger swagger-ui
我正在使用Flasgger将Swagger UI添加到我的Python Flask应用程序中。互联网上最常见的示例是使用以下命令的基本Flask样式@app.route:
from flasgger.utils import swag_from
@app.route('/api/<string:username>')
@swag_from('path/to/external_file.yml')
def get(username):
return jsonify({'username': username})
Run Code Online (Sandbox Code Playgroud)
这样可行。
但是,在我的应用程序中,我没有使用@app.route装饰器来定义端点。我正在使用烧瓶蓝图。如下所示:
from flask import Flask, Blueprint
from flask_restful import Api, Resource
from flasgger.utils import swag_from
...
class TestResourceClass(Resource):
@swag_from('docs_test_get.yml', endpoint='test')
def get() :
print "This is the get method for GET /1.0/myapi/test endpoint"
app = Flask(__name__)
my_api_blueprint = Blueprint('my_api', __name__)
my_api = Api(my_api_blueprint)
app.register_blueprint(my_api_blueprint, url_prefix='/1.0/myapi/')
my_api.add_resource(TestResourceClass, '/test/'
endpoint='test',
methods=['GET', 'POST', 'PUT', 'PATCH', 'DELETE'])
....
Run Code Online (Sandbox Code Playgroud)
如上所示,我@swag_from在TestResourceClass.get()绑定到GET方法端点的方法上使用了装饰器。test 在这两个地方,我也有endpoint = 匹配。
但是我在Swagger UI上什么都没有得到,它全是空白。该docs_test_get.yml文件确实包含有效的Yaml标记以定义swagger规范。
我想念什么?如何使Flasgger Swagger UI与基于Flask Blueprint的设置一起使用?
现在在https://github.com/rochacbruno/flasgger/blob/master/examples/example_blueprint.py 中有一个蓝图应用程序的例子
"""
A test to ensure routes from Blueprints are swagged as expected.
"""
from flask import Blueprint, Flask, jsonify
from flasgger import Swagger
from flasgger.utils import swag_from
app = Flask(__name__)
example_blueprint = Blueprint("example_blueprint", __name__)
@example_blueprint.route('/usernames/<username>', methods=['GET', 'POST'])
@swag_from('username_specs.yml', methods=['GET'])
@swag_from('username_specs.yml', methods=['POST'])
def usernames(username):
return jsonify({'username': username})
@example_blueprint.route('/usernames2/<username>', methods=['GET', 'POST'])
def usernames2(username):
"""
This is the summary defined in yaml file
First line is the summary
All following lines until the hyphens is added to description
the format of the first lines until 3 hyphens will be not yaml compliant
but everything below the 3 hyphens should be.
---
tags:
- users
parameters:
- in: path
name: username
type: string
required: true
responses:
200:
description: A single user item
schema:
id: rec_username
properties:
username:
type: string
description: The name of the user
default: 'steve-harris'
"""
return jsonify({'username': username})
app.register_blueprint(example_blueprint)
swag = Swagger(app)
if __name__ == "__main__":
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
小智 5
您只需要在引用端点时添加蓝图的名称。蓝图创建命名空间。下面举例。有用的提示:app.logger.info(url_for('hello1'))用于调试端点的问题 - 它显示了非常有用的错误消息,如下所示Could not build url for endpoint 'hello1'. Did you mean 'api_bp.hello1' instead?。
from flask import Flask, Blueprint, url_for
from flask_restful import Api, Resource
from flasgger import Swagger, swag_from
app = Flask(__name__)
api_blueprint = Blueprint('api_bp', __name__)
api = Api(api_blueprint)
class Hello(Resource):
@swag_from('hello1.yml', endpoint='api_bp.hello1')
@swag_from('hello2.yml', endpoint='api_bp.hello2')
def get(self, user=''):
name = user or 'stranger'
resp = {'message': 'Hello %s!' % name}
return resp
api.add_resource(Hello, '/hello', endpoint='hello1')
api.add_resource(Hello, '/hello/<string:user>', endpoint='hello2')
app.register_blueprint(api_blueprint)
swagger = Swagger(app)
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
小智 0
swag_from 函数解析文件路径时出现一些错误。您可以先使用文档字符串在 get() 中定义 api。flasgger 会像 get、post 一样解析 MethodView() 方法。
| 归档时间: |
|
| 查看次数: |
5012 次 |
| 最近记录: |