使用web.py微框架开发一个宁静风格的API服务器。我有一个关于带有句柄类的多个URL的问题,http方法功能需要不同的参数。例如:
URL:
url =['/api/users', 'User',
'/api/users/(\d+)$, 'User']
Class:
class User(object):
def GET(self, id=None):
Pass
def POST(self):
Pass
问题: 当使用POST方法使用postman call / api / uses / 1时 会发生异常。怎么解决?
答案 0 :(得分:0)
正如评论中所建议的那样,使POST方法的签名与GET相同:
def POST(self, id=None):
...
您的问题是由于您的POST请求/api/users/1
包含最终ID。这意味着webpy
匹配模式/api/users/(\d+)$
,然后由class User
处理。如果您获取该网址,则会转到<User>.GET()
,如果您发布该网址,则会转到<Users>.POST()
...(DELETE
转到<User>.DELETE()
等。)< / p>
因为匹配模式包含正则表达式捕获(\d+)
,所以匹配的值将作为附加参数传递给函数....无论调用哪个函数。
您可以使用非捕获正则表达式:(?:\d+)$
,这将需要在URL中匹配,但不会导致匹配值作为参数传递,因此:
url = ('/api/users', 'User',
'/api/users/(?:\d+)$', 'User')
class User(object):
def GET(self, id=None):
pass
def POST(self):
pass
现在,/api/users
和/api/users/1
将转到User
类,并根据请求由GET或POST处理。请注意,因为您不再捕获id
您的GET(self, id=None):
仍然有效,但始终会为ID设置无(因为它未被捕获!)
最有可能的是,你想要的只是简单:使参数相同。
答案 1 :(得分:0)
或者你可以使用灵活的参数:
def GET(*arg):
self = arg[0]
id = arg[1]