CherryPy 学习

CherryPy,一种用于 Python 的、简单而又非常有用的 Web 框架。它所做的全部工作就是以尽可能少的忙乱将 Web 服务器与您的 Python 代码连接。它并不决定使用哪些其他工具,所以您可以从自己的角度自由地选择模板系统、数据库映射程序或者其他工具。 CherryPy 请求 CherryPy 不是依靠 Apache 或者另外的 Web 服务器,而是运行它自己的小型的基于 Python 的 Web 服务器。传统的 Web 服务器在目录树磁盘之外创建一个 Web 空间,而 CherryPy 服务器则在 Python 对象树之外创建它的 Web 空间。 考虑一下对于 URL http://localhost:8080/hello/ 的请求。在传统的 Web 服务器中,这种 URL 相应于 Web 空间根部下面的 hello/ 目录。当您使用 Web 浏览器访问它时,Web 服务器读取 hello/ 目录中的 index.html 文件或者调用该目录中的 index.cgi 脚本作为一个 CGI,并且向您发送输出。 CherryPy Web 服务器不提供根植于磁盘目录中的 Web 空间,而提供根植于特定的 Python 对象 Application.root 中的 Web 空间。若要访问那个对象的每个方法和成员,只需将它的名称附加到根 URL 上即可。所以,hello/ URL 在 CherryPy 中相应于 Application.root.root 的成员 hello。 CherryPy的位置参数 友好URL处理: " /admin/user/8173/schedule"的处理方法:
cherrypy.root.admin.user("8173","schedule")
class Admin:
    def user(self,*args):
        if not args:  #空则抛出HTTP错误
            raise cherrypy.HTTPError(400,"Error")
        args=list(args)  #args是tuple,需要转为list
        id=args.pop(0)
        if args and args[0]=="schedule":
            return self.schedule(id)
        return "You asked for user '%s'"%id
    user.exposed=True
CherryPy2.1中的位置参数只允许出现在default方法中
CherryPy路径搜索顺序
"/admin/user/8192/schedule"
    试搜索cherrypy.root.admin.user.8192.schedule.index...
    cherrypy.root                     存在? Yes.
            .root.admin               存在? Yes.
                 .admin.user          存在? Yes.
                       .user.8192     存在? No.
                       .user.default  是否可调用+暴露? No.
                 .admin.user          是否可调用+暴露? Yes.调用它.
"/admin/search/"
    试搜索cherrypy.root.admin.search.index...
    cherrypy.root                     存在? Yes.
            .root.admin               存在? Yes.
                 .admin.search        存在? Yes.
                       .search.index  存在? Yes.路径到达.
                       .search.index  是否可调用+暴露? Yes.调用它.
"/admin/unknown"
    试搜索cherrypy.root.admin.unknown.index...
    cherrypy.root                     存在? Yes.
            .root.admin               存在? Yes.
                 .admin.unknown       存在? No.
                 .admin.default       是否可调用+暴露? No.
            .root.admin               是否可调用+暴露? No.
            .root.default             是否可调用+暴露? Yes.调用它.

CherryPy主要核心设置选项 [global] server.socket_port 监听端口,默认8080 [global] server.log_file 记录日志,默认关闭 [global] server.log_access_file 存储访问日志,默认是显示到屏幕上 [global] server.log_to_screen 将日志显示到屏幕,默认为True,发布站点最好用False并写入文件 [global] server.log_tracebacks 将跟踪信息写入日志,默认为True。False时只写入500错误 [global] server.max_request_header_size 最大header请求大小(bytes),默认500KB,超过了返回403错误,全局设置,0为不限制。 [global] server.default_content_type 返回信息的缺省类型,默认text/html,(by gashero)全局的 [/path] server.max_request_body_size 最大body请求大小(bytes),默认为100MB。如果请求大于此数字,返回413错误。限制用户上传文件大小的好办法。可以具体到目录。0为不限制。
暴露对象和方法     方法 hello 和 index 上的 装饰符 @cpg.expose 有什么用呢?它告诉 CherryPy,调用该方法来响应 Web 请求没有问题。     在提供静态文件的 Web 网站,假定 Web 空间中的每个文件和目录都计划用于公共消耗。但是也有几处例外,例如,Apache 就不会提供隐藏的文件,如 UNIX® 系统上的 .htaccess。     当您将一个对象树暴露为一个 CherryPy URL 空间时,装饰符是将方法暴露给 CherryPy 的最佳方式,但是也可以通过将其成员 exposed 设置为 True 来暴露一个方法
#@cherrypy.expose
class HelloWorld:
  def index(self):
    return "Hello, world!"
  index.exposed = True

挂载对象空间树
    cherrypy.quickstart(FileDemo(), config=tutconf)
or
    cherrypy.tree.mount(FileDemo(), config=tutconf)
or
    cherrypy.cpg.root = FileDemo()
    cherrypy.server.start()

你可能感兴趣的:(学习)