1.生成API文档需要安装 coreapi(必须) Pygments(可选) Markdown(可选) DRF在低于3.10之前不需要添加,在之后需要添加coreapi
2. 在全局路由里配置
from django.contrib import admin
from django.urls import path, include
from rest_framework.documentation import include_docs_urls
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('projects.urls')),
path('docs/', include_docs_urls(title='测试平台开发接口文档'))
]
3.给接口添加汉字的注释
class ProjectViewSet(viewsets.ModelViewSet):
"""
create:创建项目
retrieve:获取项目详情数据
update:完整更新项目
partial_update:部分更新项目
list:获取项目列表数据
destroy:删除项目
names:获取所有的项目名和项目ID
interfaces:获取某个项目下的所有接口信息
"""
# 往往要指定queryset查询集类属性,不能改成其他名字
queryset = Projects.objects.all()
# 往往需要用serializer_class指定序列化器类
serializer_class = serializers.ProjectNamesModelSerializer
# 指定过滤的引擎,以后过滤都使用这个,可以在全局使用
filter_backends = [DjangoFilterBackend, OrderingFilter]
# 指定过滤字段
filterset_fields = ['name', 'leader', 'tester']
# 指定排序字段,前端需要使用ordering作为key,指定的字段名作为value,一般默认升序,如要降序加-号
ordering_fields = ['id', 'leader', 'tester']
# 自定义action,不需要返回那么多字段,只需要返回id和name
# 1.使用action装饰器来声明自定义动作
# 2.默认方法名就是动作名
# methods参数来指定该动作支持的请求方法,默认为get
# detail参数用于指定该动作,要处理的是是否为详情资源对象(url是否需要传递pk主键)
# 如果获取详情数据,那么需要指定detail为True,否则为False
# @action(methods=['get'], detail=False, url_name='nn', url_path='mm')
# url_name为路由别名,url_path为路由路径
@action(methods=['get'], detail=False)
def names(self, request, *args, **kwargs):
queryset = self.get_queryset()
# serializer = serializers.ProjectModelSerializer(instance=queryset, many=True)
serializer = self.get_serializer(instance=queryset, many=True)
return Response(serializer.data)
def get_serializer_class(self):
# python的三元运算,为True返回前边,为False返回后边
return serializers.ProjectNamesModelSerializer if self.action == "names" else self.serializer_class
4.查看页面信息