我注意到Python Web框架处理请求处理的三种主要方式:装饰器,带有单个请求方法的控制器类,以及带有GET / POST方法的请求类。
我很好奇这三种方法的优点。这些方法中有哪些主要优点或缺点?为了解决问题,这里有三个例子。
Bottle使用装饰器:
@route('/')
def index():
return 'Hello World!'
Pylons使用控制器类:
class HelloController(BaseController):
def index(self):
return 'Hello World'
Tornado使用请求处理程序类和类型的方法:
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
哪种风格是最佳做法?
答案 0 :(得分:10)
您列出的三种方法中的每种方法实际上都有一个原因,特定于每个项目。
现在,说了所有你应该知道的,你总是可以覆盖默认的框架行为。例如,我为Tornado写了一个MethodDispatcher,它使它的工作更像Pylons(好吧,我编写时考虑过CherryPy)。由于有一个大的RequestHandler(而不是很多小的),它会减少Tornado的数量(并略微增加内存占用量),但它可以减少应用程序中的代码量并使其更容易阅读(我的偏见,当然=)。
答案 1 :(得分:1)
各种框架都试图通过最佳代码(用于编写和阅读)来实现最佳性能。他们各自采用基于或围绕MVC或MVT的不同策略。
你所关注的可能归结为个人品味。我的答案也是如此。我正在努力避免任何形式的圣战,因为可能存在我不知道的有效技术论据。
但我个人更喜欢将路由与控制器(django的视图)分开,并将模板分开。它使重用控制器变得非常简单。是的,我是Django的用户。
因此,我真的不喜欢Bottle的装饰者或者在大型笨重的课程中包装东西。我曾经是一名ASP.NET开发人员,但Django让我自由。