Учебники

CherryPy — рабочее приложение

Приложения с полным стеком предоставляют возможность создания нового приложения с помощью некоторой команды или выполнения файла.

Рассмотрим приложения Python, такие как web2py framework; весь проект / приложение создано в рамках MVC. Кроме того, CherryPy позволяет пользователю устанавливать и настраивать макет кода в соответствии с их требованиями.

В этой главе мы подробно узнаем, как создать приложение CherryPy и выполнить его.

Файловая система

Файловая система приложения показана на следующем снимке экрана —

Файловая система

Вот краткое описание различных файлов, которые мы имеем в файловой системе —

  • config.py — Каждому приложению нужен файл конфигурации и способ его загрузки. Эта функциональность может быть определена в config.py.

  • controllers.py — MVC — популярный шаблон проектирования, которым следуют пользователи. В controllers.py реализованы все объекты, которые будут смонтированы на cherrypy.tree .

  • models.py — этот файл взаимодействует с базой данных напрямую для некоторых служб или для хранения постоянных данных.

  • server.py — этот файл взаимодействует с готовым к работе веб-сервером, который корректно работает с прокси-сервером балансировки нагрузки.

  • Статический — включает в себя все CSS и файлы изображений.

  • Представления — включает в себя все файлы шаблонов для данного приложения.

config.py — Каждому приложению нужен файл конфигурации и способ его загрузки. Эта функциональность может быть определена в config.py.

controllers.py — MVC — популярный шаблон проектирования, которым следуют пользователи. В controllers.py реализованы все объекты, которые будут смонтированы на cherrypy.tree .

models.py — этот файл взаимодействует с базой данных напрямую для некоторых служб или для хранения постоянных данных.

server.py — этот файл взаимодействует с готовым к работе веб-сервером, который корректно работает с прокси-сервером балансировки нагрузки.

Статический — включает в себя все CSS и файлы изображений.

Представления — включает в себя все файлы шаблонов для данного приложения.

пример

Давайте подробно изучим шаги по созданию приложения 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 — Рассмотрим приложение, в котором пользователь вводит значение через форму. Давайте включим в приложение две формы — 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. Важно добавить метод в класс Root в 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.