标签: flask-restplus

Flask-Restplus:如何对字符串或对象建模?

在 Flask-Restplus 中,我需要建模一个属性值,它可能一个字符串列表或一个对象列表。

也就是说它看起来像这样:

{
    'my_attribute': [
         'value1',
          'value2'
     ]
}
Run Code Online (Sandbox Code Playgroud)

或者它可以如下所示:

{
    'my_attribute': [
        {
             'name': 'value1',
              'foo': 'something'
         },
         {
              'name': 'value2',
               'foo': 'something else'
          }
     ]
}
Run Code Online (Sandbox Code Playgroud)

我应该如何在 Flask-Restplus' 中建模api.model

python flask flask-restplus

7
推荐指数
1
解决办法
2368
查看次数

如何在每个函数调用中使用带有Flask-RESTPlus的装饰器?

我有问题将装饰器应用到我的Resource.该Api decorators参数被应用到每个资源功能或怎么做我已经明白了decorators参数?我的装饰器仅在启动时应用,而不是在每个函数调用时应用.我究竟做错了什么?

from flask import Flask, Blueprint
from flask.ext.restplus import Api, Resource, fields

app = Flask(__name__)

def my_decorator(input):
    print("my decorator")
    return input

api_blueprint = Blueprint('index', __name__, url_prefix='/0')

api = Api(api_blueprint, version='0.1.0', title='Index API',
    description='The Index API helps to find things faster in the own database',
    # ui=False,
    decorators=[my_decorator]
)

app.register_blueprint(api_blueprint)

ns = api.namespace('index', description='Index API')


search_id_score_model = api.model('id', {
    'id': fields.String(required=True),
    'score': fields.Float(required=True)
})

