标签: flask-restful

在查询字符串 HTTP 请求中传递过滤器和排序参数并使用 Flask 进行解析

我正在使用 Flask 开发 REST api。我的端点之一应该支持过滤和排序。假设我有这些字段:类别、颜色、严重性。

假设我想获取类别为“a”或“b”且颜色为黑色的所有项目,并按严重的升序和颜色降序对其进行排序。

对于排序,我看到前面的“+”或“-”是设置顺序的一种方法。

1.解码过滤器表达式的最佳实践是什么?假设我想使用查询字符串方法在 get 请求中传递参数(或者最好的选择是使用 json-body 参数来满足此需要)

2. 在flask框架中解析它的最佳方法是什么?

my_ip/items?sort=+severity&sort=-color&filter=???

http query-string flask-restful

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

如何使用flask向路由发送多个参数?

我最近开始学习Flask框架,并编写了一个简短的程序来理解request/responseFlask中的循环。

我的问题是最后调用的方法calc不起作用。

我发送请求为:

http://127.0.0.1/math/calculate/7/6

我收到错误:

未找到:在服务器上未找到请求的 URL。如果您手动输入 URL,请检查拼写并重试。”

下面是我的烧瓶应用程序代码:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return "<h1>Hello, World!</h1>"

@app.route('/user/<name>')
def user(name):
    return '<h1>Hello, {0}!</h1>'.format(name)

@app.route('/math/calculate/<string:var1>/<int:var2>')
def calc(var1, var2):
    return  '<h1>Result: {0}!</h1>'.format(int(var1)+int(var2))

if __name__ == '__main__':
      app.run(host='0.0.0.0', port=80, debug=True)
Run Code Online (Sandbox Code Playgroud)

python rest restful-url flask flask-restful

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

类型错误:类型的对象不可 JSON 序列化

我是rest用 Flask写的flask-marshmallow

模型.py

class Application(db.Model):
    __tablename__ = 'applications'

    id = db.Column(db.String(), primary_key=True)
    name = db.Column(db.String())
    versions = db.relationship('Version', backref='application', lazy=True)

    def __repr__(self):
        return '<application {}>'.format(self.name)


class Version(db.Model):
    __tablename__ = 'versions'

    id = db.Column(db.String(), primary_key=True)
    file = db.Column(db.String(80), nullable=True)
    application_id = db.Column(db.Integer, db.ForeignKey('applications.id'))
Run Code Online (Sandbox Code Playgroud)

谢马斯.py

class ApplicationDetailSchema(ma.Schema):
    class Meta:
        fields = ('id', 'name', 'versions')
Run Code Online (Sandbox Code Playgroud)

路线.py

@bp.route("/<id>")
def application_detail(id):
    application = Application.query.get(id)
    result = application_detail_schema.dump(application)
    return jsonify(result)
Run Code Online (Sandbox Code Playgroud)

类型错误:“版本”类型的对象不可 JSON 序列化

serialization json flask flask-restful

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

如何在flask-restful中对Resource类内部的函数进行单元测试?

我对单元测试相当陌生,对 RESTful API 开发也比较陌生。我想知道如何对 Flask Restful 中的 Resource 类内的函数进行单元测试?我可以对端点的响应进行单元测试,但我不知道如何对端点控制器类内的各个函数进行测试。

下面是我的应用程序代码。它有3个文件,包括测试:

  • api.py
  • 控制器_foo.py
  • test_controller_foo.py
# api.py

from flask import Flask
from flask_restful import Api

from .controller_foo import ControllerFoo


def create_app(config=None):
    app = Flask(__name__)
    app.config['ENV'] ='development'
    return app

application = app = create_app()
api = Api(app)

api.add_resource(ControllerFoo, '/ctrl')

if __name__ == "__main__":
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
# controller_foo.py

from flask_restful import Resource
from flask import request

class ControllerFoo(Resource):
    """
    basically flask-restful's Resource method is a wrapper for flask's MethodView
    """
    def post(self):
        request_data = self.handle_request() …
Run Code Online (Sandbox Code Playgroud)

python flask flask-restful

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

使用flask-restful时返回text/html内容类型

在特定情况下,我想以text/html内容类型响应错误,如下所示:

class MyResource(Resource):
    def get(self):
        if some_condition:
            return 'bad argument', 400
Run Code Online (Sandbox Code Playgroud)

上面的代码返回一个application/json内容类型:'"bad argument"'
而不是一个text/html内容类型:'bad argument'

如何强制flask-restful 响应text/html内容类型?

python content-type httpresponse flask-restful

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

Flask API突然没有收到请求

我正在尝试在Flask中创建一个REST API。问题是它可以完美运行几天,然后突然完全停止接收请求。忘了不响应请求;它只是一开始没有收到任何请求。这是我的脚本:

from flask import Flask, jsonify
from flask_restful import Resource, Api
from flask_restful import reqparse
from sqlalchemy import create_engine
from flask.ext.httpauth import HTTPBasicAuth
from flask.ext.cors import CORS

conn_string = "mssql+pyodbc://x"
e = create_engine(conn_string)

