2017-01-12 2 views
3

Ich füge Swagger UI zu meiner Python Flask-Anwendung mit Flasgger hinzu. Die häufigsten Beispiele im Internet sind für die Grund Flask Stil mit @app.route:Wie verwende ich Flasgger mit Flask-Anwendungen mit Blueprints?

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}) 

, das funktioniert.

In meiner Anwendung verwende ich nicht @app.route Dekoratoren, um die Endpunkte zu definieren. Ich benutze Flasch Blueprints. Wie folgt vor:

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']) 
.... 

Wie oben gesehen, habe ich @swag_from Dekorateur auf der TestResourceClass.get() Methode, die auf den GET-Methode Endpunkt gebunden ist. Ich habe auch den Endpunkt = test, der in den zwei Plätzen zusammenpaßt.

Aber ich bekomme nichts auf der Swagger UI, es ist alles leer. Die docs_test_get.yml-Datei enthält das gültige Yaml-Markup, um die Swagger-Spezifikation zu definieren.

Was fehlt mir? Wie kann ich Flasgger Swagger UI mit Flask Blueprint-basierten Einstellungen arbeiten lassen?

+0

Ich weiß, das hilft nicht wirklich mit Ihrer Frage, aber hier geht nur für den Fall. Ich benutze flassger nicht, ich benutze flask-swagger: https://github.com/gangverk/flask-swagger Ich habe eine Pull-Anfrage erstellt, die speziell auf dieses Problem eingeht: https://github.com/gangverk/flask- swagger/pull/34 Ich kann Ihnen nur sagen, dass Flaschendruck jetzt Blaupausen unterstützt – AArias

+0

Danke, ich werde es mir ansehen. Ich habe nach Alternativen gesucht und https://github.com/rantav/flask-restful-swagger gefunden, die Flask-Apps mit BluePrints und Resources für die API-Definition besser zu unterstützen scheinen. –

Antwort

0

swag_from Funktion haben einige Fehler, Dateipfad zu analysieren.Sie können Doc-Zeichenfolge verwenden, um API in get() zuerst zu definieren. Flasgger wird MethodView() Methode wie Get, Post zu analysieren.

+0

Ich habe getestet, dass der Dateipfad in swag_from kein Problem ist, wenn er in Nicht-Blueprint-Stil-API-Definitionen verwendet wird. –

2

Jetzt gibt es ein Beispiel für Entwurf app in 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) 
+0

@BaummitAugen fertig! –