📅  最后修改于: 2020-10-26 05:21:56             🧑  作者: Mango
在CherryPy中,内置工具提供了一个接口来调用CherryPy库。 CherryPy中定义的工具可以通过以下方式实现-
该工具的目的是向应用程序中设计的应用程序提供基本身份验证。
该工具使用以下参数-
Name | Default | Description |
---|---|---|
realm | N/A | String defining the realm value. |
users | N/A | Dictionary of the form − username:password or a Python callable function returning such a dictionary. |
encrypt | None | Python callable used to encrypt the password returned by the client and compare it with the encrypted password provided in the users dictionary. |
让我们以一个例子来了解它是如何工作的-
import sha
import cherrypy
class Root:
@cherrypy.expose
def index(self):
return """
Admin
"""
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生成内容的内存缓存。
该工具使用以下参数-
Name | Default | Description |
---|---|---|
invalid_methods | (“POST”, “PUT”, “DELETE”) | Tuples of strings of HTTP methods not to be cached. These methods will also invalidate (delete) any cached copy of the resource. |
cache_Class | MemoryCache | Class object to be used for caching |
该工具的目的是解码传入的请求参数。
该工具使用以下参数-
Name | Default | Description |
---|---|---|
encoding | None | It looks for the content-type header |
Default_encoding | “UTF-8” | Default encoding to be used when none is provided or found. |
让我们以一个例子来了解它是如何工作的-
import cherrypy
from cherrypy import tools
class Root:
@cherrypy.expose
def index(self):
return """
"""
@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