django集成swagger2.0以上版本

本文详细介绍如何在Django项目中集成并自定义REST Swagger,包括模块导入、配置、URL设置、测试类编写等关键步骤,助力高效API文档生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:导入模块及配置

1:导入模块

pip install django-rest-swagger

2:setings配置

在这里插入图片描述

3:查看django版本

django2.0以上不支持yml格式配置

pip list

在这里插入图片描述

二:自定义swagger

// An highlighted block
#-*- coding: utf-8 -*-
'''===================================
@Project:wisdomShop
@Author:班婕妤
@Date:12/3/2020 上午11:24
@Company:深圳市智慧养老宝科技有限公司
@Motto:心有猛虎,细嗅蔷薇
@Python_Version:3.7.3
@Django_Version:2.1.5
======================================='''
from rest_framework.schemas import SchemaGenerator
from rest_framework.schemas.coreapi import LinkNode, insert_into
from rest_framework.renderers import *
from rest_framework_swagger import renderers
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.permissions import AllowAny,IsAuthenticated,IsAuthenticatedOrReadOnly
from django.http import JsonResponse


class MySchemaGenerator(SchemaGenerator):

    def get_links(self, request=None):
        links = LinkNode()
        paths = []
        view_endpoints = []
        for path, method, callback in self.endpoints:
            view = self.create_view(callback, method, request)
            path = self.coerce_path(path, method, view)
            paths.append(path)
            view_endpoints.append((path, method, view))

        # Only generate the path prefix for paths that will be included
        if not paths:
            return None
        prefix = self.determine_path_prefix(paths)

        for path, method, view in view_endpoints:
            if not self.has_view_permissions(path, method, view):
                continue
            link = view.schema.get_link(path, method, base_url=self.url)
            # 添加下面这一行方便在views编写过程中自定义参数.
            link._fields += self.get_core_fields(view)

            subpath = path[len(prefix):]
            keys = self.get_keys(subpath, method, view)

            # from rest_framework.schemas.generators import LinkNode, insert_into
            insert_into(links, keys, link)

        return links

    # 从类中取出我们自定义的参数, 交给swagger 以生成接口文档.
    def get_core_fields(self, view):
        return getattr(view, 'coreapi_fields', ())


class SwaggerSchemaView(APIView):
    _ignore_model_permissions = True
    exclude_from_schema = True

    permission_classes = [AllowAny]
    # 此处涉及最终展示页面权限问题,如果不需要认证,则使用AllowAny,这里需要权限认证,因此使用IsAuthenticated
    #permission_classes = [IsAuthenticated]
    # from rest_framework.renderers import *
    renderer_classes = [
        CoreJSONRenderer,
        renderers.OpenAPIRenderer,
        renderers.SwaggerUIRenderer
    ]

    def get(self, request):
        # 此处的titile和description属性是最终页面最上端展示的标题和描述
        generator = MySchemaGenerator(title='班婕妤系统API文档',description='''心有猛虎、细嗅蔷薇''')
        schema = generator.get_schema(request=request)
        # from rest_framework.response import Response
        return Response(schema)

def DocParam(name="default", location="query",required=True, description=None, type="string",
             *args, **kwargs):
    return coreapi.Field(name=name, location=location,
                         required=required, description=description,
                         type=type)



三:url配置

// An highlighted block
from django.contrib import admin
from django.urls import path,include
from rest_framework import routers
from zhylbwg.views import login # 导入相关APP下的views文件
from zhylbwg.views import host # 导入相关APP下的views文件
from django.views.generic.base import RedirectView

from zhylbwg.views.product_views import product_information_views
from zhylbwg.views.auth_views import AuthView
from zhylbwg.views.premission_views import *
# 导入coreapi相关模块
from rest_framework.documentation import include_docs_urls
# 导入自定义的schema
from zhylbwg.util.MySchemaGenerator import SwaggerSchemaView
# 自定义接口

from rest_framework.schemas import get_schema_view
from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer
from zhylbwg.views.product_views.order_views import OrderView

schema_view = get_schema_view(title='班婕妤API接口文档', renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer])
router = routers.DefaultRouter()
urlpatterns = [
    # favicon.cio
    path('favicon.ico/', RedirectView.as_view(url=r'static/blog/img/favicon.ico')),
    path('admin/', admin.site.urls),
    path('zhylbwg/login', login.login),
# swagger接口文档路由
    path("zhylbwg/docs", SwaggerSchemaView.as_view()),
    # path("zhylbwg/docs", schema_view,name = 'docs'), # 配置docs的url路径
    path('', include(router.urls)), # 代表位于根路径的主域名(http://127.0.0.1:8080
    # drf登录
    path('zhylbwg/api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    # 测试接口
    path('zhylbwg/test1', AuthView.as_view(), name='test1'),

四:编写测试类

// An highlighted block
# -*- coding: utf-8 -*-
'''===================================
@Project:wisdomShop
@Author:班婕妤
@Date:10/3/2020 下午6:09
@Company:深圳市智慧养老宝科技有限公司
@Motto:心有猛虎,细嗅蔷薇
@Python_Version:3.7.3
@Django_Version:2.1.5
======================================='''
from django.http import JsonResponse
from rest_framework.views import APIView

from zhylbwg.util.MySchemaGenerator import DocParam
from zhylbwg.util.authenticationSelf import AuthenticationSelf

ORDER_DICT = {
    1: {
        'name': 'apple',
        'price': 15
    },
    2: {
        'name': 'dog',
        'price': 100
    }
}


class OrderView(APIView):
    '''订单相关业务'''
    # 用coreapi_fields定义请求参数
    coreapi_fields = (
        DocParam(name="username", location='body', description='用户姓名'),
        DocParam(name="password", location='body', description='用户密码'),
        DocParam(name="telphone", location='body', description='用户手机号码',required=False),

    )
    # authentication_classes = [AuthenticationSelf,]    #添加局部认证
    def get(self, request, *args, **kwargs):
        ret = {'code': 1000, 'msg': None, 'data': None}
        try:
            ret['data'] = ORDER_DICT
        except Exception as e:
            pass
        return JsonResponse(ret)

五:测试

在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

班婕妤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值