如何为Django框架的RequestFactory请求添加自定义请求头?
Django RequestFactory添加自定义请求头方法
Django 的 RequestFactory 各类HTTP请求方法(get/post/put等)没有单独的headers参数,所有自定义请求头需要按照WSGI规范转换键名后,直接作为关键字参数传入,或者整合成字典后解包传入。
请求头键名转换规则
- 自定义请求头的键名全部转为大写
- 键名中的横杠
-替换为下划线_ - 键名前添加
HTTP_前缀 - 特殊标准头
CONTENT_TYPE、CONTENT_LENGTH不需要加HTTP_前缀
代码示例
单请求头场景
对应你给出的curl请求curl http://example.com/endpoint -H "Key: Value",构造代码如下:
from django.test import TestCase, RequestFactory class TestClassForMyDjangoApp(TestCase): def test_for_my_app(self): factory = RequestFactory() # 按规则转换头名后直接作为参数传入 request = factory.get('/endpoint/', HTTP_KEY="Value")
多请求头场景
如果有多个自定义请求头,可以先构造符合格式的字典,再解包传入:
from django.test import TestCase, RequestFactory class TestClassForMyDjangoApp(TestCase): def test_for_my_app(self): factory = RequestFactory() # 提前按规则转换请求头的键名 my_headers = { "HTTP_KEY": "value", "HTTP_ANOTHER_KEY": "another_value" } # 解包字典传入get方法 request = factory.get('/endpoint/', **my_headers)
你可以通过request.META属性验证请求头是否传入成功,比如request.META.get("HTTP_KEY")即可取出对应头的值。
内容的提问来源于stack exchange,提问作者tedtanner
相关产品推荐
相关产品推荐

