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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
|