文章
django-ninja使用demo
models.py
from django.db import models
class Department(models.Model):
title = models.CharField(max_length=100)
class Employee(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
birthdate = models.DateField(null=True, blank=True)
cv = models.FileField(null=True, blank=True)
api.py
from datetime import date
from typing import List
from ninja import NinjaAPI, Schema
from django.shortcuts import get_object_or_404
from .models import Employee
api = NinjaAPI()
@api.get("/hello")
def hello(request):
return "Hello World!"
class EmployeeIn(Schema):
first_name: str
last_name: str
department_id: int = None
birthdate: date = None
class EmployeeOut(Schema):
id: int
first_name: str
last_name: str
department_id: int = None
birthdate: date = None
@api.post("/employees")
def create_employee(request, payload: EmployeeIn):
employee = Employee.objects.create(**payload.dict())
return {"id": employee.id}
@api.get("/employees/{employee_id}", response=EmployeeOut)
def get_employee(request, employee_id: int):
employee = get_object_or_404(Employee, id=employee_id)
return employee
@api.get("/employees", response=List[EmployeeOut])
def list_employees(request):
qs = Employee.objects.all()
return qs
@api.put("/employees/{employee_id}")
def update_employee(request, employee_id: int, payload: EmployeeIn):
employee = get_object_or_404(Employee, id=employee_id)
for attr, value in payload.dict().items():
setattr(employee, attr, value)
employee.save()
return {"success": True}
@api.delete("/employees/{employee_id}")
def delete_employee(request, employee_id: int):
employee = get_object_or_404(Employee, id=employee_id)
employee.delete()
return {"success": True}
根urls.py
from django.contrib import admin
from django.urls import path
from quickstart.api import api
urlpatterns = [
path("admin/", admin.site.urls),
path("api/", api.urls)
]
测试api
url: http://localhost:8000/api/employees
请求类型: post
body使用json格式:
{
"first_name": "tom",
"last_name": "t",
"department_id": 1,
"birthdate": "2001-01-01"
}