标签: flask-restx

ImportError:无法从“werkzeug.routing”导入名称“parse_rule”

在另一个系统上运行 Flask 项目后,我收到以下消息。该应用程序一直运行没有问题:

Error: While importing 'app', an ImportError was raised:

Traceback (most recent call last):
  File "c:\users\User\appdata\local\programs\python\python39\lib\site-packages\flask\cli.py", line 214, in locate_app
    __import__(module_name)
  File "C:\Users\User\Desktop\Projekt\app\__init__.py", line 3, in <module>
    from flask_restx import Namespace, Api
  File "c:\users\User\appdata\local\programs\python\python39\lib\site-packages\flask_restx\__init__.py", line 5, in <module>
  File "c:\users\User\appdata\local\programs\python\python39\lib\site-packages\flask_restx\api.py", line 50, in <module>
    from .swagger import Swagger
  File "c:\users\User\appdata\local\programs\python\python39\lib\site-packages\flask_restx\swagger.py", line 18, in <module>
    from werkzeug.routing import parse_rule
ImportError: cannot import name 'parse_rule' from 'werkzeug.routing' (c:\users\User\appdata\local\programs\python\python39\lib\site-packages\werkzeug\routing\__i
nit__.py)
Run Code Online (Sandbox Code Playgroud)

我的要求.txt

Flask~=2.1.2
psycopg2-binary==2.9.3
Flask-SQLAlchemy==2.5.1
flask-restx==0.5.1
qrcode~=7.3.1
PyPDF2==2.6.0
reportlab~=3.6.10
WTForms~=3.0.1
flask-bootstrap==3.3.7.1
flask-wtf==1.0.1
Run Code Online (Sandbox Code Playgroud)

python werkzeug flask flask-restx

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

类型错误:__init__() 得到意外的关键字参数“unbound_message”

当我尝试从 导入字段时出现上述错误flask_restx

from flask_restx import fields
Run Code Online (Sandbox Code Playgroud)

问题是什么。它可以在我的本地计算机上运行,​​但不能在远程计算机上运行。

