模塊化:將各種負責處理不同功能的代碼封裝在不同的類型中,將各種相似功能的類型封裝在py模塊中,通過模塊和模塊之間的相互協同完成功能的整體流程的開發實現的過程,稱之為模塊化開發。
在tornado框架的基礎上,可以實現開發人員自定義的MVC開發模式。
一般參考Django的項目文件結構。
完整的web項目組成部分:
?。?網頁視圖[templates]
*靜態資源[static]
?。獢祿P蚚models]
?。獢祿P凸芾韀models_manager]
*視圖處理類[views]
?。椖柯酚膳渲眯畔urls]
*項目配置信息[settings]
?。绦騿拥娜肟赱main]
形成一個完整web項目的文件結構,這樣的結構一旦完成,利于高擴展和高維護性。
-
main文件 主項目啟動
# web項目啟動的入口 import tornado.web from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop #導入拆分的路由丶設置模塊 from mymodules import urls, settings # 自定義Application,繼承tornado的Appliation,方便擴展增加新功能 class Application(tornado.web.Application): def __init__(self): #添加自己的模塊設置 super().__init__(urls.urlpatterns, **settings.common) # 自定義主函數 def main(): # 構建一個app應用 app = Application() # 部署項目 server = HTTPServer(app) server.listen(8000) # 啟動輪詢監聽 IOLoop.current().start() # 啟動項目 if __name__ == "__main__": main()
-
setting 文件 項目設置
#項目配置信息模塊 import os BASE_DIR = os.path.dirname(__file__) # 公共配置 common = { "template_path": os.path.join(BASE_DIR, "templates"), "static_path": os.path.join(BASE_DIR, "static"), "debug": True, ...... } # 緩存數據庫redis配置 redis_config = { ..... } ......
-
urls 文件 路由配置
#路由設置,導入拆分的視圖處理模塊 from . import views urlpatterns = [ (r'/', views.IndexHandler), ...... ]
-
views 文件 視圖處理
# 引入需要的模塊 from tornado.web import RequestHandler #導入自己定義的數據模型 models 模塊 或 數據管理器 models_manager 模塊 from . import models_manager # 定義一個基礎處理類型用于繼承 class BaseHandler(RequestHandler): # 方便后續對RequestHandler進行擴展 # 增加新的公共功能之后,所有自定義的Handler類型都會具備這個功能 pass # 定義主頁視圖處理類 class IndexHandler(BaseHandler): def get(self): # 查詢所有的用戶信息 person_list = models_manager.PersonManager().find_condition() self.render("index.html", plist=person_list) # 定義其他視圖處理類 ......
-
models 文件 數據模型
#需要的模塊 from sqlalchemy import Column, String, Integer from sqlalchemy.ext.declarative import declarative_base # 構建一個基礎類型,可后期擴展 Base = declarative_base() # 定義自定義數據類型 class Person(Base): # 指定關聯的表數據 __tablename__ = "person" # 定義屬性字段 id = Column(Integer, primary_key=True) name = Column(String(50)) age = Column(Integer)
-
models_manager 數據模型管理器
# 引入需要的模塊 from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker #使用MySQL數據庫 import pymysql pymysql.install_as_MySQLdb() #導入自己拆分的數據類型模塊 from . import models # 定義一個基礎管理類 class BaseManager: def __init__(self): # 創建數據庫引擎 self.engine = create_engine("mysql://root@localhost/py1709_torn_db1", encoding="utf-8", echo=True) # 創建連接會話 Session = sessionmaker(bind=self.engine) self.session = Session() #公用方法 def update_obj(self, **kw): self.session.commit() def delete_obj(self, **kw): self.session.delete(**kw) self.session.commit() def find_single(self, **kwargs): raise Exception("這個函數必須重寫") def find_condition(self, **kwargs): raise Exception("這個函數必須重寫") #定義某個類型的具體管理類 class PersonManager(BaseManager): def find_single(self, **kwargs): return self.session.query(models.Person).filter(**kwargs).one() def find_condition(self, **kwargs): return self.session.query(models.Person).filter(**kwargs) def create_obj(self, **kw): p = Person(**kw) self.session.add(p) self.session.commit()
附加
添加一個' __init__ ' 文件 使各個模塊默認為一個包。
一樣創建templates文件和static文件存放網頁和靜態文件