cherrypycherrypyを使い始める


備考

このセクションでは、cherrypyの概要と、なぜ開発者がそれを使いたいのかを概説します。

また、cherrypy内の大きなテーマについても触れ、関連するトピックにリンクしてください。 cherrypyのドキュメンテーションは新しいので、それらの関連トピックの初期バージョンを作成する必要があります。

インストール手順

前提条件

  • これらの手順では、bashまたはGit-bash Windowsを搭載したLinux、Unix、Macのいずれかのタイプがあると仮定します。
  • Windows: Git-bash for Windowsをダウンロードしてインストールし、コマンドラインから 'bash'を実行します。
  • bashの以外のシェルは、単に置き換える、細かすぎるactivate して以下のコマンドをactivate.csh やGoogle:「 virtualenvのは、あなたのシェル名を活性化させます 」。

始める前に、Python、virtualenv、pipがインストールされていることを確認してください:

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

インストール

Web /アプリでディレクトリを作成し、環境を作成し、CherryPyパッケージをインストールします。

  • $ mkdir /develop/myapp/
  • $ cd /develop/myapp/
  • $ virtualenv venv
  • $ source venv/bin/activate
    • Git-bashのWindows: $ 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'>
 

おめでとう!これで、最初のCherryPyアプリケーションの準備が整いました。

CherryPyによるファイルアップロード

この例は3つの部分で構成されています。

  • server.py - ファイルを受信して​​保存できるCherryPyアプリケーションです。
  • webpage.html - Webページからserver.pyにファイルをアップロードする方法の例。
  • cli.py - コマンドラインツールからファイルをserver.pyにアップロードする方法の例。
  • Bonus - upload.txt - あなたがアップロードするファイル。

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

この例ではPythonリクエストパッケージが必要ですが 、fileはプレーンな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.
 

ブラウザからアップロード

  • $ server.py 実行する
  • Webブラウザでwebpage.html を開きます。
  • ドライブからファイルを選択して送信すると、 saved.txt として保存されsaved.txt

コマンドラインからのアップロード

  • 1つのコンソールを開き、 $ server.py を実行する
  • 別のコンソールを開き、 $ cli.py を実行する
    • 注:テストファイルupload.txt は、 cli.py と同じディレクトリにある必要があります
  • ファイルupload.txt はアップロードしてsaved.txt として保存する必要があります。

CherryPyのこんにちは世界

あなたがvirtualenvを持っていてCherryPyが既にインストールされているなら、 hello.py ファイルを作成して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 または$ python hello.py 実行します。次のような出力が表示されます。

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