📜  CherryPy-工具箱

📅  最后修改于: 2020-10-26 05:21:56             🧑  作者: Mango


在CherryPy中,内置工具提供了一个接口来调用CherryPy库。 CherryPy中定义的工具可以通过以下方式实现-

  • 从配置设置
  • 作为Python装饰器或通过页面处理程序的特殊_cp_config属性
  • 作为可在任何函数应用的Python可调用对象

基本身份验证工具

该工具的目的是向应用程序中设计的应用程序提供基本身份验证。

争论

该工具使用以下参数-

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

解码工具输出