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

2024-05-16 11:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够在Plone中只为特定的HTTP方法类型注册视图,例如仅用于POST,或仅用于客户端提交的特定Accept:头。你知道吗

我知道用常规的ZCML配置指令来配置视图是不可能的。你知道吗

除了编写代理视图,将请求委托给每个HTTP方法的其他视图等等之外,还有其他机制可以用于此目的吗?你知道吗


Tags: 方法目的视图http客户端类型代理plone
2条回答

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

@protect(PostOnly)
...

而对于accept头,我担心您必须手动检查请求数据。你知道吗

通常,大多数视图都遵循更新/渲染模式,一般来说,在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()

相关问题 更多 >