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.1.tar.gz
(34.8 kB
view details)
Built Distribution
File details
Details for the file openapi_django-1.4.1.tar.gz
.
File metadata
- Download URL: openapi_django-1.4.1.tar.gz
- Upload date:
- Size: 34.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 02d413f8c3998cea1f5a54176da2af3112c55b953e916e7800833aa6f618c89a |
|
MD5 | 72cb36a66af08d460b93647e1c54864f |
|
BLAKE2b-256 | 852116ea620323099d0aa6c684e8ca736df75f6ecc9d34687901f929ddb3a3f2 |
File details
Details for the file openapi_django-1.4.1-py3-none-any.whl
.
File metadata
- Download URL: openapi_django-1.4.1-py3-none-any.whl
- Upload date:
- Size: 41.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8be390904566572d9988930c62ff648efdb9c145148f46f5ca54e20b6ac55133 |
|
MD5 | 1f5d0da82b59fb9a6a7bb4c3d7731b58 |
|
BLAKE2b-256 | e4f75a8d8925217b73d89e35eb4178aaef3346a083ad146f7c2b426d52961f6c |