完整的错误跟踪:

  File "/root/.clearml/venvs-builds/3.8/lib/python3.8/site-packages/clearml/binding/import_bind.py", line 54, in __patched_import3
    mod = builtins.__org_import__(
  File "/root/.clearml/venvs-builds/3.8/lib/python3.8/site-packages/flask_restx/__init__.py", line 4, in <module>
    from . import fields, reqparse, apidoc, inputs, cors
  File "/root/.clearml/venvs-builds/3.8/lib/python3.8/site-packages/clearml/binding/import_bind.py", line 54, in __patched_import3
    mod = builtins.__org_import__(
  File "/root/.clearml/venvs-builds/3.8/lib/python3.8/site-packages/flask_restx/fields.py", line 16, in <module>
    from flask import url_for, request
  File "/root/.clearml/venvs-builds/3.8/lib/python3.8/site-packages/clearml/binding/import_bind.py", line 54, in __patched_import3
    mod = builtins.__org_import__(
  File "/root/.clearml/venvs-builds/3.8/lib/python3.8/site-packages/flask/__init__.py", line 4, in <module>
    from . import json as json
  File "/root/.clearml/venvs-builds/3.8/lib/python3.8/site-packages/clearml/binding/import_bind.py", line 54, in __patched_import3 …
Run Code Online (Sandbox Code Playgroud)

python flask flask-restx

12
推荐指数
1
解决办法
4万
查看次数

如何在 Flask-restx Swagger UI 中自动使用 Marshmallow Schema

我正在尝试使用flask-restx 和marshmallow 创建一个安静的网络服务。

我使用棉花糖进行请求和响应验证。

由于 Flask-restx api 文档不支持 swagger ui 中的棉花糖模式,我想使用 doc 装饰器添加它。

控制器代码:

@ns.route('/')
class Test(Resource):
    @ns.doc(params={'test': 'test'})
    def get(self):
        _input_schema = MySchema()
        errors = _input_schema.validate(request.args)
        if errors:
            return Response(str(errors), status=400)
        other_things()
Run Code Online (Sandbox Code Playgroud)

架构代码:

class MySchema(Schema):
    title = fields.Str()
    id = fields.Integer()
    slug = fields.Str()
Run Code Online (Sandbox Code Playgroud)

我正在尝试自动将参数从 schema 添加到 api 文档,如下所示

@ns.doc(params=MySchema.ReturnAFieldDict())
Run Code Online (Sandbox Code Playgroud)

它会给出类似的东西

@ns.doc(params={"title":"A string", "id": "Int value with min and max", "slug":"A str"})
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点吗?

flask swagger-ui marshmallow flask-restx

10
推荐指数
1
解决办法
4481
查看次数

如何在 Flask Restx 中建模 OneOf?

我有以下架构文档

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "foo",
    "definitions": {
        "stuff": {
            "type": "object",
            "properties": {
                "id": {
                    "description": "the id",
                    "type": "string"
                },
                "type": {
                    "description": "the type",
                    "type": "string"
                }
            },
            "oneOf": [{
                "required": ["id"]
            }, {
                "required": ["type"]
            }],
        },
    },
    "type": "object",
    "properties": {
        "bar": {
            "description": "blah",
            "type": "object",
            "additionalProperties": {
                "$ref": "#/definitions/stuff"
            }
        }
    },
    "required": ["bar"]
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建 Flask Restx 模型,但我不确定如何对所需的 OneOf 字段进行建模?

我认为以下内容可行,但它忽略了 oneof 要求。

stuff_model = (
    "Stuff Model",
    "id": fields.String(description="the id", required=False), …
Run Code Online (Sandbox Code Playgroud)

python flask-restx

9
推荐指数
0
解决办法
682
查看次数

有没有办法在flask_restx中编组不同的响应代码?

和:

@api.marshal_with(response_model, code=200)
Run Code Online (Sandbox Code Playgroud)

response_model我们可以使用预定义的响应模型和状态代码来编组响应。

我的问题是,假设我们对请求运行验证,并且希望抛出 400 错误。

是否可以使用不同的模型和不同的代码来编组相同的方法:

@api.marshal_with(response_model_2, code=400)
Run Code Online (Sandbox Code Playgroud)

flask flask-restx

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

将 auth 装饰器添加到烧瓶 restx

我有一个使用flask-restx和的 Flask 应用程序flask-login。我希望默认情况下所有路由都需要登录,并明确定义不需要身份验证的公共路由。我已经按照这个问题中给出的例子开始使用装饰器:

使 Flask-Login 的 login_required 成为默认值的最佳方法

它适用于函数端点,但不适用于restx资源端点。

我尝试将函数添加为装饰器,并使用该method_decorators字段。例如:

def public_route(decorated_function):
    """
    This is a decorator to specify public endpoints in our flask routes
    :param decorated_function:
    :return:
    """
    decorated_function.is_public = True
    return decorated_function


class HelloWorld(ConfigurableResource):

    method_decorators = {"get": [public_route]}

    @public_route
    @api.doc('Welcome message')
    def get(self):
        return {'hello': 'world'}
Run Code Online (Sandbox Code Playgroud)

这个测试通过了:

def test_hello_world_is_public():
    api = Namespace('health', description='Health related operations')
    hello = HelloWorld(api, config=None, logger=None)
    is_public_endpoint = getattr(hello.get, 'is_public', False)
    assert is_public_endpoint
Run Code Online (Sandbox Code Playgroud)

我的挑战是我看不到如何在我的身份验证逻辑中访问这个属性:


    @app.before_request
    def …
Run Code Online (Sandbox Code Playgroud)

python flask flask-restplus flask-restx

5
推荐指数
1
解决办法
1619
查看次数

Flask-RESTful 和 Flask-RESTx 之间的区别

Flask-RESTful 和 Flask-RESTx 有什么区别?使用 Flask-RESTx 比 Flask-RESTful 更有优势吗?

flask flask-restful flask-restx

4
推荐指数
1
解决办法
3080
查看次数

使用 Flask-RestX 制作 RESTful API 时遇到问题:“规范中没有定义操作!” 和“404”

总之,我一直在遵循 Flask Restx 教程来制作 API,但是我的端点都没有出现在 swagger 页面上(“规范中没有定义操作!”),每当我调用它们时,我都会得到 404

我主要按照这个https://flask-restx.readthedocs.io/en/latest/scaling.html创建了我的 api

我使用 python 3.8.3 作为参考。

我正在做的事情的简化示例如下。

简而言之,我的问题是,我错过了什么?目前对于为什么这行不通还一无所知。

目录结构

project/
  - __init__.py
  - views/
    - __init__.py
    - test.py
manage.py
requirements.txt
Run Code Online (Sandbox Code Playgroud)

文件内容

要求.txt

Flask-RESTX==0.2.0
Flask-Script==2.0.6
Run Code Online (Sandbox Code Playgroud)

管理.py

from flask_script import Manager

from project import app


manager = Manager(app)


if __name__ == '__main__':
    manager.run()
Run Code Online (Sandbox Code Playgroud)

项目/初始化.py

from flask import Flask

from project.views import api


app = Flask(__name__)

api.init_app(app)
Run Code Online (Sandbox Code Playgroud)

项目/视图/ init .py

from flask_restx import Api, Namespace, fields


api = Api(
    title='TEST API',
    version='1.0', …
Run Code Online (Sandbox Code Playgroud)

python python-3.x flask-restx

3
推荐指数
1
解决办法
4872
查看次数