【问题标题】:More efficient web framework than Web.py? Extremely Pythonic please! [closed]比 Web.py 更高效的 Web 框架?请非常Pythonic! [关闭]
【发布时间】:2011-02-27 04:50:41
【问题描述】:

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

对于 webpy 的好东西的爱好者,有没有人有任何新的建议,例如 Bobo、Nagare、Bottle、Flask、Denied、cherrypy?

是什么让它成为一个很好的理由?

我也不介意错过(强烈)基于文本的模板系统,我使用面向对象的 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 目前看起来是一个强有力的竞争者。会有其他人在最后一刻救人吗?

【问题讨论】:

  • 我对如何从 url 获取示例中列出的函数感到有些困惑。
  • 查看 CherryPy 示例,它与函数名称的直观映射相同。所以 /listTasks 会显示任务。
  • 啊,我明白了。我想你可以做一些自省魔法来得到同样的东西,但这当然是一个令人讨厌的解决方案。
  • 哈,也许我最终会这样做,但希望获胜的框架会有更多的创新,而不仅仅是基于函数名称的 url 映射。 (可能是一些数据库创新。)

标签: web-applications python cherrypy web.py


【解决方案1】:

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

【讨论】:

  • 谢谢fumanchu,我特别喜欢无类的例子。我也在问题中添加了一个示例。
【解决方案2】:

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

【讨论】:

  • 我在严格寻找更轻量级的选项。如果 Django 的 MVC 系统和 fumanchu 的非 MVC 示例一样轻量级,它可能是一个竞争者。我很了解 Django,并希望超越它,所以我的脑海中需要更少的东西来进行原型设计和实际开发。简单和混合搭配可能是这里的关键。我正在寻找所需的最少击键次数。
  • Nagare,例如可能比 Django 更接近,尽管它可能不像 Cherrypy 那样混搭。 nagare.org
  • 使用 Django,您可以省去模型和模板,只需使用 URLConf 映射到的视图即可。就您需要编写的代码而言,Django 可以非常轻量级,同时提供大量辅助方法和类来进一步缩小代码。
  • 当然可以,但是为什么呢?
【解决方案3】:

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 的文本重复要少一些,但我想做得更好。我在问题中添加了一个示例。
猜你喜欢
  • 2012-12-16
  • 1970-01-01
  • 2014-02-05
  • 2010-09-08
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2022-01-23
相关资源
最近更新 更多