簡體   English   中英

如何在 flask_restx 中為嵌套的 json 指定架構?

[英]How to specify schema for nested json in flask_restx?

我將 flask_restx 用於 swagger API。 版本如下:

python - 3.8.0
flask  - 2.0.2
flask_restx - 0.5.1

以下是我需要指定架構的嵌套 json:

dr_status_fields = app_api.model('DR Status',{
    fields.String: {
        "elasticsearch": {
            "backup_status": fields.String,
            "backup_folder": fields.String,
        },
        "mongodb": {
            "backup_status": fields.String,
            "backup_folder": fields.String,
        },
        "postgresdb": {
            "backup_status": fields.String,
            "backup_folder": fields.String,
        },
        "overall_backup_status": fields.String
    }
})

但是當我在瀏覽器中加載 swagger URL 時,我在命令行中出現錯誤:

Unable to render schema
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/flask_restx/api.py", line 571, in __schema__
    self._schema = Swagger(self).as_dict()
  File "/usr/local/lib/python3.8/site-packages/flask_restx/swagger.py", line 268, in as_dict
    "definitions": self.serialize_definitions() or None,
  File "/usr/local/lib/python3.8/site-packages/flask_restx/swagger.py", line 623, in serialize_definitions
    return dict(
  File "/usr/local/lib/python3.8/site-packages/flask_restx/swagger.py", line 624, in <genexpr>
    (name, model.__schema__)
  File "/usr/local/lib/python3.8/site-packages/flask_restx/model.py", line 76, in __schema__
    schema = self._schema
  File "/usr/local/lib/python3.8/site-packages/flask_restx/model.py", line 159, in _schema
    properties[name] = field.__schema__
AttributeError: 'dict' object has no attribute '__schema__'

我已嘗試檢查flask_restx的文檔以獲取任何示例示例用法。 但找不到任何。 請幫助解決相同的問題

更新

根據rmn答案,我嘗試應用相同的方法。 但這里的問題是有一個關鍵,即在上面定義的方案的第 2 行 -> fields.String: { 我認為這是造成問題的原因。 我嘗試按如下方式使用它:

dr_status_fields = app_api.model('Backup and restore related fields', {
            "backup_status": fields.String,
            "backup_folder": fields.String,
})

dr_db_fields = app_api.model('DR Status', {
    "elasticsearch": fields.Nested(dr_status_fields),
    "mongodb": fields.Nested(dr_status_fields),
    "postgresdb": fields.Nested(dr_status_fields),
    "overall_backup_status": fields.String
})

dr_timestamp_field = app_api.model('Timestamp', {
    fields.String: fields.Nested(dr_db_fields)
})

這里dr_timestamp_field導致了同樣的問題。

使用字段。 嵌套

backup_fields = api.model('Backup fields', {
    "backup_status": fields.String,
    "backup_folder": fields.String
})

dr_status_fields = api.model('DR Status', {
    "elasticsearch": fields.Nested(backup_fields),
    "mongodb": fields.Nested(backup_fields),
    "postgresdb": fields.Nested(backup_fields),
    "overall_backup_status": fields.String
})

在某些情況下,您的值是字符串列表:

"titles": fields.List(fields.String, description="Study books"),

但是如果你有一個 dict 作為一個值,那么使用fields.Nested作為參數:

"users": fields.List(fields.Nested(your_model), description="Authors"),

此外, your_model也可以像上面那樣嵌套值。

暫無
暫無

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

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