Django:如何方便地向响应中添加HTTP头?

5

我知道我们可以使用HttpResponseInstance['headername'] = 'headervalue'来给http响应添加头信息。但是这样做,我必须重写我正在使用的所有通用视图,这会增加更多的工作量。

是否有一种方便的方法来添加响应头,例如响应的回调或url装饰器?

4个回答

8

1

你应该使用一个中间件类。查看这个讨论。

Django 1.10及以上版本需要实现__init____call__函数。process_response已经被弃用。


0

这里有一个函数可以替换“render”,以便它包括响应头分配,而无需重复值分配到不同的响应头中。如果您不想重复代码并且想将更改应用于某些但不是所有视图,则可能很有用。下面是一个特定的函数,确保渲染不会缓存:

def render_cacheless(action, path, context):
    response = render(action, path, context)
    response["Cache-Control"] = "no-cache, no-store, must-revalidate"
    response["Pragma"] = "no-cache"
    response["Expires"] = "0"

    return response

def home(request):
    return render_cacheless(request, "/path/to/home.html", None)

0
在返回JsonResponse时添加一些自定义的头信息。
from django.http import JsonResponse

data = {'key','value'} # some data

response = JsonResponse(data,status=200)

response['Retry-after'] = 345 # seconds 
response['custom-header'] = 'some value'

return response 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接