Cherrypy-a-working-application

提供:Dev Guides
移動先:案内検索

CherryPy-実用的なアプリケーション

フルスタックアプリケーションは、ファイルのコマンドまたは実行を介して新しいアプリケーションを作成する機能を提供します。

web2pyフレームワークのようなPythonアプリケーションを検討してください。プロジェクト/アプリケーション全体がMVCフレームワークの観点から作成されます。 同様に、CherryPyを使用すると、ユーザーは要件に従ってコードのレイアウトを設定および構成できます。

この章では、CherryPyアプリケーションを作成して実行する方法を詳細に学習します。

ファイルシステム

アプリケーションのファイルシステムは、次のスクリーンショットに示されています-

ファイルシステム

ここに私たちがファイルシステムに持っているさまざまなファイルの簡単な説明があります-

  • config.py -すべてのアプリケーションには設定ファイルとそれをロードする方法が必要です。 この機能はconfig.pyで定義できます。
  • controllers.py -MVCはユーザーに人気のあるデザインパターンです。 controllers.pyは、_cherrypy.tree_にマウントされるすべてのオブジェクトが実装される場所です。
  • models.py -このファイルは、一部のサービスまたは永続データの保存のためにデータベースと直接やり取りします。
  • server.py -このファイルは、ロードバランシングプロキシで適切に動作する本番対応Webサーバーと対話します。
  • 静的-すべてのCSSおよび画像ファイルが含まれます。
  • Views -特定のアプリケーションのすべてのテンプレートファイルが含まれます。

CherryPyアプリケーションを作成する手順を詳しく学びましょう。

  • ステップ1 *-アプリケーションを含むアプリケーションを作成します。
  • ステップ2 *-ディレクトリ内で、プロジェクトに対応するpythonパッケージを作成します。 geditディレクトリを作成し、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 *-ユーザーがフォームを介して値を入力するアプリケーションを考えます。 アプリケーションにindexlとsubmitlの2つのフォームを含めましょう。

ステップ5 *-上記のコントローラーのコードには、 index()*があります。これはデフォルトの関数であり、特定のコントローラーが呼び出されると最初にロードされます。

ステップ6 *- index()*メソッドの実装は、次の方法で変更できます-

@cherrypy.expose
   def index(self):
      tmpl = loader.load('indexl')

      return tmpl.generate(title='Sample').render('html', doctype='html')
  • ステップ7 *-これは、指定されたアプリケーションの起動時にindexlをロードし、指定された出力ストリームに送信します。 indexlファイルは次のとおりです-

インデックス

<!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 のRootクラスにメソッドを追加することが重要です。

@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('submitl')
      streamValue = tmp.generate()

      return streamValue.render('html', doctype='html')
*Step 9* -submitlに含まれるコードは次のとおりです-
<!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に表示されます。