zoukankan      html  css  js  c++  java
  • Django Rest framework Swagger生成api文档

    关于swagger

    Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因:
    - Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API。
    - Swagger 可以生成客户端SDK代码用于各种不同的平台上的实现。
    - Swagger 文件可以在许多不同的平台上从代码注释中自动生成。
    - Swagger 有一个强大的社区,里面有许多强悍的贡献者。

    下面就实战django rest swagger为drf生成api接口文档

    https://blog.csdn.net/sinat_41622641/article/details/81636682

    环境

    • Python3.6
    • Django1.11
    • django-rest-swagger
    • djangorestframework

    安装

    pip install django==1.11.6
    pip instal djangorestframework
    pip install django-rest-swagger
    • 1
    • 2
    • 3
    • 4

    创建项目和app

    startproject apitest
    startapp api
    • 1
    • 2

    配置 rest_api/settings.py

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # 加入以下
        'api',
        'rest_framework',
        'rest_framework_swagger',
    
    ]
    # swagger 配置项
    SWAGGER_SETTINGS = {
        # 基础样式
        'SECURITY_DEFINITIONS': {
            "basic":{
                'type': 'basic'
            }
        },
        # 如果需要登录才能够查看接口文档, 登录的链接使用restframework自带的.
        'LOGIN_URL': 'rest_framework:login',
        'LOGOUT_URL': 'rest_framework:logout',
        # 'DOC_EXPANSION': None,
        # 'SHOW_REQUEST_HEADERS':True,
        # 'USE_SESSION_AUTH': True,
        # 'DOC_EXPANSION': 'list',
        # 接口文档中方法列表以首字母升序排列
        'APIS_SORTER': 'alpha',
        # 如果支持json提交, 则接口文档中包含json输入框
        'JSON_EDITOR': True,
        # 方法列表字母排序
        'OPERATIONS_SORTER': 'alpha',
        'VALIDATOR_URL': None,
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    配置api/serializer.py

    # 序列化
    from django.contrib.auth.models import User,Group
    from  rest_framework import serializers
    
    class UserSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = User
            fields = "__all__"
    class GroupSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model =Group
            fields = "__all__"
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    配置api/views.py

    # 视图
    from  django.contrib.auth.models import User,Group
    from rest_framework import viewsets
    from  api.serializers import UserSerializer,GroupSerializer
    
    # Create your views here.
    
    class UserViewSet(viewsets.ModelViewSet):
        '''查看,编辑用户的界面'''
        queryset = User.objects.all().order_by('-date_joined')
        serializer_class = UserSerializer
    
    class GroupViewSet(viewsets.ModelViewSet):
        '''查看,编辑组的界面'''
        queryset = Group
        serializer_class = GroupSerializer
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    配置apitest/urls.py

    from django.conf.urls import url,include
    from django.contrib import admin
    from  rest_framework import routers
    from  api import views
    
    # 路由
    router = routers.DefaultRouter()
    router.register(r'users',views.UserViewSet,base_name='user')
    router.register(r'groups',views.GroupViewSet,base_name='group')
    
    
    # 重要的是如下三行
    from rest_framework.schemas import get_schema_view
    from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer
    schema_view = get_schema_view(title='Users API', renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer])
    
    
    
    urlpatterns = [
        # swagger接口文档路由
        url(r'^docs/', schema_view, name="docs"),
        url(r'^admin/', admin.site.urls),
        url(r'^',include(router.urls)),
        # drf登录
        url(r'^api-auth/',include('rest_framework.urls',namespace='rest_framework'))
    
    ]
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    最终效果

    drf自带的接口UI

    drf.png

    swagger UI

    swagger ui.png

  • 相关阅读:
    dubbox编译安装本地maven仓库
    NameNode中几个关键的数据结构
    spark学习总结
    Spark性能优化指南——基础篇
    Spark性能优化指南——高级篇
    Kafka文件存储机制那些事
    Presto实现原理和美团的使用实践
    archlinux locale-gen 命令出错
    git无法连接bitbucket/github时,出现"Permission deied(publickey)"
    转:《JavaScript—之对象参数的引用传递》
  • 原文地址:https://www.cnblogs.com/du-jun/p/10772899.html
Copyright © 2011-2022 走看看