文接上篇,看我一個簡單的helloworld,雖然覺得這個架構着實精小,但是實際開發總不能這麼用。是以還是應該按照實際開發來寫一個helloworld。
既然是實際項目版的helloworld,那就要有組織結構,不能代碼都塞在一個檔案裡。
大體結構如下:
mvc_helloworld
--__init__.py
--urls.py
--application.py
--server.py
--handlers
--__init__.py
--index.py
--model
--__init__.py
--entity.py
--static
--css
--index.css
--js
--img
--templates
--index.html
複制
這是一個簡單的mvc結構,通過urls.py來控制通路,通過handlers來處理所有的通路,通過model來處理持久化的内容。剩下的static和templates就不用說了。另外可以通過在model和handlers之間增加cache層來提升性能。
下面逐一給出執行個體代碼: server.py,用來啟動web伺服器:
#coding:utf-8
import tornado.ioloop
import sys
from application import application
PORT = '8080'
if __name__ == "__main__":
if len(sys.argv) > 1:
PORT = sys.argv[1]
application.listen(PORT)
print 'Development server is running at http://127.0.0.1:%s/' % PORT
print 'Quit the server with CONTROL-C'
tornado.ioloop.IOLoop.instance().start()
複制
application.py,可以作為settings:
#coding:utf-8
#author:the5fire
from urls import urls
import tornado.web
import os
SETTINGS = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
)
application = tornado.web.Application(
handlers = urls,
**SETTINGS
)
複制
urls.py:
#coding:utf-8
from handlers.index import MainHandler
urls = [
(r'/', MainHandler),
]
複制
handlers/index.py:
#coding:utf-8
import tornado.web
from model.entity import Entity
class MainHandler(tornado.web.RequestHandler):
def get(self):
entity = Entity.get('the5fire\'s blog')
self.render('index.html', entity = entity)
複制
model/entity.py:
#coding:utf-8
class Entity(object):
def __init__(self, name):
self.name = name
@staticmethod
def get(name):
return Entity(name)
複制
templates/index.html:
<!DOCYTYPE html>
<html>
<head>
<meta type="utf-8">
<title>首頁</title>
<link href="/static/css/index.css" media="screen" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>Hello, tornado World!</h1>
<h2>by <a href="http://www.the5fire.com" target="_blank">{{entity.name}}</a></h2>
</body>
</html>
複制
static/css/index.css:
.. code:: html
/**
author:the5fire
**/
body {
background-color:#ccc;
}
複制
大體上就這些,當然所有的東西都不是不可變的,應該按照自己的喜好來寫。 最後運作的時候通過:python server.py 8000 代碼可以線上檢視,我的github庫,有很多代碼哦:https://github.com/the5fire/practice_demo/tree/master/learn_tornado/mvc_hello