比Web.py更有效的Web框架?非常Pythonic请!

时间:2010-06-03 08:20:12

标签: web-applications python cherrypy web.py

我喜欢webpy,它真的很Pythonic但我不喜欢添加url映射并创建一个类,通常只有一个函数在其中。 我有兴趣尽快减少代码输入和原型设计。

有没有人有像Bobo,Nagare,Bottle,Flask,Denied这样的崭露头角的建议,对于一个喜欢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

Minimalistic CherryPy目前看起来像是一个强有力的竞争者。最后一分钟会被另一个人保存吗?

3 个答案:

答案 0 :(得分: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)

也许这就是你要找的东西?

答案 1 :(得分:6)

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中完全免除课程:

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

答案 2 :(得分:1)

我是webpy的用户。最近,我找到了django,我觉得它很棒。您可以专注于业务逻辑,框架将为您完成大部分工作。