我应该如何在项目之间重用 Bottle 路由器代码?

How should I reuse Bottle router code between projects?

通常我会重用 Python 中的代码,方法是将其封装到 class 中。

但是对于 Bottle,我基本上是在用路由修饰的全局级别编写函数。

例如

@get("/foo/<id>")
def foo(id) :
   return f(id)

我现在有两个项目共享大约 80% 的路由处理程序,就像这样。

我怎样才能最好地使它们之间的共性可重用?

我不认为我可以修饰 class 的方法,因为显式自我。那么除了复制和粘贴之外,还有其他方法可以在两个不同的项目之间共享代码吗?

如果您希望重用您的实现(在您的示例中为函数 foo),那么这样的方法可能适合您:

from bottle import Bottle
from path.to.my.common.lib import foo

app = Bottle()

app.get("/foo/<id>")(foo)

app.run(host="0.0.0.0", port=8000)

我所做的只是显式地使用装饰器,而不是使用它漂亮的 @ 语法。

您还可以合并路线。

from myclient import clientRoute
from myapi import apiRoute
from mysandbox import sandboxRoute
app = bottle.app()
for nftyRoute in (myclient , myapi , mysandbox):
    app.merge(nftyRoute)

并且在每个路由文件中,您只需:(例如 myclient.py)

from bottle import Bottle, get, post, request, response, template, redirect, abort
clientRoute = Bottle()