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