标签: flask-restful

Python Flask:如何将请求添加到队列并在执行之前重新排列队列中的任务

一些上下文:

想要编写一个接受客户端门票的算法。根据某些约束对它们进行排序,处理它们,并将结果回复给客户端。

我做了一些研究,虽然 python 的 REST API 是一个好主意。但当我探索它时,我发现,它通常是为了一次处理一个请求而构建的。

有没有办法将任务(REST API 请求)添加到队列中,对它们进行排序并与工作人员一起执行它们,并在处理完成后回复客户端?

python message-queue redis flask flask-restful

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

[Python][Flask] PyLint 实例属性过多,该资源是否正确编写?

我正在使用 Flask 用 Python 编写一个应用程序,现在在为端点创建资源类期间,我收到 Pylint“实例属性过多”警告。现在我不再知道我正在做的是否是编写资源的“正确”方式。

我将依赖项注入到资源中,如下所示:

api.add_resource(TicketsQuery, '/tickets/query',
             '/ticket/query/<int:ticketID>',
             resource_class_kwargs={'cleaner': Cleaner(StrategyResponseTickets()),
                                    'machine_cleaner': Cleaner(StrategyResponseMachines()),
                                    'db': soap_caller,
                                    'cache': cache,
                                    'field_map': app.config['FIELD_FILTER_MAP']['TICKETS'],
                                    'endpoint_permission': TicketsQueryPermission
                                    })
Run Code Online (Sandbox Code Playgroud)

然后它作为 kwargs 参数显示在资源中。我还装饰了 init 内部的函数,因为我需要类中的变量(来进行装饰本身)。

class TicketsQuery(Resource):
def __init__(self, **kwargs):
    # Dependencies
    self.cleaner = kwargs['cleaner']
    self.machine_cleaner = kwargs['machine_cleaner']
    self.db = kwargs['db']
    self.cache = kwargs['cache']
    self.field_map = kwargs['field_map']
    self.endpoint_permission = kwargs['endpoint_permission']

    # Permissions of endpoint method calls, implemented using wrapper
    self.get = authorization_required(self.endpoint_permission, UserType.GENERIC_EMPLOYEE)(self.get)
    self.post = authorization_required(self.endpoint_permission, UserType.GENERIC_EMPLOYEE)(self.post)

def get(self, permission_set: TicketsPermissionSet, ticketID=-1):
Run Code Online (Sandbox Code Playgroud)

这是在 Flask 中编写资源的正确方法吗?或者有更好的结构可以遵循吗?任何见解或提示表示赞赏!

python pylint flask-restful

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

如何从 API 响应 Flask_restful 返回文件?

我有两个 API,其中一个基本上用于根据发送的数据生成 PDF。

下面是第一个 API 端点

http://localhost:5000/api/sendReceiptData
Run Code Online (Sandbox Code Playgroud)

以附件形式返回 PDF 文件。

第二个 API 将使用第一个 API,并应返回 PDF 作为响应中的附件。我已经尝试过,但出现此错误TypeError: Object of type bytes is not JSON serializable

因此,我如何从第二个 API 中的第一个 API 返回文件响应

flask flask-sqlalchemy flask-restful

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

为什么 Flask-RESTful 的 add_resource() 有一个用于 URL 的参数和另一个用于端点的参数?

我正在使用 Flask 和 Flask-RESTful 扩展开发一个 API。我正在创建端点和资源,但我对资源“url”及其“端点”之间的区别感到困惑。据我了解,URL 本身就是端点。我还阅读了StackOverflow 问题的答案,他们还建议 URL 是端点。

然而Flask-RESTful 文档提到该add_resource方法有一个 URL 参数,并且它还可以接收端点名称。他们甚至提供了这个例子:

api.add_resource(HelloWorld, '/', '/hello')
api.add_resource(Foo, '/foo', endpoint="foo")
api.add_resource(FooSpecial, '/special/foo', endpoint="foo")
Run Code Online (Sandbox Code Playgroud)

我明白他们在做什么,但我还是不明白端点名称的作用。

URL 和端点名称有什么区别?为什么我要设置端点名称?

python api-design endpoint flask flask-restful

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

Flask Restful - 使用 parser_args() 在 python 中向请求添加参数时出现状态 400

我正在尝试使用flask_restful 使用Python 创建API。我有以下代码:

from flask import Flask
from flask_restful import Resource, Api, reqparse

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

class Example(Resource):

    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('some_arg')
        args = parser.parse_args()
        return {"Param Entered": args['some_arg']}

api.add_resource(Example, '/')

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

