簡単にdjangoフレームインテグレーションswaggerとカスタマイズパラメータの問題を話します。
紹介する
私たちは実際の開発において、API文書を生成するためにdjangoの枠組みをswaggerと統合する必要があります。ネットではdjango統合swaggerについての例もありますが、プロジェクトごとに使用される依存バージョンが異なりますので、いくつかの例が私たちに合わないかもしれません。私も実際の集積の過程で、どのようにカスタマイズパラメータなどの問題に出会い、最終的に統合に成功し、結果を皆さんに共有しました。
開発バージョン
私が開発して使っている依存バージョンは、私が使っているのはすべて投稿日までの最新バージョンです。
Django 2.7
django-rest swager 2.2.0
djangorstframe ework 3.10.3
settings.pyを修正します
1、プロジェクト導入のレガットframwワークスワッグ依存
この文書では、corepiのSchemaGenerator類を継承し、get_を書き換えます。linksメソッドは、書き換えの目的は、私たちのカスタムパラメータを実現し、ページに表示することです。ここで直接コピーして使えばいいです。
あなたのアプリケーションでインターフェースを定義してリリースします。ここでテストインターフェースを使って検証します。
注意
1、すべてのインターフェースは、API Viewを引き継ぐために、cassで定義しなければならない。
2、classの下のコメントpostは、postメソッドを説明する役割で、ページ上で展示されます。
3、corepi_fieldsで定義されている属性nameはパラメータ名で、locationは伝値方式です。ここで一つはqueryクエリを採用しています。一つはheaderを採用しています。私たちは身分認証を行います。
4、最後にpostメソッドを定義し、get、putなどもできます。実際の状況によって定義します。
前のステップで定義されたテストインターフェースについて、以下のように構成します。
アクセスアドレス:http://localhost:8001/docs/
締め括りをつける
以上の浅談djangoフレームインテグレーションswaggar及びカスタムパラメータの問題は小編集が皆さんに提供した内容の全部です。参考にしていただければと思います。どうぞよろしくお願いします。
私たちは実際の開発において、API文書を生成するためにdjangoの枠組みをswaggerと統合する必要があります。ネットではdjango統合swaggerについての例もありますが、プロジェクトごとに使用される依存バージョンが異なりますので、いくつかの例が私たちに合わないかもしれません。私も実際の集積の過程で、どのようにカスタマイズパラメータなどの問題に出会い、最終的に統合に成功し、結果を皆さんに共有しました。
開発バージョン
私が開発して使っている依存バージョンは、私が使っているのはすべて投稿日までの最新バージョンです。
Django 2.7
django-rest swager 2.2.0
djangorstframe ework 3.10.3
settings.pyを修正します
1、プロジェクト導入のレガットframwワークスワッグ依存
INSTALLED_APPS = [
......
'rest_framework_swagger',
......
]
2、DEFAULT_を設定するSCHEMA_CLASSは、ここでは後ほどエラーが発生します。
REST_FRAMEWORK = {
......
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema',
......
}
アプリの下にschema_を作成します。view.pyこの文書では、corepiのSchemaGenerator類を継承し、get_を書き換えます。linksメソッドは、書き換えの目的は、私たちのカスタムパラメータを実現し、ページに表示することです。ここで直接コピーして使えばいいです。
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.decorators 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)
実際の応用あなたのアプリケーションでインターフェースを定義してリリースします。ここでテストインターフェースを使って検証します。
注意
1、すべてのインターフェースは、API Viewを引き継ぐために、cassで定義しなければならない。
2、classの下のコメントpostは、postメソッドを説明する役割で、ページ上で展示されます。
3、corepi_fieldsで定義されている属性nameはパラメータ名で、locationは伝値方式です。ここで一つはqueryクエリを採用しています。一つはheaderを採用しています。私たちは身分認証を行います。
4、最後にpostメソッドを定義し、get、putなどもできます。実際の状況によって定義します。
# schema_view.py ,
from app.schema_view import DocParam
'''
'''
class CustomView(APIView):
'''
post:
'''
coreapi_fields = (
DocParam(name="id",location='query',description=' '),
DocParam(name="AUTHORIZATION", location='header', description='token'),
)
def post(self, request):
print(request.query_params.get('id'));
return JsonResponse({'message':' !'})
5、パラメーターを受け取るということに注意しなければいけません。私は共通の方法を定義しました。ここでは多すぎる説明はしません。例えば、実際の過程で応用インターフェースとスワッグ呼び出しインターフェースの伝達値の問題があったら、下記のコードを参照してください。
def getparam(attr,request):
obj = request.POST.get(attr);
if obj is None:
obj = request.query_params.get(attr);
return obj;
url.pyを修正します前のステップで定義されたテストインターフェースについて、以下のように構成します。
from django.contrib import admin
from rest_framework import routers
from django.conf.urls import url,include
# schema
from app.schema_view import SwaggerSchemaView
#
from app.recommend import CustomView
router = routers.DefaultRouter()
urlpatterns = [
# swagger
url(r"^docs/$", SwaggerSchemaView.as_view()),
url(r'^admin/', admin.site.urls),
url(r'^', include(router.urls)),
# drf
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
#
url(r'^test1', CustomView.as_view(), name='test1'),
]
効果の展示アクセスアドレス:http://localhost:8001/docs/
締め括りをつける
以上の浅談djangoフレームインテグレーションswaggar及びカスタムパラメータの問題は小編集が皆さんに提供した内容の全部です。参考にしていただければと思います。どうぞよろしくお願いします。