控制器

概述

控制器负责对用户请求采取行动(大致遵循MVC元模式的术语)。

以下控制器在CubicWeb的机箱外提供。我们按类别列出它们。它们都是在 (cubicweb.web.views.basecontrollers

Browsing

  • 视图控制器与CubicWeb应用程序中的大多数浏览操作关联:它始终实例化 TheMainTemplate 并让结果集/视图调度系统构建整个内容;它处理 ObjectNotFoundNoSelectableObject 以最终用户友好的方式冒泡到其入口点的错误(但其他编程错误会溜过去)

  • jsonpcontroller是 ViewController 它提供了 jsonp 服务。填充可以用指定 callback 请求参数。只有 JSONE出口 / ejsone出口 可以使用视图。如果另一个 vid 已指定,它将被忽略并替换为 JSONE出口 .请求匿名,避免返回敏感数据,降低CSRF攻击风险;

  • 登录/注销控制器发出有效的用户登录或注销请求。

Edition

  • 编辑控制器(请参见 这个 edit controller )处理CRUD操作以响应提交的表单;它与表单紧密关联,并将一些工作委托给表单。

  • 这个 Form validator controller 使用编辑控制器从Ajax上下文提供表单验证,以实现经典的表单处理循环(用户编辑、点击 submit/apply ,通过表单验证器控制器进行服务器端验证,并且用户界面用全局或每个字段的故障信息进行修饰,直到其有效为止)

Other

  • 这个 SendMail controller (web/views/basecontrollers.py)负责发送电子邮件通知

  • mailbugreport控制器(web/views/basecontrollers.py)允许快速 reportbug 应用程序中的特征

  • the cubicweb.web.views.ajaxcontroller.AjaxController (cubicweb.web.views.ajaxcontroller) provides services for Ajax calls, typically using JSON as a serialization format for input, and sometimes using either JSON or XML for output. See 阿贾克斯 chapter for more information.

登记处

所有控制器(应该)都位于全局注册表中的“控制器”命名空间中。

混凝土控制器

大多数API细节应该通过源代码检查来解决,因为不同的控制器有不同的目标。例如,请参见 这个 edit controller 章。

cubicweb.web.controller 包含顶级抽象控制器类及其未实现的入口点 publish(rset=None) 方法。

这里还提供了一些帮手:

  • process rql根据通常从浏览器发出的rql查询(并可通过_cw.form获得)构建结果集 ['RQL'] )

  • validate_cache将强制对HTTP缓存指令(通常是从以前的服务器发出的)->client response进行缓存验证处理);处理HTTP的具体控制器实现(例如,不是sendmail控制器)可能很好地调用在他们的出版过程中。