Django Ninja에서 file을 업로드하는 방법과 스키마 정의 방법에 대해 알아봅니다.
<body>
<h1>Uploading Files</h1>
<form method="post" action={% url 'api-1.0.0:upload' %} enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">Submit</button>
</form>
</body>
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', api.urls),
path('index/', index, name='index'), # index 페이지 라우팅
]
@api.post('/upload', url_name='upload')
# 데코레이터에 url_name 매개변수를 전달
# index.html 파일에서 사용
def upload(request, file: UploadedFile = File(...)):
data = file.read().decode()
return {'name': file.name, 'data': data}
path('upload/', upload, name='upload')
@api.post('/upload', url_name='upload')
from datetime import datetime
from ninja import Schema
class TrackSchema(Schema):
title: str
artist: str
duration: float
last_play: datetime
- Django의 모델 클래스를 기반으로 스키마를 자동 생성.
- 모델 필드를 명시해서 편리하게 사용할 수 있다.
from ninja import ModelSchema
from tracks.models import Track
class TrackSchema(ModelSchema):
class Config:
model = Track
model_fields = ['title', 'artist', 'duration', 'last_play']
from ninja.orm import create_schema
from tracks.models import Track
TrackSchema = create_schema(Track, fields=['title', 'artist', 'duration', 'last_play'])