Django drf-yasg中的Swagger每个路由都需要必填的头部参数LOCALE。

4

是否有可能使头部的locale参数成为应用程序中每个URL必需的参数?我可以在全局配置或每个视图方法中实现它吗?如果是,我该如何做到这一点?

2个回答

5

您没有提供有关视图外观的任何详细信息,因此我将假设它是基于函数而不是基于类的,但这个解决方案可以轻松地在CBV上实现。

使标题成为Swagger的一部分可以通过以下方式实现:

# making a header parameter

from drf_yasg import openapi

header_param = openapi.Parameter('local',openapi.IN_HEADER,description="local header param", type=openapi.IN_HEADER)

# calling it on view

@swagger_auto_schema(manual_parameters=[header_param])
@api_view(['GET', 'PUT', 'POST'])
def test_view(request, pk):

如果你希望在每个视图中使用该功能,一种解决方案是创建一个utils文件夹来制作辅助方法,创建一个辅助方法如下:

# utils.py
from drf_yasg import openapi

def get_header_params(self):
    header_param = openapi.Parameter('local',openapi.IN_HEADER,description="local header param", type=openapi.IN_HEADER)
 
    return [header_param]

使用这个方法,你可以在每个视图中调用它:

# views.py

from utils.get_header_param

@swagger_auto_schema(manual_parameters=get_header_param())
@api_view(['GET', 'PUT', 'POST'])
def test_view(request, pk):
    # your code

@swagger_auto_schema(manual_parameters=get_header_param())
@api_view(['GET', 'PUT', 'POST'])
def test_view_2(request, pk):
    # your code

如果你需要进一步的帮助,你可以查阅实际的文档:https://drf-yasg.readthedocs.io/en/stable/custom_spec.html#the-swagger-auto-schema-decorator

如果你已经开始了这个项目,我建议使用drf-spectacular代替它,即使yasg和django也推荐未来的项目使用它。


0
尝试了Moheb提供的答案,它起作用了。但在稍后的尝试中,Swagger UI显示了变量的输入字段,但我无法看到请求头中的值。 经过多次探索,我意识到以下问题: 在定义本地/自定义标头参数时,请确保变量名称不包含任何下划线。例如,以下代码将无法传递参数的值,因为其名称为local_first,而不是localfirst。
 header_param = openapi.Parameter('local_first',openapi.IN_HEADER,description="local header param", type=openapi.IN_HEADER)

所以,对我有效的正确代码是:

 header_param = openapi.Parameter('localfirst',openapi.IN_HEADER,description="local header param", type=openapi.IN_HEADER)

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