Bottle中的MiddleStorm中间件

1 投票
1 回答
933 浏览
提问于 2025-04-16 21:42

如何在 MiddleStorm 中间件和 bottle 一起使用呢?我按照 这个例子 操作,把 SessionMiddleware 替换成了 MiddleStorm,但就是无法正常工作。

from bottle import *
from storm.locals import *
from middlestorm import MiddleStorm

#other bottle code like this here...
@get('/')
   def index():
   return 'index'

db = create_database("mysql://user:pass@localhost/mydb")
myapp = MiddleStorm(app, db)
run(app=myapp, reloader=True, host='0.0.0.0', port=4321)

我在控制台上看到这个错误:

exceptions.TypeError: __call__() takes exactly 1 argument (3 given)

如果我把 myapp 的那一行改成:

myapp = MiddleStorm(app(), db)

我在网页上看到这个错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 651, in _handle
    return callback(**args)
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 1143, in wrapper
    rv = callback(*a, **ka)
TypeError: decorator() takes exactly 1 argument (0 given)

补充说明:bottle、storm 和 middlestorm 都已经安装了。

补充说明2:如果我把 myapp 的那一行改成 myapp = MiddleStorm(dafault_app, db),我会看到这个错误:

Traceback (most recent call last):
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
  File "/usr/local/lib/python2.7/dist-packages/middlestorm-0.8.1-py2.7.egg/middlestorm.py", line 68, in __call__
    return self._app(environ, start_response)
TypeError: __call__() takes exactly 1 argument (3 given)
homer - - [17/Jul/2011 16:28:42] "GET / HTTP/1.1" 500 59

补充说明3:使用 @zeekay 的代码,我还是会看到这个错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 651, in _handle
    return callback(**args)
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 1143, in wrapper
    rv = callback(*a, **ka)
TypeError: decorator() takes exactly 1 argument (0 given)

1 个回答

3

其实,default_appapp 是一样的意思。这个应该可以用:

myapp = MiddleStorm(app(), db)

我简单测试了一下,似乎是可以的。你可以试试这个:

from bottle import *
from storm.locals import *
from middlestorm import MiddleStorm

@get('/')
def index():
   return 'index'

db = create_database("sqlite://test.db")
myapp = MiddleStorm(app(), db)
run(app=myapp, reloader=True, host='0.0.0.0', port=4321)

你应该可以把它放到一个文件里,然后直接运行。

撰写回答