一个tornado项目的大体结构
来源:互联网 发布:java reflection 实例 编辑:程序博客网 时间:2024/05/29 09:05
主要结构
下面进行解释。
App目录职责
app用于存放程序需要运行的逻辑。
如下:
common里面是通用的函数及方法。
business用于存放业务逻辑
dal专门用于数据库读写
db是数据库操作辅助类
modules用于存放tornado的handler,即页面控制器。
viewhelper是用于页面的一些辅助方法,譬如,页面上面需要裁剪字符串,需要获取通用页脚的文章数据,需要获取页头的通用分类数据等等。
值得注意的是BaseHandler这个类,这个类可以自定义404错误,也可以自定义采用的模板,所有handler都继承这个BaseHandler。
代码如下:
#coding:utf-8#这是一份默认的handler,用于替换掉默认的模板引擎为mako。import tornado.webimport os.pathimport tornado.ioloopimport mako.lookupimport tornado.httpserverimport mako.templateimport app.common.commonsclass BaseHandler(tornado.web.RequestHandler): def initialize(self): template_path = self.get_template_path() self.lookup = mako.lookup.TemplateLookup(directories=[template_path], input_encoding='utf-8', output_encoding='utf-8') #self._config = Config() #self.lookup = mako.lookup.TemplateLookup(directories=[template_path]) #def get_conf(self,field,key): # return self._config.get(field,key) def render_string(self, template_path, **kwargs): try: _debug=self.get_argument("debug","false") template = self.lookup.get_template(template_path) namespace = self.get_template_namespace() namespace.update(kwargs) #siteConfig=WebConfig() env_kwargs = dict( handler = self, request = self.request, locale = self.locale, _ = self.locale.translate,#国际化i18n的支持 static_url = self.static_url, xsrf_form_html = self.xsrf_form_html, reverse_url = self.application.reverse_url, jsDebug=_debug, #get_conf = self.get_conf, #加一个我们的相关设定下去。 #conf=siteConfig ) env_kwargs.update(kwargs) return template.render(**env_kwargs) except Exception as e: print("服务端错误") print(e) pass
Conf目录职责
conf目录用于存放程序的相关配置文件及信息,例如:
其中一份配置如下:
# -*- coding: utf-8 -*-#开发环境#--总体设置[global]db_prefix=ecs_[web]template_path=viewsstatic_path=static#--数据库设置[db]#mysql iphost = localhost#mysql portport = 3306#db namedb = ectouchuser = rootpassword = root#--mongo数据库配置[mongo]#hosthost=127.0.0.1#portport=27017#dbdb=base_db
都差不多的。
views职责
views是存放控制器需要渲染的模板的目录,例如:
static职责
static是静态文件目录,包含了样式,脚本,页面的前端逻辑等东西,同时也有一些第三方插件在。例如:
upload职责
你还看到了upload这个文件夹,请注意,tornado除了static目录是默认可以在外面直接访问到以外,其余文件夹下面的文件都没办法直接通过http访问的,假如要添加这种http直接访问,那么需要进行设置,这里先说明一下。upload的职责是小型网站上传图片时候的存放。
application、server及url路径设置
这几个文件都是启动tornado服务,设定访问地址的核心文件。
url和url_admin分别是设定前台访问路径和后台访问路径的文件,分开两个是因为便于管理。
内容分别是:
#coding:utf-8import sysimport tornado.webimport osfrom app.web.modules.testModule import index as TestIndexfrom app.web.modules.PC import *url=[ #(r"/data/(.*)", tornado.web.StaticFileHandler,{"path":"data"})#这是data静态文件,用自定义静态文件的路由。 (r"/test",TestIndex) #pc版页面, ,(r"/index\.html",pc_index) ]
#coding:utf-8import sysimport tornado.webimport os##这是后台相关页面。from app.web.modules.admin.index import *url_admin=[ (r"/admin/login\.html",admin_login) ,(r"/admin/index\.html",admin_index) ,(r"/admin/center\.html",admin_center) ]
application是设定tornado程序的核心文件,如下:
from url import *import tornado.webimport osfrom app.conf.config import *from url_admin import *setting = dict( template_path=os.path.join(os.path.dirname(__file__), "views"), static_path=os.path.join(os.path.dirname(__file__), "static"), )handlers=[]##根据web.ini设定相关参数def application_setting_handle(): _config=WebConfig() setting["template_path"]=_config.cf.get("web","template_path") setting["static_path"]=_config.cf.get("web","static_path") #--这里要加入静态文件的直接访问。 handlers.append((r"/data/(.*)", tornado.web.StaticFileHandler,{"path":"data"}))#这是data静态文件,用自定义静态文件的路由。 handlers.append((r"/images/(.*)", tornado.web.StaticFileHandler,{"path":"images"}))#这是images静态文件,用自定义静态文件的路由。 handlers.append((r"/upload/(.*)", tornado.web.StaticFileHandler,{"path":"upload"}))#这是上传的静态文件,用自定义静态文件的路由。 handlers.extend(url)#pc端页面。 handlers.extend(url_admin)#后台相关页面,application_setting_handle()application = tornado.web.Application( handlers=handlers, **setting )
server.py是启动服务器的入口,内容如下:
import osimport tornado.ioloopimport tornado.optionsimport tornado.httpserverimport sysfrom app.conf.config import *from application import applicationfrom tornado.options import define,optionsdefine("port",default=8123,help="run on th given port",type=int)def main(): #读取server的配置文件。 conf_server=ServerConfig() options.port=int(conf_server.getPort()) tornado.options.parse_command_line() http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) print('Development server is running at http://127.0.0.1:%s/' % options.port) print('Quit the server with Control-C') tornado.ioloop.IOLoop.instance().start()if __name__=="__main__" or 1==1: main()
总结
一个项目的组织方式是多种多样的,这里只是说一说我自己的组织方式,请指正。
- 一个tornado项目的大体结构
- 一个项目的大体架构及想法。
- Msql的大体结构
- sipdroid项目结构分析,类的大体作用 比较全
- sipdroid项目结构分析,类的大体作用 比较全
- 邮票程序的大体结构
- 一般英文论文的大体结构
- Tornado Web 应用的结构
- tornado 1、项目结构初入
- tornado项目--day01--项目结构以及项目搭建编写
- Telematics 大体结构
- keras系列二 keras的大体结构介绍
- 初识 tornado 应用程序的代码结构
- 一个请求大体过程
- SSM实战记录(一)--一个大体的分页流程
- 各种数据库大体结构,mysql
- 一个web项目的目录结构示例
- 一个J2EE项目的基本结构
- 维数灾难(The Curse of Dimensionality in classification)
- java.lang.IllegalArgumentException: Unknown entity: cn.ibeans.web.model.User
- 10-判断数据库中字段重复的数据
- C#中调用简单的R语言
- FMDB使用文档
- 一个tornado项目的大体结构
- hdu1695欧拉,容斥
- android OOM问题经验
- 我的记事本项目之路(五)
- js中的字符长度问题
- 杭电1799循环多少次?
- Spring JdbcTemplate 方法详解
- android学习教程总结 第九讲:芯灵思开发板init守护进程
- 第一章:Object-C简介