cherrypycherrypy 시작하기


비고

이 섹션에서는 cherrypy가 무엇인지, 왜 개발자가 그것을 사용하려고하는지에 대한 개요를 제공합니다.

또한 체리 피 (cherrypy) 내의 큰 주제를 언급하고 관련 주제에 링크해야합니다. cherrypy에 대한 문서가 새롭기 때문에 관련 주제의 초기 버전을 만들어야 할 수도 있습니다.

설치 지침

전제 조건

  • 이 지침에서는 bash 또는 Git-bash Windows를 사용하는 모든 유형의 Linux, Unix, Mac이 있다고 가정합니다.
  • Windows : Windows 용 Git-bash를 다운로드하여 설치 한 다음 명령 줄에서 'bash'를 실행하십시오.
  • bash 이외의 쉘도 괜찮습니다. 아래 activate 명령을 activate.csh 또는 Google로 대체하십시오 : " virtualenv activate your-shell-name ".

시작하기 전에 Python, virtualenv 및 pip가 설치되어 있는지 확인하십시오.

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

설치

웹 / 앱으로 디렉토리를 만들고 환경을 만들고 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로 파일 업로드

이 예제는 세 부분으로 구성됩니다.

  • server.py - 파일을 받고 저장할 수있는 CherryPy 응용 프로그램입니다.
  • webpage.html - 웹 페이지에서 파일을 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 요청 패키지를 필요로하지만 파일은 일반 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 실행하십시오.
  • 웹 브라우저에서 webpage.html 을 엽니 다.
  • 드라이브에서 파일을 선택하여 제출하면 saved.txt 로 저장됩니다.

명령 줄에서 업로드

  • 하나의 콘솔을 열고 $ server.py 실행하십시오.
  • 다른 콘솔을 열고 $ cli.py 실행 $ cli.py
    • 참고 : 테스트 파일 upload.txtcli.py 와 동일한 디렉토리에 cli.py
  • upload.txt 파일을 업로드하여 saved.txt 저장해야합니다.

CherryPy의 안녕하세요 세상

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