我需要为每个add_view添加http-header(X-Accel-Expires)。 对于add_static_view。 理想情况下是传递参数,比如add_view(...,x_accel_expires = 100),add_static_view(...,x_accel_expires = 100),但金字塔可以这样。
我可以在Base View中添加http-header X-Accel-Expires。 我只需要在每个视图中添加一个属性,例如:add_headers =((' X-Accel-Expires',' 100'),.。
但是如何为add_static_view添加此标头?
答案 0 :(得分:1)
对于add_view
的情况,您可以使用view configuration parameters记录的decorator
参数:
函数(或函数本身)的虚线Python名称,用于装饰已注册的可调用视图。将调用装饰器函数,并将视图作为单个参数调用。传递的可调用视图将接受(context,request)。装饰器必须返回一个可调用的替换视图,它也接受(context,request)。装饰器也可以是一个可迭代的装饰器,在这种情况下,它们将以相反的顺序一个接一个地应用于视图。
这是文档中给出的示例:
@view_config(..., decorator=(decorator2, decorator1))
def myview(request):
pass
类似于:
@view_config(...)
@decorator2
@decorator1
def myview(request):
pass
这将允许您编写以下代码:
def accel_headers_factory(expires=100):
def add_accel_headers(view):
def wrapped_view(context, request):
resp = view(context, request)
resp.headers.append(('X-Accel-Expires', expires))
return wrapped_view
return add_accel_headers
然后使用:
@view_config(..., decorator=(accel_headers_factory(500),))
def myview(request):
return {}
然后,这将始终将X-Accel-Expires
标头添加到从视图返回的响应中。
不幸的是,它看起来不像add_static_view
允许你传递一个装饰器参数。