Tornado:如何将不同的请求分派给同一个 class

Tornado: how to dispatch different requests to a same class

我正在使用 Tornado 构建网络服务器。我需要将不同的请求分派到同一个 class。这是一个例子:

application.add_handlers(r"^(example).*", [
(r"/(mark)/(auth)"), MarkHandler,
(r"/(mark)"), MarkHandler,
])

和 class MarkHandler:

class MarkHandler(tornado.web.RequestHandler):
    def get(self, mark):   # /(mark)
        print('1111')

    def get(self, mark, auth):    # /(mark)/(auth)
        print('2222')

不过好像不行...
当我访问 link: www.example.com/mark 时,服务器给我一个错误:

TypeError: get() missing 1 required positional argument: 'auth'

我需要的如上是不可能的?

Python 不允许像 C++ 或 Java 那样的方法重载。在 Python 中两次定义相同的方法 get 只是用第二个方法覆盖第一个方法。

相反,您需要第二个参数的默认值:

class MarkHandler(tornado.web.RequestHandler):
    def get(self, mark, auth=None):
        if auth is not None:
            print('2222')
        else:
            print('1111')