Tạo API RESTful trong Django với Django REST Framework
Django REST Framework (DRF) là một bộ công cụ mạnh mẽ và linh hoạt để xây dựng API web. Nó đơn giản hóa quá trình tạo API RESTful, cung cấp các tính năng như serializer, viewset và cơ chế xác thực ngay khi cài đặt.
Thiết lập Django REST Framework
Trước khi bạn có thể tạo RESTful API, bạn cần cài đặt Django REST Framework và thêm nó vào dự án của bạn. Chạy lệnh sau để cài đặt DRF:
pip install djangorestframework
Sau đó, thêm 'rest_framework' vào INSTALLED_APPS
trong tệp settings.py
của bạn:
INSTALLED_APPS = [
...,
'rest_framework',
]
Tạo một API đơn giản
Hãy tạo một API cho một mô hình đơn giản có tên là Book
. Bước đầu tiên là định nghĩa mô hình trong models.py
:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=255)
author = models.CharField(max_length=255)
published_date = models.DateField()
isbn = models.CharField(max_length=13)
def __str__(self):
return self.title
Sau khi xác định mô hình, hãy chạy di chuyển để tạo bảng cơ sở dữ liệu:
python manage.py makemigrations
python manage.py migrate
Tạo một Serializer
Trình tuần tự hóa trong DRF chuyển đổi các kiểu dữ liệu phức tạp như mô hình Django thành JSON. Tạo trình tuần tự hóa cho mô hình Book
:
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
Xây dựng View và URL
DRF cung cấp hai cách chính để tạo chế độ xem API: chế độ xem dựa trên hàm và chế độ xem dựa trên lớp. Ở đây, chúng tôi sử dụng chế độ xem dựa trên lớp với APIView
:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer
class BookListCreateAPIView(APIView):
def get(self, request):
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
def post(self, request):
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Tiếp theo, cấu hình URL cho chế độ xem này trong urls.py
:
from django.urls import path
from .views import BookListCreateAPIView
urlpatterns = [
path('books/', BookListCreateAPIView.as_view(), name='book-list-create'),
]
Kiểm tra API
Khi máy chủ đang chạy, bạn có thể kiểm tra API tại http://127.0.0.1:8000/books/
bằng các công cụ như Postman hoặc curl. Yêu cầu GET sẽ truy xuất tất cả sách và yêu cầu POST cho phép bạn tạo một cuốn sách mới.
Cải thiện API với ViewSets
Để có mã ngắn gọn và có thể tái sử dụng hơn, bạn có thể sử dụng ViewSet
và Router
của DRF. Sau đây là cách cập nhật API để sử dụng ModelViewSet
:
from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer
class BookViewSet(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
Sau đó, cấu hình bộ định tuyến trong urls.py
:
from rest_framework.routers import DefaultRouter
from .views import BookViewSet
router = DefaultRouter()
router.register(r'books', BookViewSet, basename='book')
urlpatterns = router.urls
Phần kết luận
Django REST Framework giúp bạn dễ dàng tạo ra các API RESTful mạnh mẽ và linh hoạt. Bằng cách sử dụng serializer, view và router, bạn có thể xây dựng các API xử lý các mô hình dữ liệu phức tạp một cách dễ dàng. Với nền tảng này, giờ đây bạn có thể khám phá các tính năng nâng cao như quyền tùy chỉnh, phân trang và xác thực trong DRF.