auth = HTTPBasicAuth()

@auth.get_password
def get_password(username):
    if username == 'x':
        return 'x'
    return None

app = Flask(__name__)
cors = CORS(app)
api = Api(app)

class Report(Resource):
    decorators = [auth.login_required]

    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('start', type = str)
        parser.add_argument('end', type = str)
        args = parser.parse_args()

        conn = …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy azure flask flask-restful

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

Flask-Restful在非调试模式下接受Flask的异常处理

我在开发期间使用了Flask的异常处理(@app.errorhander(MyException)),即使对于来自Flask-Restful端点的异常也能正常工作.

然而,我注意到,切换到时debug=False,瓶的RESTful走的是完全例外处理过(与此propagate_exceptionsFalse太).我喜欢Flask-Restful为所有未处理的异常发送内部服务器错误,但遗憾的是,对于那些具有Flask异常处理程序的人(当这些异常来自Flask-Restful端点时)也会发生这种情况.

有没有办法告诉Flask-Restful只处理Flask错误处理程序无法处理的异常?如果没有,我可以将某些异常类型排除在Flask-Restful处理之外,那么它们会被Flask处理吗?

我的最后一个选择是覆盖Flask-Restful Api.handle_error并自己实现这个逻辑,但我想首先使用现有的API ...

python flask flask-restful

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

如何在元类中使用多重继承?

我正在尝试Flask-RESTFUL使用注册表模式注册我定义的所有资源.

from flask_restful import Resource

class ResourceRegistry(type):

    REGISTRY = {}

    def __new__(cls, name, bases, attrs):
        new_cls = type.__new__(cls, name, bases, attrs)
        cls.REGISTRY[new_cls.__name__] = new_cls
        return new_cls

    @classmethod
    def get_registry(cls):
        return dict(cls.REGISTRY)


class BaseRegistered(object):
    __metaclass__ = ResourceRegistry


class DefaultResource(BaseRegistered, Resource):

    @classmethod
    def get_resource_name(cls):
        s = re.sub('(.)([A-Z][a-z]+)', r'\1-\2', cls.__name__)
        return '/' + re.sub('([a-z0-9])([A-Z])', r'\1-\2', s).lower()
Run Code Online (Sandbox Code Playgroud)

当整个事情发布时,我得到以下内容:

TypeError: Error when calling the metaclass bases
metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of …
Run Code Online (Sandbox Code Playgroud)

python metaprogramming flask flask-restful

5
推荐指数
2
解决办法
2659
查看次数

烧瓶上的日期的json序列化restful

我有以下资源:

class Image(Resource):
    def get(self, db_name, col_name, image_id):
        col = mongo_client[db_name][col_name]
        image = col.find_one({'_id':ObjectId(image_id)})
        try:
            image['_id'] = str(image['_id'])
        except TypeError:
            return {'image': 'notFound'}
        return {'image':image}
Run Code Online (Sandbox Code Playgroud)

链接到某个端点。

但是,image其中包含某些datetime对象。我可以用`json.dumps(...,default = str)将其包装起来,但是我看到有一种在flask-restful上强制执行此方法的方法。对我来说还不清楚到底需要做什么。

我特别读到:

    It is possible to configure how the default Flask-RESTful JSON
    representation will format JSON by providing a RESTFUL_JSON
    attribute on the application configuration. 
    This setting is a dictionary with keys that 
     correspond to the keyword arguments of json.dumps().

class MyConfig(object):
    RESTFUL_JSON = {'separators': (', ', ': …
Run Code Online (Sandbox Code Playgroud)

flask flask-restful

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

回滚一个alembic合并

我检查了一个使用Alembic的现有Flask-Restful项目,当我运行迁移时,我不得不合并不同的alembic头.我无法弄清楚这是怎么发生的 - 我从桌面推出并直接拉到笔记本电脑上.

我确实设法解决了这个问题并继续正常进行.

后来,我推送到Git并将项目拉回到我的桌面计算机上.当我试图跑

python manage.py db upgrade
Run Code Online (Sandbox Code Playgroud)

我明白了:

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) column "logo" of relation "despatch_details" does not exist
[SQL: 'ALTER TABLE despatch_details DROP COLUMN logo']
Run Code Online (Sandbox Code Playgroud)

查看我桌面计算机上的数据库,我可以看到它超前于合并点.例如,合并后脚本尝试创建的某些表已经存在于我的桌面框上,并且alembic_version位于合并点和最新迁移之间.

我已经尝试过手动编辑脚本并一个接一个地修复一个错误,但它只是在深入挖掘我.

我是否需要在桌面计算机上回滚到合并点,然后运行新的

python manage.py db upgrade
Run Code Online (Sandbox Code Playgroud)

我不能破解它,因为我想要的最后一件事是当我推送到暂存(目前在合并点后面)时遇到同样的问题.

如果我在我的桌面计算机上回滚并且升级再次失败,我将在哪里站立?

python flask-sqlalchemy alembic flask-restful

5
推荐指数
0
解决办法
180
查看次数