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