我想只能爲特定的HTTP方法類型註冊Plone中的視圖,例如。僅針對POST,或者僅針對客戶端提交的特定Accept:
標題。如何爲特定的HTTP方法類型註冊Plone視圖
我知道使用常規ZCML配置指令來配置View是不太可能的。
是否有其他機制可以用於此目的,缺少編寫代理視圖,將請求委託給其他視圖的HTTP方法等等?
我想只能爲特定的HTTP方法類型註冊Plone中的視圖,例如。僅針對POST,或者僅針對客戶端提交的特定Accept:
標題。如何爲特定的HTTP方法類型註冊Plone視圖
我知道使用常規ZCML配置指令來配置View是不太可能的。
是否有其他機制可以用於此目的,缺少編寫代理視圖,將請求委託給其他視圖的HTTP方法等等?
通常大多數視圖都遵循更新/渲染模式,通常將它放在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()
我很想把這個功能加入到plone/zope中。 – vangheem
@ vangheem可能已經可以通過'plone.rest'(https://github.com/plone/plone.rest/blob/master/ src/plone/rest/events.py),但是將一個端點的不同視圖註冊到一個特定的層(比如'layer =「IPOST」'爲正確的層,而默認視圖爲不支持的正確錯誤信息請求)是笨拙。 – metatoaster
因此,首先從IBeforeTraverseEvent訂閱者中添加接口到請求,然後在這些接口上註冊視圖會有訣竅嗎? – Petri