OpenApi for django
Project description
OpenAPI Django
Библиотека для автоматической генерации OpenAPI файла для Django проектов.
Использование
Устанавливаем библиотеку
pip install openapi-django
Добавляем в проект
В файле {ProjectPath}/{DjangoFolder}/settings.py
находим секцию INSTALLED_APPS
и добавляем имя библиотеки.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'openapi_django'
]
Настройка
Настройка производится добавлением словаря OPENAPI_DJANGO
в файл {ProjectPath}/{DjangoFolder}/settings.py
Используемые ключи:
servers
- Список серверов, которые нужно добавить на страницу OpenAPI (Учитывайте что если вsettings.py
указаноDEBUG = True
то на страницу автоматически будет добавлен сервер изrequest.META["HTTP_HOST"]
запроса)version
- Версия вашего приложенияtitle
- Имя приложения
Пример:
OPENAPI_DJANGO = {
"servers": ["https://test.test"],
"version": "0.0.1",
"title": "Test project"
}
Добавление url для отображения страницы OpenAPI
В файле {ProjectPath}/{DjangoFolder}/urls.py
добавить:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('openapi/', include('openapi_django.urls')),
]
Библиотека добавляет 2 урла:
- "/" - отображает страницу OpenAPI
- "/file" - json файл данных OpenAPI
Использование
Простое добавление информации о запросе без указание возвращаемых и используемых данных
from django.views import View
from django.http import HttpResponse
from openapi_django.openapi_utils.decorators import openapi
class MyView(View):
@openapi()
def get(self, request):
html = "<html>Hello world</html>"
return HttpResponse(html)
С указанием используемых данных
Поддерживаются переменные классов "pydantic" и "djantic")
import json
from typing import Optional, List
from django.views import View
from django.http import JsonResponse
from djantic import ModelSchema
from pydantic.main import BaseModel
from pydantic.fields import Field
from openapi_django.openapi_utils.decorators import openapi
from test_app.models import MyModel
class MyModelSchema(ModelSchema):
class Config:
model = MyModel
class GetReturnClassSchema(BaseModel):
data: List[MyModelSchema] = Field(description="Список объектов")
class ObjectReturnClassSchema(BaseModel):
data: MyModelSchema = Field(description="Данные нового объекта")
class ParametersSchema(BaseModel):
name: Optional[str] = Field(description="Имя")
color: Optional[str] = Field(description="Любимый цвет")
class PostBodySchema(BaseModel):
name: str = Field(description="Имя")
color: Optional[str] = Field(description="Любимый цвет")
class PathParameterSchema(BaseModel):
param_path_id: int = Field(description="ID объекта")
class PostFileSchema(BaseModel):
file: bytes
class MyModelsView(View):
@openapi(
description="Получение всех обьектов",
return_class=GetReturnClassSchema,
parameters=ParametersSchema)
def get(self, request):
items = MyModel.objects.filter(**request.GET.dict())
return JsonResponse(data={"data": [MyModelSchema.from_orm(item).dict() for item in items]})
@openapi(
description="Добавление обьекта",
return_class=ObjectReturnClassSchema,
body=PostBodySchema
)
def post(self, request):
item = MyModel(**json.loads(request.body))
item.save()
return JsonResponse(data={"data": MyModelSchema.from_orm(item).dict()})
class MyModelPathView(View):
@openapi(
description="Получение данных объекта",
return_class=ObjectReturnClassSchema,
path_parameters=PathParameterSchema
)
def get(self, request, param_path_id):
item = MyModel.objects.get(pk=param_path_id)
return JsonResponse(data={"data": MyModelSchema.from_orm(item).dict()})
class MyModelFileView(View):
@openapi(
description="Отправка файла",
answer_content="multipart/form-data",
body=PostFileSchema
)
def post(self, request):
content = request.FILES.get("file").read().decode('utf8')
return JsonResponse(data={"msg": 'OK'})
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
openapi_django-1.4.0.tar.gz
(34.0 kB
view hashes)
Built Distribution
Close
Hashes for openapi_django-1.4.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27f0fed0d959760ec673fddc588b8abeac5901a435f87e64ef0c0eaa1cc4401f |
|
MD5 | 75b96ca85e78ffdde248c142398838e6 |
|
BLAKE2b-256 | dd71add50403a43306b3652ba6d1f50fbe22fbd26b5b0cc72538a7e462de4c05 |