CherryPy-도구 상자

CherryPy 내에서 기본 제공 도구는 CherryPy 라이브러리를 호출하는 단일 인터페이스를 제공합니다. CherryPy에 정의 된 도구는 다음과 같은 방법으로 구현할 수 있습니다.

  • 구성 설정에서
  • Python 데코레이터 또는 페이지 핸들러의 특수 _cp_config 속성을 통해
  • 모든 함수 내에서 적용 할 수있는 Python 콜 러블

기본 인증 도구

이 도구의 목적은 애플리케이션에서 설계된 애플리케이션에 기본 인증을 제공하는 것입니다.

인수

이 도구는 다음 인수를 사용합니다-

이름 기본 기술
왕국 N / A 영역 값을 정의하는 문자열입니다.
사용자 N / A 형식의 사전-username : password 또는 그러한 사전을 반환하는 Python 호출 가능 함수.
암호화 없음 클라이언트가 반환 한 비밀번호를 암호화하고 사용자 사전에 제공된 암호화 된 비밀번호와 비교하는 데 사용되는 Python 콜 러블입니다.

작동 원리를 이해하기 위해 예를 들어 보겠습니다.

import sha
import cherrypy

class Root:
@cherrypy.expose
def index(self):

return """
<html>
   <head></head>
   <body>
      <a href = "admin">Admin </a>
   </body>
</html>
""" 

class Admin:

@cherrypy.expose
def index(self):
return "This is a private area"

if __name__ == '__main__':
def get_users():
# 'test': 'test'
return {'test': 'b110ba61c4c0873d3101e10871082fbbfd3'}
def encrypt_pwd(token):

return sha.new(token).hexdigest()
   conf = {'/admin': {'tools.basic_auth.on': True,
      tools.basic_auth.realm': 'Website name',
      'tools.basic_auth.users': get_users,
      'tools.basic_auth.encrypt': encrypt_pwd}}
   root = Root()
root.admin = Admin()
cherrypy.quickstart(root, '/', config=conf)

그만큼 get_users함수는 하드 코딩 된 사전을 반환하지만 데이터베이스 또는 다른 곳에서 값을 가져옵니다. 클래스 관리자는 CherryPy의 인증 내장 도구를 사용하는이 기능을 포함합니다. 인증은 비밀번호와 사용자 ID를 암호화합니다.

침입자가 암호를 인코딩하고 디코딩 할 수 있기 때문에 기본 인증 도구는 실제로 안전하지 않습니다.

캐싱 도구

이 도구의 목적은 CherryPy 생성 콘텐츠의 메모리 캐싱을 제공하는 것입니다.

인수

이 도구는 다음 인수를 사용합니다-

이름 기본 기술
invalid_methods ( "POST", "PUT", "DELETE") 캐시되지 않을 HTTP 메서드 문자열의 튜플입니다. 이러한 메서드는 또한 리소스의 캐시 된 복사본을 무효화 (삭제)합니다.
cache_Class MemoryCache 캐싱에 사용할 클래스 객체

디코딩 도구

이 도구의 목적은 들어오는 요청 매개 변수를 디코딩하는 것입니다.

인수

이 도구는 다음 인수를 사용합니다-

이름 기본 기술
부호화 없음 콘텐츠 유형 헤더를 찾습니다.
Default_encoding "UTF-8" 제공되거나 발견되지 않은 경우 사용할 기본 인코딩입니다.

작동 원리를 이해하기 위해 예를 들어 보겠습니다.

import cherrypy
from cherrypy import tools

class Root:
@cherrypy.expose
def index(self):

return """ 
<html>
   <head></head>
   <body>
      <form action = "hello.html" method = "post">
         <input type = "text" name = "name" value = "" />
         <input type = ”submit” name = "submit"/>
      </form>
   </body>
</html>
"""

@cherrypy.expose
@tools.decode(encoding='ISO-88510-1')
def hello(self, name):
return "Hello %s" % (name, )
if __name__ == '__main__':
cherrypy.quickstart(Root(), '/')

위의 코드는 사용자로부터 문자열을 가져 와서 사용자를 "hello.html"페이지로 리디렉션하여 지정된 이름의 "Hello"로 표시합니다.

위 코드의 출력은 다음과 같습니다.

hello.html