3

我正在尝试使用 Flask-Restplus 制作一个 api 并大摇大摆地记录它。

这是我到目前为止所拥有的,它工作正常,除了我不知道如何添加根路由。

from flask import Flask, Blueprint
from flask_restplus import Api, Resource, apidoc

app = Flask('__name__')
blueprint = Blueprint('v1', __name__, url_prefix='/rest/v1')
api = Api(blueprint, ui=False, version='1.0')

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

@blueprint.route('/', endpoint='rootres')
  def root():
     return ''

app.register_blueprint(blueprint)


ns = api.namespace('test', description='desc')

@ns.route('/', endpoint='rootresource')
class RootResource(Resource)
   def get(self):
       ...

虽然 /rest/v1/test 工作正常,但 /rest/v1 给了我找不到页面。

如果我这样修改:

@blueprint.route('/aaa', endpoint='rootres')
   def root():
      return ''

然后 /rest/v1/aaa 工作。

问题:我怎样才能使 @blueprint.route('/') 工作?

4

2 回答 2

9

我发现了非常相似的问题。我想用自定义页面制作'/'路线,并在不同的路径上大摇大摆的文档。

我的第一次尝试(不工作)

from flask import Flask
from flask_restplus import Api

app = Flask(__name__)

api = Api(
    app= app,
    version='1.0',
    description='TEST API',
    doc='/docs/',
)

@app.route('/')
def hello():
    return "Hello on my page"

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

页面http://127.0.0.1:5000/返回 404 错误

工作示例

from flask import Flask
from flask_restplus import Api

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello on my page"

api = Api(
    app= app,
    version='1.0',
    description='TEST API',
    doc='/docs/',
    default='mapi',
    default_label='Super API'
)

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

测试:

  • Python 3.6.1
  • 烧瓶 (0.12.1)
  • 烧瓶休息加(0.10.1)
于 2017-06-27T12:49:41.807 回答
2

当你写ui=False你禁用/rest/v1/路径。

在下一个即将发布的版本(本周末的 0.8.1)中,您应该能够编写:

from flask import Flask, Blueprint
from flask_restplus import Api, Resource

app = Flask('__name__')
blueprint = Blueprint('v1', __name__, url_prefix='/rest/v1')
api = Api(blueprint, doc='/apidoc/', version='1.0')

@blueprint.route('/', endpoint='rootres')
def root():
    return ''

ns = api.namespace('test', description='desc')

@ns.route('/', endpoint='rootresource')
class RootResource(Resource)
    def get(self):
        ...

app.register_blueprint(blueprint)

不再需要为文档注册特定视图

对于 `blueprint.route('/'),​​我认为这也是 0.8.1 修复的。

注意:在命名空间导入/声明之后,稍后注册蓝图。

于 2015-10-14T21:13:22.020 回答