Python bottle:如何将参数传递给函数处理程序
Python bottle: how to pass parameters into function handler
我试图在将 http GET 请求发送到特定路由时调用函数,但我想将参数传递给给定函数。例如,我有以下内容:
self.app.route('/here', ['GET'], self.here_method)
其中 self.here_method(self)
在 GET 请求发送到 /here
路由时被调用。相反,我想调用方法 self.here_method(self, 'param')
。我怎样才能做到这一点?我试过 self.app.route('/here', ['GET'], self.here_method, 'param')
,但它不起作用。我查看了 this documentation,但找不到任何答案。
我没有使用 bottle 的经验,但 route
似乎需要一个不带任何参数的回调函数。为此,您可以围绕您的方法创建一些一次性包装器,它不接受任何参数。这通常使用由 lambda expression 定义的匿名函数来完成,例如:
self.app.route('/here', ['GET'], lambda: self.here_method(self, 'param'))
不清楚您是在询问如何将您的路线与闭包相关联,还是仅与采用参数的函数相关联。
如果您只想将参数作为 URI 的一部分,请使用 Bottle 的动态 path routing。
另一方面,如果您想 "capture" 一个在路由定义时已知的值,并将其烘焙到您的路由处理程序中,则使用 functools.partial
.
这是两者的示例。
from bottle import Bottle
import functools
app = Bottle()
# take a param from the URI
@app.route('/hello1/<param>')
def hello1(param):
return ['this function takes 1 param: {}'.format(param)]
# "bake" in a param value at route definition time
hello2 = functools.partial(hello1, param='the_value')
app.route('/hello2', ['GET'], hello2)
app.run(host='0.0.0.0', port=8080)
及其输出示例:
% curl http://localhost:8080/hello1/foo
127.0.0.1 - - [11/Jul/2015 18:55:49] "GET /hello1/foo HTTP/1.1" 200 32
this function takes 1 param: foo
% curl http://localhost:8080/hello2
127.0.0.1 - - [11/Jul/2015 18:55:51] "GET /hello2 HTTP/1.1" 200 38
this function takes 1 param: the_value
我试图在将 http GET 请求发送到特定路由时调用函数,但我想将参数传递给给定函数。例如,我有以下内容:
self.app.route('/here', ['GET'], self.here_method)
其中 self.here_method(self)
在 GET 请求发送到 /here
路由时被调用。相反,我想调用方法 self.here_method(self, 'param')
。我怎样才能做到这一点?我试过 self.app.route('/here', ['GET'], self.here_method, 'param')
,但它不起作用。我查看了 this documentation,但找不到任何答案。
我没有使用 bottle 的经验,但 route
似乎需要一个不带任何参数的回调函数。为此,您可以围绕您的方法创建一些一次性包装器,它不接受任何参数。这通常使用由 lambda expression 定义的匿名函数来完成,例如:
self.app.route('/here', ['GET'], lambda: self.here_method(self, 'param'))
不清楚您是在询问如何将您的路线与闭包相关联,还是仅与采用参数的函数相关联。
如果您只想将参数作为 URI 的一部分,请使用 Bottle 的动态 path routing。
另一方面,如果您想 "capture" 一个在路由定义时已知的值,并将其烘焙到您的路由处理程序中,则使用 functools.partial
.
这是两者的示例。
from bottle import Bottle
import functools
app = Bottle()
# take a param from the URI
@app.route('/hello1/<param>')
def hello1(param):
return ['this function takes 1 param: {}'.format(param)]
# "bake" in a param value at route definition time
hello2 = functools.partial(hello1, param='the_value')
app.route('/hello2', ['GET'], hello2)
app.run(host='0.0.0.0', port=8080)
及其输出示例:
% curl http://localhost:8080/hello1/foo
127.0.0.1 - - [11/Jul/2015 18:55:49] "GET /hello1/foo HTTP/1.1" 200 32
this function takes 1 param: foo
% curl http://localhost:8080/hello2
127.0.0.1 - - [11/Jul/2015 18:55:51] "GET /hello2 HTTP/1.1" 200 38
this function takes 1 param: the_value