全堆棧應用程式提供了一種通過某些命令或執行文件來創建新應用程式的工具。
考慮像web2py框架這樣的Python應用程式;整個項目/應用程式是根據MVC框架創建的。同樣,CherryPy允許用戶根據自己的需求設置和配置代碼的布局。
在本章中,我們將詳細學習如何創建CherryPy應用程式並執行它。
File System
應用程式的文件系統如下圖所示−
下面是對文件系統中的各種文件的簡要描述;
py−每個應用程式都需要一個配置文件和加載它的方法。此功能可以在config.py中定義。
controllers.py−MVC是用戶遵循的流行設計模式。controllers.py是實現所有對象的位置,這些對象將安裝在cherrypy.tree上。
models.py−此文件直接與資料庫交互,用於某些服務或存儲持久數據。
server.py−此文件與可正常使用負載平衡代理的生產就緒web伺服器交互。
Static−它包含所有CSS和圖像文件。
視圖包括給定應用程式的所有模板文件。
Example
讓我們詳細了解創建CherryPy應用程式的步驟。
步驟1−創建一個應包含該應用程式的應用程式。
步驟2−在目錄中,創建與項目對應的python包。創建gedit目錄,並在其中包含\u init\py文件。
步驟3−在包中,包含controllers.py文件,其中包含以下內容−
#!/usr/bin/env python import cherrypy class Root(object): def __init__(self, data): self.data = data @cherrypy.expose def index(self): return 'Hi! Welcome to your application' def main(filename): data = {} # will be replaced with proper functionality later # configuration file cherrypy.config.update({ 'tools.encode.on': True, 'tools.encode.encoding': 'utf-8', 'tools.decode.on': True, 'tools.trailing_slash.on': True, 'tools.staticdir.root': os.path.abspath(os.path.dirname(__file__)), }) cherrypy.quickstart(Root(data), '/', { '/media': { 'tools.staticdir.on': True, 'tools.staticdir.dir': 'static' } }) if __name__ == '__main__': main(sys.argv[1])
步驟4−考慮用戶通過表單輸入值的應用程式。讓我們在應用程式中包含兩個表單-index.html和submit.html。
步驟5−在上面的控制器代碼中,我們有一個index(),這是一個默認函數,如果調用了特定的控制器,則首先加載。
步驟6−可以按以下方式更改index()方法的實現−
@cherrypy.expose def index(self): tmpl = loader.load('index.html') return tmpl.generate(title='Sample').render('html', doctype='html')
步驟7−這將在啓動給定應用程式時加載index.html並將其指向給定的輸出流。index.html文件如下所示−
index.html
<!DOCTYPE html > <html> <head> <title>Sample</title> </head> <body class = "index"> <div id = "header"> <h1>Sample Application</h1> </div> <p>Welcome!</p> <div id = "footer"> <hr> </div> </body> </html>
步驟8−如果要創建一個接受名稱和標題等值的窗體,則必須將方法添加到controller.py中的根類。
@cherrypy.expose def submit(self, cancel = False, **value): if cherrypy.request.method == 'POST': if cancel: raise cherrypy.HTTPRedirect('/') # to cancel the action link = Link(**value) self.data[link.id] = link raise cherrypy.HTTPRedirect('/') tmp = loader.load('submit.html') streamValue = tmp.generate() return streamValue.render('html', doctype='html')
步驟9−submit.html中包含的代碼如下−
<!DOCTYPE html> <head> <title>Input the new link</title> </head> <body class = "submit"> <div id = " header"> <h1>Submit new link</h1> </div> <form action = "" method = "post"> <table summary = ""> <tr> <th><label for = " username">Your name:</label></th> <td><input type = " text" id = " username" name = " username" /></td> </tr> <tr> <th><label for = " url">Link URL:</label></th> <td><input type = " text" id=" url" name= " url" /></td> </tr> <tr> <th><label for = " title">Title:</label></th> <td><input type = " text" name = " title" /></td> </tr> <tr> <td></td> <td> <input type = " submit" value = " Submit" /> <input type = " submit" name = " cancel" value = "Cancel" /> </td> </tr> </table> </form> <div id = "footer"> </div> </body> </html>
步驟10−您將收到以下輸出−
這裡,方法名定義爲「POST」。交叉驗證文件中指定的方法總是很重要的。如果該方法包含「POST」方法,則應在資料庫中的相應欄位中重新檢查這些值。
如果方法包含「GET」方法,則要保存的值將在URL中可見。