CherryPy-작동하는 애플리케이션

풀 스택 응용 프로그램은 일부 명령 또는 파일 실행을 통해 새 응용 프로그램을 만드는 기능을 제공합니다.

web2py 프레임 워크와 같은 Python 애플리케이션을 고려하십시오. 전체 프로젝트 / 애플리케이션은 MVC 프레임 워크 측면에서 생성됩니다. 마찬가지로 CherryPy를 사용하면 사용자가 요구 사항에 따라 코드 레이아웃을 설정하고 구성 할 수 있습니다.

이 장에서는 CherryPy 애플리케이션을 생성하고 실행하는 방법에 대해 자세히 알아 봅니다.

파일 시스템

응용 프로그램의 파일 시스템은 다음 스크린 샷에 나와 있습니다.

다음은 파일 시스템에있는 다양한 파일에 대한 간략한 설명입니다.

  • config.py− 모든 응용 프로그램에는 구성 파일과로드 방법이 필요합니다. 이 기능은 config.py에서 정의 할 수 있습니다.

  • controllers.py− MVC는 사용자에게 인기있는 디자인 패턴입니다. controllers.py는 cherrypy.tree에 마운트 될 모든 객체가 구현되는 곳입니다 .

  • models.py −이 파일은 일부 서비스 또는 영구 데이터 저장을 위해 데이터베이스와 직접 상호 작용합니다.

  • server.py −이 파일은로드 밸런싱 프록시와 제대로 작동하는 프로덕션 준비 웹 서버와 상호 작용합니다.

  • Static − 모든 CSS 및 이미지 파일을 포함합니다.

  • Views − 주어진 응용 프로그램에 대한 모든 템플릿 파일을 포함합니다.

CherryPy 애플리케이션을 만드는 단계를 자세히 알아 보겠습니다.

Step 1 − 해당 응용 프로그램을 포함해야하는 응용 프로그램을 만듭니다.

Step 2− 디렉토리 안에 프로젝트에 해당하는 파이썬 패키지를 생성하십시오. gedit 디렉토리를 만들고 동일한 디렉토리에 _init_.py 파일을 포함합니다.

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

Step 4− 사용자가 양식을 통해 값을 입력하는 응용 프로그램을 고려하십시오. 애플리케이션에 index.html과 submit.html의 두 가지 형식을 포함 해 보겠습니다.

Step 5 − 위의 컨트롤러 용 코드에서 우리는 index(), 이는 기본 함수이며 특정 컨트롤러가 호출되면 먼저로드됩니다.

Step 6 −의 구현 index() 방법은 다음과 같이 변경할 수 있습니다-

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

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

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

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 − 다음 출력을 받게됩니다 −

여기서 메소드 이름은 "POST"로 정의됩니다. 파일에 지정된 방법을 교차 검증하는 것은 항상 중요합니다. 방법에 "POST"방법이 포함 된 경우 해당 필드의 데이터베이스에서 값을 다시 확인해야합니다.

메소드에“GET”메소드가 포함 된 경우 저장할 값이 URL에 표시됩니다.