是否可以在add_view中使用http-header x-accel-expires,从Pyramid添加add_static_view?

时间:2014-07-20 19:53:16

标签: python http-headers pyramid

我需要为每个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添加此标头?

1 个答案:

答案 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允许你传递一个装饰器参数。