接着回归简单,向Django说再见,继续来聊用bottle做web开发。
其实上一篇文章已经讲的比较清楚了,这一次主要从另一个角度来分享一下:物理设计
干脆直接贴出来吧:
bottle_site_tpl/
|~conf/
|~depend/
| |+autumn/
| |+jinja2/
| |+wtforms/
| |-__init__.py
| `-bottle.py
|~log/
| `-site.log
|~module/
| |-__init__.py
| |-forms.py
| |-models.py
| |-mysession.py
| `-web_func.py
|+static/
|~views/
| `-test.html
|~web/
| |-__init__.py
| `-test.py
|-myapp.py
`-setting.py
可以看出,最外层有两个文件,分别是setting.py 和 myapp.py。
setting.py(很像django吧,哈哈),顾名思义,是各种配置项,包括log目录和等级,模板目录,静态文件目录等。
而myapp.py的代码如下:
import setting from bottle import debug, run from web import app if __name__ == '__main__': debug(True) run(app, host="0.0.0.0", port=80, reloader=True)
相当于一个启动器,通过执行 python myapp.py 可启动整个网站。(当然,也可以和uwsgi结合)
接着我们进入第二级目录,从web目录开始:
web目录用来存放Bottle的各个实例,构成了网站的主框架。
其中的__init__.py代码如下:
#!/usr/bin/python # -*- coding: utf-8 -*- from bottle import Bottle from bottle import debug, run from bottle import redirect, abort, static_file from bottle import jinja2_template as template from bottle import request, response, local from bottle import TEMPLATE_PATH from mysession import get_session_info, set_session_info from mysession import deco_session_check from setting import CUSTOM_TPL_PATH TEMPLATE_PATH.insert(0, CUSTOM_TPL_PATH) app = Bottle() app.mount('/test', __import__('test').app) if __name__ == '__main__': debug(True) run(app, host="0.0.0.0",reloader=True)
可见 web.__init__.py 是统一管理web相关资源的入口,会mount各个模块,而对于test.py,则是各个模块对应的实现。
OK,整个就是这样了。
按照这样来做了之后,整个模块的划分就清晰了很多,可扩展性也好了很多。
当然,这只是我一家之言,如果有朋友有更好的物理设计,也欢迎告知。
惯例,代码放在这里:
http://code.google.com/p/vimercode/source/browse/#svn%2Ftrunk%2Fbottle_site_tpl