CherryPy - 工具箱
在 CherryPy 中,內建工具提供單個介面來呼叫 CherryPy 庫。CherryPy 中定義的工具可以通過以下方式實現 -
- 從配置設定
- 作為 Python 裝飾器或通過頁面處理程式的特殊
_cp_config
屬性 - 作為 Python 可呼叫,可以從任何函式中應用
基本認證工具
此工具的目的是為應用程式中設計的應用程式提供基本身份驗證。
引數
此工具使用以下引數 -
名稱 | 預設 | 描述 |
---|---|---|
realm |
N/A | 定義領域值的字串。 |
users |
N/A | 表單的字典 - 使用者名稱:密碼或返回此類字典的 Python 可呼叫函式。 |
encrypt |
None | Python callable 用於加密客戶端返回的密碼,並將其與使用者詞典中提供的加密密碼進行比較。 |
例
讓我們舉一個例子來了解它是如何工作的 -
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 函式返回一個硬編碼字典,還從資料庫或其他地方獲取的值。類 admin 包含此函式,該函式使用 CherryPy 的身份驗證內建工具。身份驗證加密密碼和使用者 ID。
基本身份驗證工具並不十分安全,因為密碼可以由入侵者編碼和解碼。
快取工具
此工具的目的是提供 CherryPy 生成內容的記憶體快取。
引數
此工具使用以下引數 -
名稱 | 預設 | 描述 |
---|---|---|
invalid_methods |
(POST ,PUT ,DELETE ) |
不快取 HTTP 方法字串的元組。這些方法還將使資源的任何快取副本無效(刪除)。 |
cache_Class |
MemoryCache | 用於快取的類物件 |
解碼工具
此工具的目的是解碼傳入的請求引數。
引數
此工具使用以下引數 -
名稱 | 預設 | 描述 |
---|---|---|
encoding |
None | 它查詢內容型別標頭 |
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