在 Postman 中运行 GET 请求时:

GET <my_url>/?some_arg=<some_text>
Run Code Online (Sandbox Code Playgroud)

我收到错误:“message”:“浏览器(或代理)发送了该服务器无法理解的请求。”

有人可以解释一下为什么会出现这个错误,以及如何使用 parse_args() 为 Flask Restful 正确添加参数吗?谢谢你!

python flask-restful

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

python flask-restful无法在资源类中获取应用程序访问权限

以下是来自flask-restful doc的示例代码

from flask import Flask
from flask.ext import restful

app = Flask(__name__)
api = restful.Api(app)

class HelloWorld(restful.Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

这个HelloWorld类在同一个python文件中,比方说app.py,它有效.

现在我将把HelloWorld类放到一个单独的类文件中,如下面的布局:

app
app/__init__.py # hold above code except the HelloWorld class.
app/resource
app/resource/__init__.py # empty
app/resource/HelloWorld.py # hold the above HelloWorld class.
Run Code Online (Sandbox Code Playgroud)

app/__init__.py包含:

from flask import Flask
from flask.ext import restful
from resource.HelloWorld import HelloWorld

app = Flask(__name__)
api …
Run Code Online (Sandbox Code Playgroud)

python flask flask-restful

2
推荐指数
1
解决办法
2461
查看次数

如何在app.post中发送身份验证凭据以进行API视图的Flask单元测试

我写了一个Flask应用程序。在这种情况下,我正在使用基本身份验证来限制某些POST API视图。从Python请求中,我可以按以下方式访问这些视图:

print post(url, json=data, auth=('username', 'password'))
Run Code Online (Sandbox Code Playgroud)

从卷曲

curl -a username:password -d "data" url
Run Code Online (Sandbox Code Playgroud)

如何在app.post中做同样的事情?我想authauthorization等为参数,post但它们是无效的。

response = self.app.post(
            url,
            data=data,
            headers={
            'content-type': 'application/json'
            },
            follow_redirects=True
        )
Run Code Online (Sandbox Code Playgroud)

python flask flask-restful flask-restplus

2
推荐指数
1
解决办法
2030
查看次数

Flask Alchemy与棉花糖一起返回空JSON

我试图使用Flask Alchemy和Flask Marshmallow从数据库查询后返回json数据

但是,我的代码总是以某种方式返回空的JSON数据。

这是我的代码:

我的看法 :

@app.route('/customer/', methods=['GET'])
def get_customer():
  customers = models.Customer.query.all()
  #c = models.Customer.query.get(1) # Get Customer with an ID of 1

  customers_schema = CustomerSchema()

  print customers_schema.dump(customers).data
  payload = customers_schema.dump(customers).data
  resp = Response(response=payload, status=200, mimetype="application/json")
  return(resp)
Run Code Online (Sandbox Code Playgroud)

我的模特:

class Customer(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nickname = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    address = db.relationship('Address', backref='customer', lazy='dynamic')

    def __repr__(self):
        return '<Customer %r>' % (self.nickname)
Run Code Online (Sandbox Code Playgroud)

我的架构:

class CustomerSchema(ma.ModelSchema):
    class Meta:
        model = Customer
Run Code Online (Sandbox Code Playgroud)

这是从控制台看到的结果:

 * Debugger is …
Run Code Online (Sandbox Code Playgroud)

python json flask flask-sqlalchemy flask-restful

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

如何使用Postman将图像发送到Flask服务器

我需要使用Postman将图像文件发送到Flask服务器。我确实使用网络浏览器和“渲染模板”发送了图像文件。但是当我使用Postman尝试相同的程序时,显示 "method not allowed"

邮差405

我也尝试过/ upload,但是它说 "bad request"

邮递员400

python flask-restful postman

2
推荐指数
1
解决办法
2941
查看次数

resource可选参数,用于检索Flask Restful上的所有数据

我试图理解Flask-RESTful,但是我不知道如何为资源提供可选参数。

即:

class TodoSimple(Resource):
    def get(self, todo_id):
        return {todo_id: todos[todo_id]}

    def put(self, todo_id):
        todos[todo_id] = request.form['data']
        return {todo_id: todos[todo_id]}


api.add_resource(TodoSimple, '/<string:todo_id>')
Run Code Online (Sandbox Code Playgroud)

在上述情况下,如何创建一个新的端点,该端点将返回所有待办事项,而不仅仅是一个?

摘自:https : //flask-restful.readthedocs.io/en/0.3.5/quickstart.html

python rest flask flask-restful

2
推荐指数
1
解决办法
711
查看次数