在Django REST Framework (DRF) 中使用 drf-spectacular
生成 API 文档时,如果你想要发送带有自定义 JSON 头的请求,可以通过以下步骤实现:
首先,你需要在 DRF 视图中处理自定义头。例如:
from rest_framework.views import APIView
from rest_framework.response import Response
class CustomHeaderView(APIView):
def get(self, request, format=None):
custom_header = request.META.get('HTTP_X_CUSTOM_HEADER')
return Response({'custom_header': custom_header})
如果你需要在序列化器中使用自定义头,可以在序列化器中进行处理。
在编写测试时,你可以使用 APIClient
发送带有自定义头的请求:
from rest_framework.test import APITestCase, APIClient
class CustomHeaderTests(APITestCase):
def setUp(self):
self.client = APIClient()
def test_custom_header(self):
response = self.client.get('/custom-header/', HTTP_X_CUSTOM_HEADER='test_value')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['custom_header'], 'test_value')
原因:可能是由于自定义头的名称不正确,或者在请求中没有正确设置。
解决方法:
HTTP_X_CUSTOM_HEADER
格式来访问自定义头。原因:drf-spectacular 默认不会自动检测自定义头,需要手动添加。
解决方法:
@extend_schema
装饰器来手动添加自定义头信息:from drf_spectacular.utils import extend_schema, extend_schema_view
from drf_spectacular.types import OpenApiTypes
@extend_schema(request=None, responses={200: {'type': 'object', 'properties': {'custom_header': {'type': 'string'}}}})
@extend_schema_view(get=CustomHeaderView.get)
class CustomHeaderView(APIView):
def get(self, request, format=None):
custom_header = request.META.get('HTTP_X_CUSTOM_HEADER')
return Response({'custom_header': custom_header})
通过以上步骤,你可以在 DRF 中发送并处理带有自定义 JSON 头的请求,并确保 drf-spectacular 正确生成相关文档。
领取专属 10元无门槛券
手把手带您无忧上云