cherrypyAan de slag met cherrypy


Opmerkingen

Deze sectie geeft een overzicht van wat cherrypy is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook alle grote onderwerpen binnen cherrypy vermelden en een link naar de gerelateerde onderwerpen bevatten. Aangezien de Documentatie voor cherrypy nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Installatie instructies

randvoorwaarden

  • Deze instructies veronderstellen dat je elk type Linux, Unix, Mac met bash of Git-bash Windows hebt.
  • Windows: download en installeer Git-bash voor Windows en voer vervolgens 'bash' uit vanaf de opdrachtregel.
  • Andere schelpen dan bash zijn ook goed, vervang gewoon de activate hieronder commando activate.csh of Google: " virtualenv activeer je-shell-naam ".

Controleer voordat u begint of Python, virtualenv en pip zijn geïnstalleerd:

  • $ python --version
  • $ virtualenv --version
  • $ pip --version

Installeren

Maak een map met uw web / app, maak een omgeving en installeer het CherryPy-pakket.

  • $ mkdir /develop/myapp/
  • $ cd /develop/myapp/
  • $ virtualenv venv
  • $ source venv/bin/activate
    • Op 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'>
 

Gefeliciteerd! Nu bent u klaar voor uw eerste CherryPy-toepassing.

Bestanden uploaden met CherryPy

Dit voorbeeld bestaat uit drie delen:

  • server.py - CherryPy-toepassing die een bestand kan ontvangen en opslaan.
  • webpage.html - Voorbeeld van het uploaden van een bestand naar server.py vanaf een webpagina.
  • cli.py - Voorbeeld van het uploaden van een bestand naar server.py vanuit een opdrachtregelprogramma.
  • Bonus - upload.txt - bestand dat u wilt uploaden.

server.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)
 

webpage.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>
 

cli.py

Dit voorbeeld vereist een Python-aanvragenpakket , maar het bestand kan in gewone Python naar de server worden verzonden.

#!/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)
 

upload.txt

Hello! This file was uploaded to CherryPy.
 

Uploaden vanuit browser

  • Voer $ server.py
  • Open webpage.html in uw webbrowser.
  • Nadat u het bestand van uw schijf hebt geselecteerd en het hebt saved.txt , wordt het opgeslagen als saved.txt .

Uploaden vanaf opdrachtregel

  • Open een console en voer $ server.py
  • Open een andere console en voer $ cli.py
    • Opmerking: upload.txt moet in dezelfde map staan als cli.py
  • Bestand upload.txt moet worden geüpload en opgeslagen als saved.txt .

Hallo wereld in CherryPy

Als u een virtualenv hebt en CherryPy al is geïnstalleerd, maakt u een bestand 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())
 

$ hello.py vervolgens het bestand uit: $ hello.py of $ python hello.py . Je zou een soortgelijke output moeten zien:

user@computer /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