0

我正在尝试使用 Swagger 构建一个简单的 Flask 应用程序。到目前为止,经过一些教程,这就是我的main.py样子:

import logging
import os
import random

from flask_restx import Api, Resource, fields

from src import create_app

app = create_app(os.getenv('env'))
api = Api(app, version='1.0', title='Sample API',
          description='A sample API', doc='/api')

ns = api.namespace('userinfo', description='Python Microservice')
user = api.model('user', {
    'name': fields.String(required=True, description='Employee Name'),
    'role': fields.String(required=True, description='Employee Role'),
})

USERS = {'user_1000': dict(name="Elizabeth Lemon", role="Head"), 'user_1001': dict(name="Jack Donaghy", role="CEO"),
         'user_1003': dict(name="Kenneth Parcell", role="Page")}

resource_fields = api.model('Resource', {
    'name': fields.String,
    'role': fields.String
})


@ns.route('/')
@api.doc(responses={200: 'Success', 201: 'Created'})
class UserInfo(Resource):
    """View list of all users, POST to add new user"""

    def get(self):
        """List  all users"""
        return [{'id': u_id, 'user_info': user_info} for u_id, user_info in USERS.items()]

    @api.doc(body=resource_fields)
    def post(self):
        """Create a new user"""
        data = api.payload
        user_id = f"user_{random.randint(1004, 9999)}"
        USERS[user_id] = dict(name=data['name'], role=data['role'])
        logging.info(f"Created user {user_id} for {data['name']}")
        return dict(user_id=user_id), 201


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

create_app()函数定义__init__.py如下:

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config_by_name[config_name])
    setup_logging(app)
    return app

现在,当我前往时,localhost:5000/api我看到 GET/POST 文档正确加载了招摇页面。但是,当我点击时,localhost:5000我得到了一个URL not found错误 - 可以理解,因为我还没有定义/路线 - 这就是我卡住的地方!如何在我的 中定义/路线main.py?据我了解,当前提供的所有端点都是/userinfo/(GET、POST)和/api. 我想添加该/端点以方便检查应用程序是否已启动

我是使用 Python 中的 Flask 构建微服务的新手。集成 swagger 实际上改变了main.py之前没有 swagger 的 coz 的面貌,我所有的路线都被注释了,app.route('/')所以我可以有一个/端点。

4

1 回答 1

0

默认情况下,flask-restx 使用命名空间名称来构造 URL(/<name>前缀),但您可以通过path参数显式指定所有 URL 的前缀。就像是:

ROOT_NS = api.namespace(
    'section-name-that-will-be-displayed-at-swagger--fill-free-to-rename',
    path='/'
)
于 2021-09-07T20:18:26.817 回答