Comenzando con cherrypy

Hola mundo en CherryPy

Si tiene un virtualenv y CherryPy ya está instalado, cree un archivo hello.py:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import cherrypy

class HelloWorld(object):
    @cherrypy.expose
    def index(self):
        return 'Hello World!'

    @cherrypy.expose
    def greet(self, name):
        return 'Hello {}!'.format(name)

cherrypy.quickstart(HelloWorld())

Luego ejecute el archivo: $ hello.py o $ python hello.py. Deberías ver un resultado similar a este:

[email protected] /develop/myapp $ python hello.py
[06/Nov/2016:05:58:44] ENGINE Listening for SIGTERM.
[06/Nov/2016:05:58:44] ENGINE Bus STARTING
[06/Nov/2016:05:58:44] ENGINE Set handler for console events.
CherryPy Checker:
The Application mounted at '' has an empty config.

[06/Nov/2016:05:58:44] ENGINE Started monitor thread '_TimeoutMonitor'.
[06/Nov/2016:05:58:44] ENGINE Started monitor thread 'Autoreloader'.
[06/Nov/2016:05:58:45] ENGINE Serving on http://127.0.0.1:8080
[06/Nov/2016:05:58:45] ENGINE Bus STARTED

Instrucciones de instalación

Condiciones previas

  • Estas instrucciones suponen que tienes cualquier tipo de Linux, Unix, Mac con bash o Git-bash Windows.
  • Windows: descargue e instale Git-bash para Windows, luego ejecute ‘bash’ desde la línea de comandos.
  • Otros shells además de bash también están bien, simplemente reemplace el comando activar a continuación con activate.csh o Google: “virtualenv active your-shell-name”.

Antes de comenzar, verifique que Python, virtualenv y pip estén instalados:

  • $ python --versión
  • $ virtualenv --version
  • $ pip --versión

Instalar

Cree un directorio con su web/aplicación, cree un entorno e instale el paquete CherryPy.

  • $ mkdir /develop/myapp/
  • $ cd /develop/myapp/
  • $ virtualenv venv
  • $ fuente venv/bin/activate
    • On Windows in Git-bash: $ source venv/Scripts/activate
  • (venv) $ pip install cherrypy
  • (venv) $python
Python 3.5.2 ...
>>> import cherrypy
>>> cherrypy
<module 'cherrypy' from '... venv/site-packages/cherrypy/__init__.py'>

¡Felicidades! Ahora está listo para su primera aplicación CherryPy.

Carga de archivos con CherryPy

Este ejemplo consta de tres partes:

  • server.py: aplicación CherryPy que puede recibir y guardar un archivo.
  • webpage.html - Ejemplo de cómo cargar un archivo a server.py desde una página web.
  • cli.py: ejemplo de cómo cargar un archivo en server.py desde una herramienta de línea de comandos.
  • Bonus - upload.txt - archivo que subirás.

servidor.py

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os
import cherrypy

config = {
    'global' : {
        'server.socket_host' : '127.0.0.1',
        'server.socket_port' : 8080
    }
}


class App:

    @cherrypy.expose
    def upload(self, ufile):
        # Either save the file to the directory where server.py is
        # or save the file to a given path:
        # upload_path = '/path/to/project/data/'
        upload_path = os.path.dirname(__file__)

        # Save the file to a predefined filename
        # or use the filename sent by the client:
        # upload_filename = ufile.filename
        upload_filename = 'saved.txt'

        upload_file = os.path.normpath(
            os.path.join(upload_path, upload_filename))
        size = 0
        with open(upload_file, 'wb') as out:
            while True:
                data = ufile.file.read(8192)
                if not data:
                    break
                out.write(data)
                size += len(data)
        out = '''
File received.
Filename: {}
Length: {}
Mime-type: {}
''' .format(ufile.filename, size, ufile.content_type, data)
        return out


if __name__ == '__main__':
    cherrypy.quickstart(App(), '/', config)

página web.html

<form method="post" action="http://127.0.0.1:8080/upload" enctype="multipart/form-data">
    <input type="file" name="ufile" />
    <input type="submit" />
</form>

clip.py

Este ejemplo requiere el paquete Solicitudes de Python; sin embargo, el archivo se puede enviar al servidor en Python simple.

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import requests

url = 'http://127.0.0.1:8080/upload'
files = {'ufile': open('file.txt', 'rb')}

r = requests.post(url, files=files)

print(r)
print(r.text)

cargar.txt

Hello! This file was uploaded to CherryPy.

Cargar desde el navegador

  • Ejecute $ servidor.py
  • Abra webpage.html en su navegador web.
  • Después de seleccionar el archivo de su unidad y enviarlo, se guardará como saved.txt.

Cargar desde la línea de comandos

  • Abra una consola y ejecute $ server.py
  • Abra otra consola y ejecute $ cli.py
    • Note: Test file upload.txt should be in the same directory with cli.py
  • El archivo upload.txt debe cargarse y guardarse como saved.txt.