Python3 Flask-缺少1个必需的位置参数:“self”

2024-10-17 06:22:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有非常简单的python代码来访问Amazon简单队列服务。但我知道

   builtins.TypeError
TypeError: get_queue() missing 1 required positional argument: 'self'

我的代码:

class CloudQueue(object):

    conn = boto.sqs.connect_to_region("eu-west-1",
        aws_access_key_id="abc",
        aws_secret_access_key="abc")


    @app.route('/get/<name>')  
    def get_queue(self, name):

        if(name != None):
            queue = self.conn.get_queue(str(name)) <--------- HERE
        return conn.get_all_queues()


if __name__ == "__main__":
    cq = CloudQueue()
    app.debug = True
    app.run()

Tags: key代码nameselfawsappamazonget
1条回答
网友
1楼 · 发布于 2024-10-17 06:22:02

不能将方法注册为路由;在decorator运行类时,该类仍在定义中,而您注册的只是未绑定的函数对象。因为它没有绑定到实例,所以没有self要传入。

不要在这里使用类;为每个请求重新创建连接:

@app.route('/get/<name>')  
def get_queue(name):
    conn = boto.sqs.connect_to_region("eu-west-1",
        aws_access_key_id="abc",
        aws_secret_access_key="abc")

    queue = conn.get_queue(name)
    return 'some response string'

您可以将其设置为全局连接,但随后需要确保在第一个请求上重新创建连接(因此,即使使用WSGI服务器使用子进程处理请求时,它仍能继续工作):

@app.before_first_request()
def connect_to_boto():
    global conn
    conn = boto.sqs.connect_to_region("eu-west-1",
        aws_access_key_id="abc",
        aws_secret_access_key="abc")

@app.route('/get/<name>')  
def get_queue(name):
    queue = conn.get_queue(name)
    return 'some response string'

仅当您确定boto连接对象是线程安全的时,才使用此选项。

相关问题 更多 >