首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3 Flask -缺少1个必需的位置参数:“self”

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

Stack Overflow用户
提问于 2014-11-30 00:15:53
回答 1查看 22.8K关注 0票数 4

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

代码语言:javascript
复制
   builtins.TypeError
TypeError: get_queue() missing 1 required positional argument: 'self'

我的代码:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-30 00:26:06

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

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

代码语言:javascript
复制
@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服务器时,它也可以继续工作):

代码语言:javascript
复制
@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连接对象是线程安全的情况下,才使用此选项。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27204282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档