比Web.py更高效的Web框架?非常符合Python风格!

5
我喜欢webpy,它真的很Pythonic,但我不喜欢添加url映射并创建一个类,通常只有一个函数在其中。
我对最小化代码输入和快速原型设计感兴趣。是否有什么新的建议,如Bobo、Nagare、Bottle、Flask、Denied、cherrypy,适合喜欢webpy好东西的人?
是什么造就了这个好理由?
此外,我不介意错过(强烈的)基于文本的模板系统,我使用面向对象的HTML生成。代码应该看起来像这样:
def addTask(task):
    db.tasks.append({'task':task,'done':False})
    return 'Task Added'
def listTasks():
    d = doc()
    d.body.Add(Ol(id='tasks'))
    for task in db.tasks:
        taskStatus = 'notDoneTask'
        if task.done: taskStatus = 'doneTask'
        d.body.tasks.Add(Li(task.task,Class=taskStatus))
    return d

目前,极简的CherryPy看起来是一个强有力的竞争者。会不会有另一个在最后一刻挽回局面呢?


我有点困惑,不知道你是如何从URL转换到你示例中列出的函数的。 - Xiong Chiamiov
看看CherryPy的例子,它使用相同直观的函数名称映射。因此/listTasks将显示任务。 - Luke Stanley
啊,我明白了。我想你可以通过一些内省魔法来实现相同的功能,但这当然是一个不太好的解决方案。 - Xiong Chiamiov
哈,也许我最终会这样做,但希望获胜框架的创新不仅仅是基于函数名称的URL映射。(比如一些数据库创新。) - Luke Stanley
3个回答

9

Flask,Armin Ronacher的微框架,构建在Werkzeug、Jinja2和良好意图的基础上(虽然您可以使用任何模板引擎,或者根本不使用模板引擎),非常简洁地进行URL映射。

@app.route("/")
def index():
  return """Hello, world. <a href="/thing/spam_eggs">Here's a thing.</a>"""

@app.route("/thing/<id>")
def show_thing(id):
  return "Now showing you thing %s."%id
  # (or:) return render_template('thing.html', id = id)

也许这就是你要找的?

谢谢。这比使用webpy少了一些文本重复,但我想做得更好。我在问题中添加了一个示例。 - Luke Stanley

8
CherryPy可以让你使用树形结构来连接处理程序,而不是正则表达式。例如,在web.py中可能会写成:
urls = (
    '/', 'Index',
    '/del/(\d+)', 'Delete'
)

class Index:
    def GET(self): ...

class Delete:
    def POST(self, id): ...

相应的CherryPy将是:

class Delete:
    def POST(self, id): ....

class Index:
    del = Delete()
    def GET(self): ...

你甚至可以在CherryPy中完全不使用类:

您甚至可以在CherryPy中完全不使用类:

def delete(id): ...
def index(): ...
index.del = delete

谢谢fumanchu,我特别喜欢那个无类示例。我也在问题中添加了一个示例。 - Luke Stanley

1

我之前使用过webpy。最近,我发现了django,认为它非常出色。你可以专注于业务逻辑,框架会为你完成大部分工作。


我严格地寻找更轻量级的选项。如果Django的MVC系统像fumanchu的非MVC示例一样轻量级,它可能成为一个竞争对手。我很清楚Django,并且希望超越它,这样就不必在我的头脑中塞入太多东西来进行原型设计和实际开发。简单性和混合匹配可能是关键。我正在寻找所需最少的击键数。 - Luke Stanley
例如Nagare可能比Django更接近,尽管它可能不像Cherrypy那样灵活。http://www.nagare.org - Luke Stanley
使用Django,您可以省略模型和模板,仅使用视图,并将其映射到URLConf。Django可以非常轻量级地编写代码,同时提供大量的辅助方法和类来进一步减少代码量。 - Josh Smeaton
1
当然你可以,但为什么要这样做呢? - Luke Stanley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接