Tornado python REST api 具有多个处理程序但参数类型相同
Tornado python REST api with multiple handlers but same parameter types
我正在使用 Tornado 制作应用程序(使用 Tornado-JSON)。
我的目通过)例如:
class ServicesHandler(CorsMixin,APIHandler):
....
__url_names__ = ["services"]
class ServicesTenantHandler(ServicesHandler):
def get(self, tenant_id):
....
class ServicesIdHandler(ServicesHandler):
def get(self, id):
....
这就是我在上面的例子中得到的:
[
"/hostedservices/services/(?P<id>[a-zA-Z0-9_]+)/?$",
"<class 'sysinfo.hostedservices.ServicesIdHandler'>"
],
[
"/hostedservices/services/(?P<tenant_id>[a-zA-Z0-9_]+)/?$",
"<class 'sysinfo.hostedservices.ServicesTenantHandler'>"
]
但是除了/hostedservices/services/SOME_VALUE
我什么也做不了
在这种情况下,一切都是无用的,因为第二个 class (ServiceIdHandler) 总是被调用。
我对所有 python 和龙卷风都很陌生,但我不应该(根据路线)以这种方式调用:
/hostedservices/services/?tenant_id=VALUE
要么
/hostedservices/services/?id=值
我肯定会有更多的属性,但是不知何故,当我从 soapUI 测试它时,似乎我总是必须传递 1 个参数作为 URL 路径(模板样式参数)的一部分,而不是常规参数和因此,我无法让它拥有 2 个具有相同属性类型(但不同属性)的处理程序
我将不胜感激此时能得到的所有帮助...
谢谢!
这条路由应该可以解决您的问题:
[
"/hostedservices/services/tenant/(?P<id>[a-zA-Z0-9_]+)/?$",
"<class 'sysinfo.hostedservices.ServicesTenantHandler'>"
],
[
"/hostedservices/services/(?P<id>[a-zA-Z0-9_]+)/?$",
"<class 'sysinfo.hostedservices.ServicesIdHandler'>"
]
将为 ServicesTenantHandler 和路由 /hostedservices/services/VALUE 生成路由 /hostedservices/services/tenant/VALUE 将为 ServicesIdHandler 生成(而不是 /hostedservices/services/?tenant_id=VALUE 或 /hostedservices/services/?id=value 路由) .
为了获得此结果,处理程序必须是:
class ServicesHandler(CorsMixin, APIHandler):
__url_names__ = ["services"]
....
class ServicesTenantHandler(ServicesHandler):
__url_names__ = ["services/tenant/"]
def get(self, id):
....
class ServicesIdHandler(ServicesHandler):
def get(self, id):
....
我正在使用 Tornado 制作应用程序(使用 Tornado-JSON)。 我的目通过)例如:
class ServicesHandler(CorsMixin,APIHandler):
....
__url_names__ = ["services"]
class ServicesTenantHandler(ServicesHandler):
def get(self, tenant_id):
....
class ServicesIdHandler(ServicesHandler):
def get(self, id):
....
这就是我在上面的例子中得到的:
[
"/hostedservices/services/(?P<id>[a-zA-Z0-9_]+)/?$",
"<class 'sysinfo.hostedservices.ServicesIdHandler'>"
],
[
"/hostedservices/services/(?P<tenant_id>[a-zA-Z0-9_]+)/?$",
"<class 'sysinfo.hostedservices.ServicesTenantHandler'>"
]
但是除了/hostedservices/services/SOME_VALUE
我什么也做不了在这种情况下,一切都是无用的,因为第二个 class (ServiceIdHandler) 总是被调用。
我对所有 python 和龙卷风都很陌生,但我不应该(根据路线)以这种方式调用:
/hostedservices/services/?tenant_id=VALUE 要么 /hostedservices/services/?id=值
我肯定会有更多的属性,但是不知何故,当我从 soapUI 测试它时,似乎我总是必须传递 1 个参数作为 URL 路径(模板样式参数)的一部分,而不是常规参数和因此,我无法让它拥有 2 个具有相同属性类型(但不同属性)的处理程序
我将不胜感激此时能得到的所有帮助...
谢谢!
这条路由应该可以解决您的问题:
[
"/hostedservices/services/tenant/(?P<id>[a-zA-Z0-9_]+)/?$",
"<class 'sysinfo.hostedservices.ServicesTenantHandler'>"
],
[
"/hostedservices/services/(?P<id>[a-zA-Z0-9_]+)/?$",
"<class 'sysinfo.hostedservices.ServicesIdHandler'>"
]
将为 ServicesTenantHandler 和路由 /hostedservices/services/VALUE 生成路由 /hostedservices/services/tenant/VALUE 将为 ServicesIdHandler 生成(而不是 /hostedservices/services/?tenant_id=VALUE 或 /hostedservices/services/?id=value 路由) .
为了获得此结果,处理程序必须是:
class ServicesHandler(CorsMixin, APIHandler):
__url_names__ = ["services"]
....
class ServicesTenantHandler(ServicesHandler):
__url_names__ = ["services/tenant/"]
def get(self, id):
....
class ServicesIdHandler(ServicesHandler):
def get(self, id):
....