接着回归简单,向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,则是各个模块对应的实现。
- depend 目录是存放各个依赖的模块,这样做会更容易管理。
- module 是开发中较为独立的模块,比如models.py是模型,forms.py是表单等等
- views 是模板目录
- static 是静态文件目录
- log 是日志目录
OK,整个就是这样了。 按照这样来做了之后,整个模块的划分就清晰了很多,可扩展性也好了很多。 当然,这只是我一家之言,如果有朋友有更好的物理设计,也欢迎告知。 惯例,代码放在这里: http://code.google.com/p/vimercode/source/browse/#svn%2Ftrunk%2Fbottle_site_tpl
Jam on #
Good.Simple is better than complex!
Reply
Cucole Lee on #
Google Code里面的怎么没有啊,下载链接里面没有文件,希望博主检查下啊,如果可以的话,希望能把文件Email下给我,最近正在研究bottle,对这个设计很感兴趣。 :)
Reply
Dante on #
特意又去看了一下链接,文件都在哦。
Reply
枯干 on #
# Non-members may check out a read-only working copy anonymously over HTTP.
svn checkout http://vimercode.googlecode.com/svn/trunk/ vimercode-read-only
这个不能检出啊,怎么回事?检出的时候提示网址不存在。
Reply
Dante on #
呃,应该不会吧,直接访问能看到吗
Reply
li on #
不适合新手。
Reply
Dante on #
嗯,新手用django比较好,规范些。
Reply