使用Django Rest Framework 撰写 Restful API 生成Swagger 接口文档

基本环境

  • Django 3.1.1
  • djangorestframework 3.11.1
  • drf-yasg
  • django-rest-swagger #在django 3.0中已经不支持该库了,取而代之的是全新的第三方drf-yasg

项目配置

settings.py

INSTALLED_APPS = [
    ...
    'drf_yasg',
    'rest_framework',
]


REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
}

urls.py

from django.contrib import admin
from django.urls import path,include
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
from rest_framework import routers,permissions


schema_view = get_schema_view(
   openapi.Info(
      title="资产管理API",
      default_version='v1.0',
      description="资产管理接口文档",
      terms_of_service="https://www.cnblogs.com/gooooodmorning/",
      contact=openapi.Contact(email="l_px@live.cn"),
      license=openapi.License(name="BSD License"),
   ),
   public=True,
   permission_classes=(permissions.AllowAny,),
)

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'',include('assets.urls')),
    
    # 配置drf-yasg路由
    path('^swagger(?P<format>.json|.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    path('docs/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-docs'),
]

APP配置(API接口)

serializers.py

from rest_framework import  serializers
from .models import *


class TypeNameSerializer(serializers.ModelSerializer):
    class Meta:
        model = TypeName
        fields = ('id', 'name')

urls.py

from django.urls import path,include
from .views import *
from rest_framework import  routers

router = routers.SimpleRouter()
router.register(r'typename',TypeNameViewSet,basename="typename")

urlpatterns =  [
    path(r'api/',include(router.urls)),
]

views.py

from rest_framework.viewsets import  ModelViewSet
from .models import *
from .serializers import *
from rest_framework.filters import  SearchFilter,OrderingFilter


class TypeNameViewSet(ModelViewSet):
    '''
    类型名称: 增删改查
    '''
    queryset = TypeName.objects.all()
    serializer_class = TypeNameSerializer
    filter_backends = (SearchFilter,OrderingFilter)

测试访问

python manage.py runserver 0.0.0.0:8081

使用Django Rest Framework 撰写 Restful API 生成Swagger 接口文档

浏览器访问:

http://127.0.0.1:8081/docs/

使用Django Rest Framework 撰写 Restful API 生成Swagger 接口文档

http://127.0.0.1:8081/swagger/

使用Django Rest Framework 撰写 Restful API 生成Swagger 接口文档

参考

Python3+ Django3:自动生成Swagger接口文档

访问文档出现错误'AutoSchema' object has no attribute 'get_link'](https://www.cnblogs.com/iiiiiher/p/11248456.html)