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

时间:2014-11-29 16:15:53

标签: python python-3.x flask

我有非常简单的python代码来访问Amazon Simple Queue Service。但是我得到了

   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()

1 个答案:

答案 0 :(得分:1)

您无法将方法注册为路线;在装饰器运行时,仍在定义类,并且您注册的所有内容都是未绑定的函数对象。由于它未绑定到实例,因此无法传入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连接对象是线程安全的时才使用此选项。