首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >结构RESTful旋风网络应用程序

结构RESTful旋风网络应用程序
EN

Stack Overflow用户
提问于 2012-12-26 11:26:33
回答 2查看 2.3K关注 0票数 1

龙卷风使用从tornado.web.RequestHandler派生的类来定义postget方法。我已经为路径r/action/*创建了一个请求处理程序。

由于有更多不同的具体路径,比如action/doThisaction/requestThat,所以我用一个if-然后-else结构来构造get方法,以检查具体的请求URI。

看起来非常笨拙,是否有一种更复杂的方法来构造这种结构,例如使用方法?,还是龙卷风的方式只是定义更多的RequestHandlers?我喜欢使用函数解码器的方式,但是由于它们是Python3,所以现在这不是一个选项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-26 11:39:50

装饰器不限于Python3;我经常使用bottle和2.7 (当我发现我的实现不需要基于类的Tornado行为时,我更喜欢装饰器的语法和bottle的更轻的重量。)

也就是说,如果action/doThisaction/requestThat提供了不同的行为,那么将它们定义为不同的路由会更好吗?如果它们共享行为的某些方面,则始终可以让两个RequestHandler子类共享一个公共基础。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class HandleAction(tornado.web.RequestHandler):
    def take_appropriate_action(route):
        print("Responding to action/{}".format(route))


class HandleThis(HandleAction):
    def get(self):
        self.take_appropriate_action('doThis')


class HandleThat(HandleAction):
    def get(self):
        self.take_appropriate_action('requestThat')


app = tornado.web.Application([
    (r'/action/doThis', HandleThis),
    (r'/action/requestThat', HandleThat)
])
票数 5
EN

Stack Overflow用户

发布于 2012-12-26 12:21:37

相似问题和我同意的第一个答案。由于“旋风”缺乏所提供的功能,所以您必须使用自己的解决方案,或者使用像龙卷风加载物这样的催眠功能,这将减轻创建必要的处理程序及其相关路由的麻烦。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tornado_addons.route import route

@route( "/action/doThis" )
class HandleDoThis( Request ):
 pass

@route( "/action/requestThat" )
class HandleRequestThat:
 pass

app = tornado.web.Application( route.get_routes() )

这将使为每个RESTful资源创建单独的处理程序类变得更加可行。这将消除您对if语句的担忧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14045236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文