search_result_model = api.model('result', {
    'key': fields.String(required=True),
    'ids': fields.List(fields.Nested(search_id_score_model, required=True), required=True) …
Run Code Online (Sandbox Code Playgroud)

python python-decorators flask-restplus

6
推荐指数
1
解决办法
3594
查看次数

编组字典,带有可变键,烧瓶中的restful/plus

我正在使用flask-restful构建API.我也使用flask-resfulplus来生成swagger文档.我想返回一个项目字典,其中密钥将根据项目而变化.我的模型看起来像这样:

item = api.model('Item',{
            'item':fields.Integer()}) <- This is wrong


ItemModel = api.model('ItemsList', {
        '_header': fields.Nested(_header),
        'items':fields.Nested(item)
})
Run Code Online (Sandbox Code Playgroud)

请注意,我尝试了一些变体,但似乎没有任何作用; 这只是最新的互动.

我正在寻找的回应是这样的.

{
        '_header':{} <-This works fine
        'items': {
         'item1':5,
         'item2':2
         }
    }
Run Code Online (Sandbox Code Playgroud)

项目字典中的项目将具有项目的不同键和计数作为值.

我已经尝试将item字段设置为field.Raw()并且它工作正常,但它没有显示在swagger文档中.

请注意,我不想返回我正在使用的字典列表.

谢谢

marshalling flask flask-restful flask-restplus

6
推荐指数
1
解决办法
1437
查看次数

使用烧瓶限制器的速率限制端点

我知道并喜欢flask-limiter旧项目。现在我想在我flask-restplus的项目中使用它。

我的最终解决方案将使我能够在每个方法级别上进行速率限制。因此,不同的费率适用于帖子而不是 get 方法。但是,如果我可以定义每个资源(甚至每个命名空间)级别的限制,我已经很高兴了。重要的是每个资源都需要自己的速率限制。

我的第一次尝试是使用@limiter.limit("1 per Minute"). 但这完全被忽略了。

接下来尝试在名称空间本身上使用它:

ns = api.namespace('something',
    description='Operations related to maps and positions on a map',
    decorators = [limiter.limit("1 Per Minute")]
)
Run Code Online (Sandbox Code Playgroud)

好吧,也不起作用。但

ns = api.namespace('something',
    description='Operations related to maps and positions on a map',
    decorators = [limiter.limit]
)
Run Code Online (Sandbox Code Playgroud)

做这件事。但是留下一个问题:我只能为每个应用定义一个限制器。所以我只能对我的所有命名空间应用一个限制规则。

关于如何flask-restplus接受传递给限制器装饰器的参数的任何想法?

或者有没有更好的方法来管理我没有看到的flask-resplus中的速率限制?

flask-restplus

6
推荐指数
0
解决办法
749
查看次数

使用 Flask-RestPlus 下载 excel?

如何使用 Flask-RestPlus 实现 API 端点来下载 Excel 文件?

以前我使用 Pyramid 实现了类似的功能。然而,这种方法在这里不起作用。这是旧的代码片段:

workBook = openpyxl.Workbook()
fileName = 'Report.xls'
response = Response(content_type='application/vnd.ms-excel',
                            content_disposition='attachment; filename=%s' % fileName)
workBook.save(response)
return response
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助。

python download flask-restplus

6
推荐指数
1
解决办法
901
查看次数

使用带有flask和flask-restplus的Google App Engine时出现404错误

我的根文件夹中的main.py文件如下所示.

app = Flask(__name__)

def configure_app(app):
    app.config['SERVER_NAME'] = settings.FLASK_SERVER_NAME
    app.config['SWAGGER_UI_DOC_EXPANSION'] = settings.RESTPLUS_SWAGGER_UI_DOC_EXPANSION
    app.config['RESTPLUS_VALIDATE'] = settings.RESTPLUS_VALIDATE
    app.config['RESTPLUS_MASK_SWAGGER'] = settings.RESTPLUS_MASK_SWAGGER
    app.config['ERROR_404_HELP'] = settings.RESTPLUS_ERROR_404_HELP

def initialize_app(app):
    configure_app(app)
    blueprint = Blueprint('api', __name__, url_prefix='/api')
    api.init_app(blueprint)
    api.namespaces.pop(0) #this is to remove default namespace from swagger doc
    api.add_namespace(user_namespace)
    app.register_blueprint(blueprint)

def main():
    initialize_app(app)
    app.run(debug=settings.FLASK_DEBUG)


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

我的app.yaml文件如下所示.

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10
Run Code Online (Sandbox Code Playgroud)

以下是requirements.txt …

python google-app-engine flask-restplus

6
推荐指数
1
解决办法
390
查看次数

Swagger 使用 Flask-Restplus、API 和多个蓝图

我正在使用 Flask 和 Flask-Restplus 构建一个非常复杂的微服务。
它将有许多端点,因此我将每个端点组织成一个单独的蓝图。

  • 目前,我正在努力使用多个蓝图与 swagger 结合使用Flask-Restplus 和 API
  • 我希望能够将我的蓝图的所有端点放入 API 的内置招摇中,但这似乎不起作用。
  • 我可以通过邮递员访问我的端点,但 swagger-UI 没有显示任何内容。:(

下面的示例代码和目录结构应该会给你一个我的想法的提示:

.
??? endpoints
?   ??? endpointa.py
?   ??? endpointb.py
?   ??? endpointc.py
?   ??? __init__.py
??? __init__.py
??? run.py
Run Code Online (Sandbox Code Playgroud)

我的主要init .py 看起来像这样:

from flask import Flask, Blueprint, logging, jsonify, request, Response
from flask_restplus import Resource, Api   


# create app and api
app = Flask(__name__)
api_prefix  = '/api/v1/'

# register Blueprints
from endpoints.endpointa import endpointa_api
app.register_blueprint(endpointa_api, url_prefix=api_prefix)

from …
Run Code Online (Sandbox Code Playgroud)

python flask swagger flask-restplus

6
推荐指数
1
解决办法
6861
查看次数

如何使用flask restplus验证POST有效负载中的日期类型?

考虑以下:

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

app = Flask(__name__)
api = Api(app)
ns = api.namespace('ns')

payload = api.model('Payload', {
    'a_str': fields.String(required=True),
    'a_date': fields.Date(required=True)
})

@ns.route('/')
class AResource(Resource):

    @ns.expect(payload)
    def post(self):
        pass
Run Code Online (Sandbox Code Playgroud)

如果我发布,{"a_str": 0, "a_date": "2000-01-01"}我会按预期得到 400,因为a_str不是字符串。但是,当我 POST 时,我{"a_str": "str", "a_date": "asd"}没有得到 400。在这里我也想得到 400,因为“asd”不是常见的日期格式。

我查看了Date文档,发现有format一个parse方法可以检查字符串是否采用通用日期格式。但是,这里似乎没有调用它们。

有没有另一种方法可以做到这一点?目前我正在手动验证日期格式,但似乎 fask restplus 应该能够为我完成。

python post payload flask flask-restplus

6
推荐指数
1
解决办法
5336
查看次数

如何使用 Flask-RESTPlus 发布多个文件?

我希望能够发布一组文件。action="append"我让它可以使用单个文件,但在添加到解析器时它不起作用。添加时action,swagger UI 允许我上传多个文件,但在打印files变量时None,即使我选择了多个文件也是如此。如何使用 Flask-RESTPlus POST 一组文件?

    from flask_restplus import Namespace, Resource, reqparse
    from werkzeug.datastructures import FileStorage

    file_upload = Namespace(name="files")
    upload_parser = reqparse.RequestParser(bundle_errors=True)
    upload_parser.add_argument(
        name="files",
        type=FileStorage,
        location="files",
        action="append" # If this is removed it works with 1 file
    )

    @files_upload.route("/")
    class Files(Resource):
        @files_upload.expect(upload_parser)
        def post(self):
            args = upload_parser.parser_args()
            files = args["files"]
            do_something(files)
            return ""
Run Code Online (Sandbox Code Playgroud)

python file-upload flask flask-restplus

6
推荐指数
2
解决办法
2775
查看次数

Flask-restplus fields.Nested() 与原始 Dict (不是模型)

剧透警报:我发布了我的解决方案作为此问题的答案

我正在使用flastk-resptlus创建 API。我必须提供特定结构的数据,但我无法获取该数据,请参阅下面的示例:

我需要得到的是这个结构:

{
    "metadata": {
        "files": [] 
    },
    "result" : {
        "data": [
                {
                 "user_id": 1,
                  "user_name": "user_1",
                  "user_role": "editor"
                },
                {
                  "user_id": 2
                  "user_name": "user_2",
                  "user_role": "editor"
                },
                {
                  "user_id": 3,
                  "user_name": "user_3",
                  "user_role": "curator"
                }
            ]
    }
}
Run Code Online (Sandbox Code Playgroud)

"result" : { "data": []}但问题来了,如果不让“数据”本身成为模型,我就无法获得结构。

到目前为止我尝试做的事情(但没有成功)

# define metadata model
metadata_model = api.model('MetadataModel', {
          "files": fields.List(fields.String(required=False, description='')),
}
# define user model 
user_model = api.model('UserModel', {
          "user_id": fields.Integer(required=True, description=''),
          "user_name": fields.String(required=True, description=''),
          "user_role": fields.String(required=False, description='') …
Run Code Online (Sandbox Code Playgroud)

python model flask flask-restplus

6
推荐指数
2
解决办法
2万
查看次数