2015-04-06 28 views
0

我正在与Tornado(使用Tornado-JSON)的应用程序。 我的目标是使返回JSON和可以只处理任何传入的参数休息服务 - 搜索/查找,如果你想(试图用JSON饲料emberjs为传递不同的参数)例如:龙卷风python与多个处理程序,但相同的参数类型的REST api

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 /服务/ SOME_VALUE

并且在这种情况下一切都没用,因为第二个类(ServiceIdHandler)总是被调用。

我很新的蟒蛇所有龙卷风和,但不应该我可以(根据路由)用这种方式来调用:

/hostedservices /服务/ tenant_id = VALUE 或 /hostedservices /服务/?id =值

当然,我会有一堆更多的属性,但不知何故,当我从soapUI测试它似乎,我总是必须通过1参数作为URL路径(模板样式参数)的一部分,而不是常规参数因为我不能让它有相同的属性类型(但不同的属性)2处理程序

我会很感激所有帮助,我可以在这一点上...

谢谢!

+0

嘿!这有点晚了,但我只是想叮叮当当地说我正在为Tornado-JSON(v2.0)重写可定制的路由,使它更容易和更清晰(我是作者)。 该分支已经在它上面工作了很长一段时间,但我只是非常忙碌,没有尽可能多的时间来处理它。 如果你有兴趣看看它的标题,你可以查看一下我自己在比较底部留下的评论(https://github.com/hfaran/Tornado-JSON/compare/ master ... routing_refactor) – hfaran 2015-06-07 03:41:51

回答

0

此路由应该可以解决你的问题:

[ 
    "/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'>" 
] 

路线/hostedservices /服务/租户/ VALUE将为ServicesTenantHandler和路线/hostedservices /服务/价值会生成生成ServicesIdHandler(而不是/ hostedservices/services /?tenant_id = VALUE或/ hostedservices/services /?id =值路由)。

为了获得这样的结果,处理程序必须是:

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): 
    .... 
+0

谢谢!这确实回答了我的问题,尽管我正在努力研究如何对潜在的每个属性进行全面搜索。作为替代,我开始使用handler.get_argument()来获取参数并将它们用作搜索参数... – 2015-04-08 07:15:30