陈旭华

用一生勤奋,告诉自己不是小幸运

Python 的 Web 框架适用性研究

2019-12-30

先来研究一下webpy 、django 及 web2py 的差异。

虽然这三个都自称 web framework 但其中差异却是很大。

差异的地方在于功能涵盖率以及如何做到。

我研究的方法是从 hello world 来看它们的做法。

webpy 提到它有以下的功能,而这些都是 web framework 的基本功能:

  1. URL Handling
  2. Web server
  3. Templating
  4. Forms
  5. Database

而 django、web2py 的网站第一句话就说,「high-level Python Web framework」(django)、「full-stack framework」(web2py)。因此相较之下,webpy 显得是比较手工(轻量级)的framework。这怎么说呢?

首先,webpy 最简单的范例是:

import web

urls = ( 
    '/', 'index' 
)

class index: 
    def GET(self): 
        return "Hello, world!"

if __name__ == "__main__": 
    app = web.application(urls, globals()) 
    app.run()

执行这段程式

python code.py 

# 或指定 Port 如 8080
python code.py 8080

之后就可以用 browser 来看执行结果。其他的事情,就自己手工来写。

web2py 在安装完之后,直接执行 web2py。进到预设网页(http://127.0.0.1:8000) 在它的预设网页先设定管理者密码,再建立一个 Application,例如 myapp。 之后再进入 http://127.0.0.1:8000/myapp 的 edit mode,针对它提供的各大项目进行程式码编辑。

这些项目包含:

  1. models
  2. controllers
  3. views
  4. languages
  5. modules
  6. static files
  7. plugins

以最简单的 hello world 来说,就是在属于 controller 的 default.py 里,写下

def index(): 
    return "Hello from MyApp"

如此浏览 http://127.0.0.1:8000/myapp/default/index 就会看见 hello world 了。

django 在安装完后(这是一条漫长的道路),要建立网站架构,使用指令

django-admin.py startproject mysite

它会在你的工作目录产生一个结构:

mysite/ 
    manage.py 
    mysite/ 
        __init__.py 
        settings.py 
        urls.py 
        wsgi.py

然后再依照 django 规定修改新增相关档案,启动开发用 server,就可以看到结果。

由一个 hello world 范例,就可以看出这三个 web framework 的目标族群是不一样的。 webpy 的确是简单。若是只有几页网页要展示,没有复杂权限控管需要实作(例如与桌机整合的 single sign on),对于开发小型网站程式是很好的。不用装一大包东西只为了几种单纯的网页。 可以这样思考,若是装 apache 都嫌太大的专案,就可以思考用 webpy。类似的 framework 如 www.cherrypy.org。然而是要完整功能,则免不了要自己打造很多功能。选用别的 framework 比较合适。 而 django、web2py,已经有相关许多模组做出权限控管,许多类型档案支持,session 的支持等等。

这里粗略的比较只是为了找出各个 web framework 适不适合自己所用的方案而已。同样都说是 framework,轻量级跟重量级可是差别很大。

我目前只要小小的 framework。

参考:

  • http://www.cherrypy.org/
  • http://webpy.org/
  • https://www.djangoproject.com/
  • http://www.web2py.com/