CherryPy 文件系統(tǒng)

2023-12-31 21:57 更新

該應(yīng)用程序的文件系統(tǒng)顯示在以下屏幕截圖中 -

文件系統(tǒng)

以下是我們?cè)谖募到y(tǒng)中擁有的各種文件的簡要說明 -

  • config.py - 每個(gè)應(yīng)用程序都需要配置文件和加載它的方法。 可以在config.py中定義此功能。
  • controllers.py - MVC是用戶遵循的流行設(shè)計(jì)模式。 controllers.py是實(shí)現(xiàn)將安裝在cherrypy.tree上的所有對(duì)象的地方。
  • models.py - 此文件直接與數(shù)據(jù)庫交互以獲取某些服務(wù)或存儲(chǔ)持久數(shù)據(jù)。
  • server.py - 此文件與生產(chǎn)就緒的Web服務(wù)器交互,該服務(wù)器可與負(fù)載平衡代理正常工作。
  • Static - 它包含所有CSS和圖像文件。
  • Views - 它包含給定應(yīng)用程序的所有模板文件。

例子 (Example)

讓我們?cè)敿?xì)了解創(chuàng)建CherryPy應(yīng)用程序的步驟。

Step 1 - 創(chuàng)建應(yīng)包含應(yīng)用程序的應(yīng)用程序。

Step 2 - 在目錄中,創(chuàng)建一個(gè)與項(xiàng)目對(duì)應(yīng)的python包。 創(chuàng)建gedit目錄并在其中包含_init_.py文件。

Step 3 - 在包內(nèi),包含具有以下內(nèi)容的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])

Step 4 - 考慮用戶通過表單輸入值的應(yīng)用程序。 我們?cè)趹?yīng)用程序中包含兩個(gè)表單 - index.html和submit.html。

Step 5 - 在上面的控制器代碼中,我們有index() ,這是一個(gè)默認(rèn)函數(shù),如果調(diào)用特定的控制器,則首先加載。

Step 6 - index()方法的實(shí)現(xiàn)可以通過以下方式更改 -

@cherrypy.expose
   def index(self):
      tmpl = loader.load('index.html')
      return tmpl.generate(title='Sample').render('html', doctype='html')

Step 7 - 這將在啟動(dòng)給定應(yīng)用程序時(shí)加載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>

Step 8 - 如果要?jiǎng)?chuàng)建一個(gè)接受名稱和標(biāo)題等值的表單,則必須在controller.py的Root類中添加一個(gè)方法。

@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')

Step 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>

Step 10 - 您將收到以下輸出 -

文件系統(tǒng)輸出

這里,方法名稱定義為“POST”。 交叉驗(yàn)證文件中指定的方法始終很重要。 如果方法包含“POST”方法,則應(yīng)在適當(dāng)?shù)淖侄沃性跀?shù)據(jù)庫中重新檢查這些值。

如果方法包含“GET”方法,則要保存的值將在URL中可見。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)