答案 0 :(得分:1)
如metadata [drf-doc]上的文档中所指定。您可能使用了SimpleMetadata
class [GitHub]。在这里,我们看到这些选项是通过以下方式确定的:
def determine_metadata(self, request, view): metadata = OrderedDict() metadata['name'] = view.get_view_name() metadata['description'] = view.get_view_description() metadata['renders'] = [renderer.media_type for renderer in view.renderer_classes] metadata['parses'] = [parser.media_type for parser in view.parser_classes] if hasattr(view, 'get_serializer'): actions = self.determine_actions(request, view) if actions: metadata['actions'] = actions return metadata
get_view_name
of a APIView
[GitHub]的实现方式为:
def get_view_name(self): """ Return the view name, as used in OPTIONS responses and in the browsable API. """ func = self.settings.VIEW_NAME_FUNCTION return func(self)
settings
因此将默认确定计算视图的函数的名称。由VIEW_NAME_FUNCTION
setting [drf-doc]指定,默认为'rest_framework.views.get_view_name'
。
如果我们检查source code of this get_view_name
function [GitHub],则会看到:
def get_view_name(view): """ Given a view instance, return a textual name to represent the view. This name is used in the browsable API, and in OPTIONS responses. This function is the default for the `VIEW_NAME_FUNCTION` setting. """ # Name may be set by some Views, such as a ViewSet. name = getattr(view, 'name', None) if name is not None: return name name = view.__class__.__name__ name = formatting.remove_trailing_string(name, 'View') name = formatting.remove_trailing_string(name, 'ViewSet') name = formatting.camelcase_to_spaces(name) # Suffix may be set by some Views, such as a ViewSet. suffix = getattr(view, 'suffix', None) if suffix: name += ' ' + suffix return name
如果您的视图因此包含.name
属性,它将使用该属性作为名称。因此,您可以将APIView
实施为:
class SomeAPIView(APIView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.name = 'Another name than To Do List'
如果没有name
属性,它将使用视图的名称,尝试删除后缀View
或ViewSet
,将驼峰式大小写转换为空格,然后可选地添加后缀(例如'List'
的{{1}})。