cherrypyKomma igång med cherrypy


Anmärkningar

Det här avsnittet ger en översikt över vad cherrypy är och varför en utvecklare kanske vill använda den.

Det bör också nämna alla stora ämnen inom cherrypy och länka till relaterade ämnen. Eftersom dokumentationen för cherrypy är ny kan du behöva skapa initialversioner av relaterade ämnen.

Installations instruktioner

förutsättningar

  • Dessa anvisningar antar att du har någon typ av Linux, Unix, Mac med bash eller Git-bash Windows.
  • Windows: Ladda ner och installera Git-bash för Windows och kör sedan "bash" från kommandoraden.
  • Andra skal än bash är också bra, bara byt ut activate nedan med activate.csh eller Google: " virtualenv aktivera ditt-skal-namn ".

Innan du börjar, kontrollera att Python, virtualenv och pip är installerade:

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

Installera

Skapa en katalog med din webb / app, skapa miljö och installera CherryPy-paketet.

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

Grattis! Nu är du redo för din första CherryPy-applikation.

Filuppladdning med CherryPy

Detta exempel består av tre delar:

  • server.py - CherryPy-program som kan ta emot och spara en fil.
  • webpage.html - Exempel på hur du laddar upp en fil till server.py från en webbsida.
  • cli.py - Exempel på hur man laddar upp en fil till server.py från ett kommandoradsverktyg.
  • Bonus - upload.txt - fil som du kommer att ladda upp.

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

Det här exemplet kräver paket med Python-förfrågningar , men fil kan skickas till servern i vanlig Python.

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

Ladda upp från webbläsaren

  • Kör $ server.py
  • Öppna webpage.html i din webbläsare.
  • När du har valt fil från din enhet och skickat den kommer den att sparas som saved.txt .

Ladda upp från kommandoraden

  • Öppna en konsol och kör $ server.py
  • Öppna en annan konsol och kör $ cli.py
    • Obs! upload.txt ska finnas i samma katalog med cli.py
  • upload.txt ska laddas upp och sparas som saved.txt .

Hej värld i CherryPy

Om du har en virtualenv och CherryPy redan är installerat i det skapar du en fil 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())
 

Kör sedan filen: $ hello.py eller $ python hello.py . Du bör se utdata som liknar detta:

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