Python中Django框架的HttpResponse头部设置问题
刚刚去看了 DJango http 的 Response 的源码,但是好像没看到头部内容组装的部分,那有大神能够解答它 Response 头部的参数是那里来的吗?感谢万分
Python中Django框架的HttpResponse头部设置问题

在Django里设置HttpResponse的头部,直接用HttpResponse对象的headers属性就行,这是个类似字典的东西。比如你想加个自定义的X-Custom-Header:
from django.http import HttpResponse
def my_view(request):
response = HttpResponse("Hello, world!")
response.headers['X-Custom-Header'] = 'MyValue'
# 或者用 response['X-Custom-Header'] = 'MyValue' 也行,老式写法
return response
检查返回的响应,X-Custom-Header: MyValue肯定在头里了。
几个关键点:
headers属性:Django 3.2+ 推荐用这个,它就是个字典。Django 2.2 之前可能得用__setitem__(就是response['Header'] = value)。- 内容类型:通过
content_type参数设置,比如HttpResponse("data", content_type="application/json")。别在headers里手动写Content-Type,容易冲突。 - 状态码:构造函数里设,
HttpResponse("...", status=201)。 - 删除头部:
del response.headers['Header-Name']。 - 批量设置:直接给
headers赋个字典:response.headers = {'Header1': 'val1', 'Header2': 'val2'}。
如果你想在中间件里统一加头部,可以这样:
class CustomHeaderMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
response.headers['X-Processed-By'] = 'MyDjangoApp'
return response
然后去settings.py的MIDDLEWARE里加上这个中间件。
总之,操作response.headers字典就是标准做法。
总结建议:用response.headers这个字典来管理头部最直接。
请问用的什么软件?
dash
谢谢。
😅😅😅表示没有 mac,只能看着眼馋😍😍😍
windows 也有类似的,你可以试试这个 https://zealdocs.org/
我的意思是你 Header 这里不是空的吗?但是最后 response 出来 header 有东西的,那些是在哪里填写的
这部分你可以看源码,是后面设置了__setitem__函数加上去的,参数包括 header,value,先把 header 和 value 用内建的函数重新编码,然后一次性加入_header 字典中,接着是 serialize_headers 函数获取 header 以 bytestring 的格式传给__bytes__或者__str__,然后通过 setdefault 函数设置默认 header 如果预先没有设置 header。
以上就是我从 Django 的源码得到的部分,如果有误请指正
非常感谢
这个是 Django 的中间件自动来帮我们填充的 header,比如说你在 settings 文件没有添加了 DEFAULT_CONTENT_TYPE,也没用在其它地方配置,那么中间件自动就填充。


