比Web.py更高效的网络框架?请务必极其Pythonic!

6 投票
3 回答
6392 浏览
提问于 2025-04-15 23:29

我很喜欢webpy,它真的很符合Python的风格,但我不喜欢每次都要添加网址映射和创建一个类,通常这个类里面就只有一个函数。我希望能减少代码输入,快速进行原型开发。

有没有人推荐一些新兴的框架,比如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是一个很有竞争力的选择。会不会有其他框架在最后时刻逆袭呢?

3 个回答

1

我之前用过webpy。最近我发现了django,觉得它真不错。你只需要专注于自己的业务逻辑,框架会帮你处理大部分事情。

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 中,你甚至可以完全不使用类:

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

Flask 是一个由 Armin Ronacher 创建的轻量级框架,它建立在 Werkzeug、Jinja2 和良好的设计理念之上(不过你也可以使用其他模板引擎,或者根本不使用模板引擎)。Flask 在处理网址映射方面非常简洁明了。

@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)

也许这正是你想要的?

撰写回答