大数据

django-ninja-crud使用demo

依赖安装

pip install django-ninja-crud

demo

# python manage.py startapp department

models.py

from django.db import models


class Department(models.Model):
    title = models.CharField(max_length=255, unique=True)

schemas.py

from ninja import Schema


class DepartmentIn(Schema):
    title: str


class DepartmentOut(Schema):
    id: int
    title: str

views.py

from typing import List
from ninja import NinjaAPI
from ninja_crud import views, viewsets
from .models import Department
from .schemas import DepartmentIn, DepartmentOut

api = NinjaAPI()


class DepartmentViewSet(viewsets.APIViewSet):
    api = api
    model = Department

    list_departments = views.ListView(response_body=List[DepartmentOut])
    create_department = views.CreateView(request_body=DepartmentIn, response_body=DepartmentOut)
    read_department = views.ReadView(response_body=DepartmentOut)
    update_department = views.UpdateView(request_body=DepartmentIn, response_body=DepartmentOut)
    delete_department = views.DeleteView()


@api.get("/stats/")
def get_department_stats(request):
    return {"total": Department.objects.count()}

urls.py

from django.urls import path
from department.api import api

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', api.urls),
]

数据迁移

python manage.py makemigrations
python manage.py migrate

api说明:

  • GET / - List all departments with pagination limit/offset.
  • POST / - Create a new department.
  • GET /{id} - Retrieve a specific department.
  • PUT /{id} - Update a specific department.
  • DELETE /{id} - Delete a specific department.
  • GET /stats/ - Custom endpoint for department statistics

views.py简写

from ninja import NinjaAPI
from ninja_crud import views, viewsets
from examples.models import Department
from examples.schemas import DepartmentIn, DepartmentOut

api = NinjaAPI()

class DepartmentViewSet(viewsets.APIViewSet):
    api = api
    model = Department
    default_request_body = DepartmentIn
    default_response_body = DepartmentOut
    
    list_departments = views.ListView()
    create_department = views.CreateView()
    read_department = views.ReadView()
    update_department = views.UpdateView()
    delete_department = views.DeleteView()