cherrypy開始使用cherrypy


備註

本節概述了cherrypy是什麼,以及開發人員為什麼要使用它。

它還應該提及cherrypy中的任何大型主題,並鏈接到相關主題。由於cherrypy文檔是新的,您可能需要創建這些相關主題的初始版本。

安裝說明

前提條件

  • 這些說明假設你有任何類型的Linux,Unix,Mac與bash或Git-bash Windows。
  • Windows:下載並安裝適用於Windows的Git-bash ,然後從命令行執行'bash'。
  • 除了bash之外的其他shell也可以,只需用activate.csh 或Google替換下面的activate 命令:“ virtualenv activate your-shell-name ”。

在開始之前,請檢查是否已安裝Python,virtualenv和pip:

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

安裝

使用您的web / app創建目錄,創建環境並安裝CherryPy包。

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

恭喜!現在您已準備好第一個CherryPy應用程序。

使用CherryPy上傳文件

這個例子由三部分組成:

  • server.py - 可以接收和保存文件的CherryPy應用程序。
  • webpage.html - 如何從網頁上傳文件到server.py的示例。
  • cli.py - 如何從命令行工具將文件上載到server.py的示例。
  • 獎金 - 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請求包,但是文件可以用普通的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

從命令行上傳

  • 打開一個控制台並運行$ server.py
  • 打開另一個控制台並運行$ cli.py
    • 注意:測試文件upload.txt 應與cli.py 位於同一目錄中
  • 文件upload.txt 應上傳並保存為saved.txt

CherryPy中的Hello世界

如果你有virtualenv並且已經安裝了CherryPy,請創建一個文件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