フラスコレストフルを使用するフラスコバックエンドアプリケーションを作成しています。 swagger.ioのオンラインエディターを使用してswagger.yamlを作成し、swaggerUIの接続ベースのサーバー実装をエクスポートしました。 そのコードを既存のアプリケーションの上にマージし、その後、アプリケーションを実行しようとしました。
サーバーを起動でき、 localhost:5000 / v1 / uiがSwaggerUIをレンダリングできるはずです。
フラスコレストフルで接続フラスコインスタンスを使用しようとしているときに、コードがコンパイルされて失敗しません。
以下はスタックトレースです。
トレースバック(最後の最後の呼び出し):
ファイル「app.py」、17行目、
api = Api(webapp)
ファイル "C:\ stuff \ Git \ Museum_link_curation \ flask-backend \ lib \ site-packages \ flask_restful__init __。py"、96行目、 init
self.init_app(app)
ファイル "C:\ stuff \ Git \ Museum_link_curation \ flask-backend \ lib \ site-packages \ flask_restful__init __。py"、118行目、init_app
self._init_app(app)
ファイル "C:\ stuff \ Git \ Museum_link_curation \ flask-backend \ lib \ site-packages \ flask_restful__init__。py"、行195、_init_app
app.handle_exception = partial(self.error_router、app.handle_exception)
AttributeError: 'App'オブジェクトに属性がありません 'handle_exception'
以下は、接続をマージするために変更したコードです。
#webapp = Flask(__name__) # commented
webapp = connexion.App(__name__, specification_dir='swagger/') # newly added
webapp.add_api('swagger.yaml') #newly added
api = Api(webapp) #existing
...
if __name__ == '__main__': #existing
webapp.run(debug=True) #existing
フラスコインスタンスの代わりに、接続アプリインスタンスを使用してflask-restfulを初期化します。
Windows10マシンで実行しています。 主にPython2で、 http: //stackoverflow.com/questions/36416679/error-generate-swagger-server-python-flask-from-swagger-editorからハックが言及されてい
コマンドの出力:
python --version
pip show connexion | grep "^Version\:"
名前:connexion
バージョン:1.0.91
要約:Connexion-OpenAPI / SwaggerとFlaskを備えたAPIファーストアプリケーション
ホームページ: https :
作成者:Zalando SE
作成者-メール:不明
インストーラー:pip
ライセンス:Apacheライセンスバージョン2.0
場所:c:\ stuff \ git \ Museum_link_curation \ flask-backend \ lib \ site-packages
必要なもの:requests、swagger-spec-validator、 six、strict-rfc3339、PyYAML、flask、pathlib、jsonschema
分類子:
プログラミング言語:: Python
プログラミング言語:: Python :: 2.7
プログラミング言語:: Python :: 3.4
プログラミング言語:: Python :: 3.5
開発状況:: 5-本番/安定版
対象読者::開発者
オペレーティングシステム:: OSに依存しない
トピック::インターネット:: WWW / HTTP :: WSGI ::アプリケーション
'トピック::ソフトウェア開発::ライブラリ:: Appli カチオンフレームワーク '`同様の問題が発生しました。その理由は、 connexion.App
がFlask
直接スワップではないためです。 ただし、connexionはFlaskインスタンスをapp
変数にカプセル化します
元のコードが次の場合:
webapp = Flask(__name__)
api = Api(webapp)
その場合、接続に相当するものは次のとおりです。
connexion_app = connexion.App(__name__)
connexion_app.add_api('swagger.yaml')
webapp = connexion_app.app
connexionが自動的に行うため、 API
インスタンスを作成する必要はありません。
免責事項:これは予期しない副作用につながる可能性がありますが、まだ発見されていませんが、これまでのところ私にとってはうまくいきます。
@ thirty3あなたは正しいです。
@ mit2nilそれで問題が解決するかどうか、お知らせください。
@rafaelcaricioと@ thirty3に感謝します。 はい、これで問題は解決しました。
私も同じ問題を見つけました、これを修正するのを手伝ってくれませんか。 私はすでに上記の方法を試しました。
最も参考になるコメント
同様の問題が発生しました。その理由は、
connexion.App
がFlask
直接スワップではないためです。 ただし、connexionはFlaskインスタンスをapp
変数にカプセル化します元のコードが次の場合:
その場合、接続に相当するものは次のとおりです。
connexionが自動的に行うため、
API
インスタンスを作成する必要はありません。免責事項:これは予期しない副作用につながる可能性がありますが、まだ発見されていませんが、これまでのところ私にとってはうまくいきます。