如何为特定的HTTP方法类型注册Plone视图

时间:2015-06-30 06:23:01

标签: python plone

我希望能够仅针对特定的HTTP方法类型在Plone中注册视图,例如。仅适用于POST,或仅适用于客户提交的特定Accept:标头。

我知道使用常规ZCML配置指令配置View是不可能的。

是否还有其他可用于此目的的机制,缺少编写代理视图,将每个HTTP方法的请求委托给其他视图等等?

2 个答案:

答案 0 :(得分:4)

对于“仅发布”保护,您还可以使用plone.protect的内部功能:

@protect(PostOnly)
...

对于accept标题,我担心您必须手动检查请求数据。

答案 1 :(得分:3)

通常,大多数视图都遵循更新/渲染模式,通常将它放在update方法中是有意义的,这是一个与其他各种库一样进行权限/访问/数据完整性检查的公共位置。完整演示如下:

from AccessControl import Unauthorized
from zope.publisher.browser import BrowserPage

class PostOnlyPage(BrowserPage):

    def update(self):
        if not self.request.method == 'POST':
            raise Unauthorized

    def render(self):
        return 'A POST only render'

    def __call__(self):
        self.update()
        return self.render()

如果您这样做是为了使现有的库(例如z3c.form)强制执行访问方法,您可以考虑执行以下操作:

class StrictPostForm(z3c.form.form.PostForm):
    def update(self):
        if not self.request.method == 'POST':
            raise Unauthorized
        super(StrictPostForm, self).update()