簡體   English   中英

移動Flask-Restplus Swagger API文檔

[英]Move Flask-Restplus Swagger API Docs

我正在嘗試使用flask-restplus在python中構建一個restful API。 我希望將swagger文檔放在與普通“/”不同的地方。

我在這里遵循文檔並按照說明進行操作。 我正在使用python2.7.3並具有以下代碼~/dev/test/app.py

from flask import Flask
from flask.ext.restplus import Api, apidoc

app = Flask(__name__)
api = Api(app, ui=False)

@api.route('/doc/', endpoint='doc')
def swagger_ui():
    return apidoc.ui_for(api)

app.register_blueprint(apidoc.apidoc)

當我嘗試運行這個python app.py我得到:

Traceback (most recent call last):
  File "app.py", line 7 in <module>
    @api.route('/doc/', endpoint='doc')
  File "/home/logan/.virtualenvs/test/lib/python2.7/site-packages/flask_restplus/api.py", line 191, in wrapper
    self.add_resources(cls, *urls, **kwargs)
  File "/home/logan/.virtualenvs/test/lib/python2.7/site-packages/flask_restplus/api.py", line 175, in add_resource
    super(Api, self).add_resource(resource, *urls, **kwargs)
  File "/home/logan/.virtualenvs/test/lib/python2.7/site-packages/flask_restful/__init__.py", line 396, in add_resource
    self._register_view(self.app, resource, *urls, **kwargs)
  File "/home/logan/.virtualenvs/test/lib/python2.7/site-packages/flask_restful/__init__.py", line 435, in _register_view
    resource_func = self.output(resource.as_view(endpoint, *resource_class_args,
AttributeError: 'function' object has no attribute 'as_view'

我不確定到底出了什么問題,我想我明白我沒有從Resource中繼承as_view通常來自的地方,但文檔似乎表明這應該有效。

任何幫助都會得到幫助。

使用Flask-Restplus <= 0.8.0,你應該寫:

from flask import Flask
from flask.ext.restplus import Api, apidoc

app = Flask(__name__)
api = Api(app, ui=False)

@app.route('/doc/', endpoint='doc')
def swagger_ui():
    return apidoc.ui_for(api)

注意使用@app而不是@api

從v0.8.1(即將發布)開始,你只需要寫:

from flask import Flask
from flask.ext.restplus import Api, apidoc

app = Flask(__name__)
api = Api(app, doc='/doc/')

請參閱: http//flask-restplus.readthedocs.org/en/latest/swagger.html#swagger-ui

在最近自己掙扎之后,我對這種方法很幸運:

from flask import Flask, Blueprint
from flask.ext.restplus import Api, apidoc

app = Flask(__name__)

blueprint = Blueprint('api', __name__)
api = Api(blueprint, ui=False)

@blueprint.route('/doc/', endpoint='doc')
def swagger_ui():
   return apidoc.ui_for(api)

app.register_blueprint(blueprint)

看起來@api需要資源,所以我修改了一些代碼來解決錯誤。 以下內容僅適用於/ doc /,而不是默認的根級別。

from flask import Flask, make_response
from flask.ext.restplus import Api, apidoc, Resource

app = Flask(__name__)
api = Api(app, ui=False)

@api.route('/doc/', endpoint='doc', doc=False)
class ApiDoc(Resource):
    def get(self):
        return make_response(apidoc.ui_for(api))

app.register_blueprint(apidoc.apidoc)

if __name__ == '__main__':
    app.run(debug=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM