我正在尝试在get()调用之前检查请求的参数。我有一条路线描述如下:
user_route = r"/users/key=(?P<key>\w+)"
app = web.Application([
web.URLSpec(user_route, user_manager.UserHandler), ..])
Run Code Online (Sandbox Code Playgroud)
接下来,(在处理程序中)prepare()用于检查之前的请求get()。
def prepare(self):
# inspect request arguments
print(self.request.arguments) # prints "{}"
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我无法从中访问参数prepare()。最后一条语句输出一个空字典。我get()成功使用了像这样在函数中传递的参数:
def get(self, key):
print(key) #works
Run Code Online (Sandbox Code Playgroud)
如何访问中的参数prepare()?我也尝试过self.argument('key')给出错误“ 400 GET .... Missing arguments key”,但是请求的URL中确实包含key自变量。
小智 5
在您的代码key中,不是GET参数,而是的一部分path。tornado.we.URLSpec将正则表达式中的所有捕获组get/post/etc作为参数传递到处理程序的方法中。
tornado.web.RequestHandler具有RequestHandler.path_args和RequestHandler.path_kwargs,其中包含来自的位置和关键字参数URLSpec。这些可用的prepare方法:
def prepare(self):
# inspect request arguments
print(self.path_kwargs) # prints {"key": "something"}
Run Code Online (Sandbox Code Playgroud)
key正如 Gennady Kandaurov 提到的,您将作为 we.URLSpec 路径的一部分传递,您可以使用 Tornado 的 访问它self.path_kwargs。如果您想将其作为参数传递,您可以使用RequestHandler.get_argument来获取方法上的参数get,并使用self.request.arguments您的prepare方法来访问它作为您的初始意图。
您的代码可能如下:
class Application(tornado.web.Application):
def __init__(self):
user_route = r"/users"
app = tornado.web.Application([
tornado.web.url(user_route, user_manager.UserHandler), ..])
class UserHandler(tornado.web.RequestHandler):
def get(self):
key = self.get_argument('key')
print(key)
def prepare(self):
# inspect request arguments
print(self.request.arguments)
Run Code Online (Sandbox Code Playgroud)
如果您还有任何疑问,请告诉我。
| 归档时间: |
|
| 查看次数: |
7559 次 |
| 最近记录: |