凌应潭--小石潭记 python coder--Machine learning,Data analysis

Django Rest Swagger中文api(完整版)

2018-10-08

阅读:


django-rest-swagger:

1.get_schema_view()添加一个模式函数解析

REST框架包含一个功能自动生成一个schema,或者允许你指定一个。有许多不同的方式来为你添加一个schema

from rest_framework.schemas import get_schema_view
# 导入get_schema_view method
schema_url_patterns = [url(r'^api/', include('myproject.api.urls')),]
#patterns参数
schema_view = get_schema_view(title="Server Monitoring API"
urlpatterns = [
    url('^$', schema_view),
    ...
]
#get_schema_view(title="Server Monitoring API",
					url="https://www.example.org/api/",
					url_conf='myproject.urls',
					renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer],
					patterns=schema_url_patterns
					generator_class=“”)
#title:描述模式标题
#url:可用于传递模式的规范URL
#urlconf:一个字符串表示您想要生成一个API模式的URL conf的导入路径。默认值为django的 ROOT_URLCONF设置
#renderer_classes:用来传递API根端点的渲染器类
#patterns:用于限制内联的url列表,如果你仅想暴露myproject.api的urls
#generator_class:指定一个SchemaGenerator子类,用于传递SchemaView

2.指定一个SchemaView

如果需要比get_schema_view()更多的控制权限,你需要使用SchemaGenerator类自动创建Document的实例,然后从视图中返回。 这个选项给您提供了您想要的任何行为灵活设置模式端点。例如,您可以将不同的权限、节流或身份验证策略应用到模式端点。

from rest_framework.decorators import api_view, renderer_classes
from rest_framework import renderers, response, schemas

generator = schemas.SchemaGenerator(title='Bookings API')

@api_view()
@renderer_classes([renderers.CoreJSONRenderer])
def schema_view(request):
    schema = generator.get_schema(request)
    return response.Response(schema)

# urls.py
urlpatterns = [
    url('/', schema_view),
    ...
]

a、您还可以为不同的用户提供不同的模式,这取决于他们所拥有的权限。此方法可用于确保未经身份验证的请求与经过身份验证的请求不同,或确保不同的用户根据角色的不同判断用户是否可见。 ppt自带了常用的1-48种模板通过index选择对应的模板

@api_view()
@renderer_classes([renderers.CoreJSONRenderer])
def schema_view(request):
    generator = schemas.SchemaGenerator(title='Bookings API')
    return response.Response(generator.get_schema(request=request))

3.显示模式定义

import coreapi
from rest_framework.decorators import api_view, renderer_classes
from rest_framework import renderers, response

schema = coreapi.Document(
    title='Bookings API',
    content={
        ...
    }
)

@api_view()
@renderer_classes([renderers.CoreJSONRenderer])
def schema_view(request):
    return response.Response(schema)

4.静态模式文件

将您的API模式编写为静态文件,使用可用的一种格式,比如Core JSON或Open API ##四、django-rest-swagger 1.# swagger 配置项

a、settings.py文件中配置swagger 将rest_framework,rest_framework_swagger加入到app应用中 此外配置swagger_settings

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,
}

b、django rest framework 序列化模型类

# 序列化
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__"


*c、配置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

d、配置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'))

]


Comments

Content