Làm theo từng bước hướng dẫn bên dưới, bạn sẽ nắm được cốt lõi của một CRUD API để phát triển kỹ năng lập trình với Django.
Django Rest Framework (DRF) là một framework Django, cung cấp hỗ trơ xây dựng REST API. Giống như Django, DRF cho phép bạn xây dựng các trình xem API với các trình xem dựa trên hàm hoặc class.
Mặc dù các trình xem dựa trên class ban đầu có thể khó làm việc nhưng chúng mang tới nhiều lợi ích như cấu trúc code tốt hơn, có thể tái sử dụng, có tính kế thừa và đồng nhất.
Tạo trình quản lý công thức API bằng Django REST Framework
Một app quản lý công thức là cách tuyệt vời để tìm hiểu về các trình xem dựa trên class trong DRF. Những tính năng như thêm, xóa và chỉnh sửa công thức sẽ giúp bạn hiểu cách triển khai CRUD (Create, Read, Update, Delete). Những bước sau sẽ hướng dẫn bạn cách tạo một CRUD API.
Bước 1: Cài framework Django REST và cấu hình dự án của bạn
1. Tạo môi trường ảo cho dự án và cài đặt các phần phụ thuộc sau:
pip install django djangorestframework
2. Tạo dự án Django tên core với lệnh sau:
django-admin startproject core .
3. Tạo app tên recipe_manager:
python manage.py startapp recipe_manager
4. Mở file core/settings.py và điều hướng tới danh sách INSTALLED_APPS để đăng ký ứng dụng của bạn:
INSTALLED_APPS = [
# custom apps
'rest_framework',
'recipe_manager',
]
Bước 2: Tạo mẫu cho ứng dụng
1. Mở file recipe_manager/models.py và tạo mẫu cho ứng dụng của bạn. Đây là ví dụ cơ bản về mẫu công thức:
# models.py
from django.db import models
class Recipe(models.Model):
recipe_name = models.CharField(max_length=255)
ingredients = models.TextField()
instructions = models.TextField()
2. Tạo các migration và di chuyển chúng database bằng lệnh này:
python manage.py makemigrations && python manage.py migrate
Bước 3: Tạo Serializer cho ứng dụng của bạn
Một serializer là thành phần Django giúp bạn chuyển đổi các kiểu dữ liệu phức tạp như nhóm truy vấn sang định dạng có thể hiển thị, như JSON hoặc XML…
Để tạo một serializer, hãy làm theo những bước sau:
1. Tạo file tên recipe_manager/serializers.py.
2. Nhập mô đun serializers cùng mẫu bạn muốn tuần tự hóa:
# serializers.py
from rest_framework import serializers
from .models import Recipe # the model to serialize
3. Trong cùng file này, tạo class serializer cho mẫu của bạn và xác định class Meta bên trong nó:
# serializers.py
class RecipeSerializer(serializers.ModelSerializer):
class Meta:
model = Recipe
fields = ('recipe_name', 'ingredients', 'instructions')
Trong code này, class Meta xác định mẫu để tuần tự hóa và các trường mà serializer sẽ xử lý. Thuộc tính fields có thể là danh sách hoặc bộ dữ liệu. Nếu muốn tuần tự hóa tất cả các trường trong mẫu, bạn có thể làm việc này như sau:
class Meta:
fields = "__all__"
Bước 4: Viết trình xem cho hoạt động CREATE
Bạn có thể tạo các trình xem dựa trên class cho ứng dụng bằng cách nhập chế độ xem chung có sẵn trong Django. Để triển khai hoạt động CREATE của CRUD, bạn nên nhập CreateAPIView. Bạn cũng nên nhập serializer vào mô đun của bạn:
# views.py
from rest_framework.generics import CreateAPIView
from .models import Recipe
from .serializers import RecipeSerializer
Để triển khai hoạt động CREATE, bạn chỉ cần xác định serializer mà trình xem sẽ sử dụng. Ví dụ:
# Tạo view
class RecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer
Với thiết lập này, bạn có thể tạo truy vấn POST cho ứng dụng.
Bước 5: Viết trình xem hoạt động READ
1. Để triển khai hoạt động READ, nhập ListAPIView cho trình xem. Nó giúp bạn liệt kê các đối tượng mẫu:
# views.py
from rest_framework.generics import CreateAPIView, ListAPIView
2. Tạo class cho các trình xem và xác định serializer và truy vấn cần dùng:
# Liệt kê view
class RecipeListView(ListAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()
Tạo một trình xem để đọc một công thức cụ thể. Để làm việc này, bạn cần RetrieveAPIView, hãy thêm nó vào danh sách các import:
# views.py
from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
Tiếp theo, tạo trình xem bạn cần:
# truy xuất view
class RecipeRetrieveView(RetrieveAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()
Bước 6: Viết các trình xem cho hoạt động UPDATE và DELETE
Để triển khai hoạt động UPDATE và DELETE, bạn cần UpdateAPIView và DestroyAPIView tương ứng, vì thế, hãy nhập chúng:
from rest_framework.generics import (
ListAPIView,
CreateAPIView,
RetrieveAPIView,
UpdateAPIView, # new
DestroyAPIView, # new
)
Tiếp theo, tạo trình xem, giống như bạn đã làm trước đó. Lần này, các trình xem sẽ kế thừa UpdateAPIView và DestroyAPIView tương ứng:
# Update view
class RecipeUpdateView(UpdateAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()
# Xóa view
class RecipeDeleteView(DestroyAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()
Bước 7: Tạo URL cho ứng dụng
1. Thêm code này vào core/urls.py để cấu hình URL:
from django.urls import path, include
urlpatterns = [
path('api/', include('recipe_manager.urls'))
]
2. Thêm code sau vào file recipe_manager/urls.py:
from django.urls import path
from . import views
urlpatterns = [
# Liệt kê view (Đọc tất cả)
path('recipes/', views.RecipeListView.as_view(), name='recipe-list'),
# Tạo view
path('recipes/create/', views.RecipeCreateView.as_view(), name='recipe-create'),
# Truy xuất view (Đọc lần lượt)
path('recipes/<int:pk>/', views.RecipeRetrieveView.as_view(), name='recipe-retrieve'),
# Update view
path('recipes/<int:pk>/update/', views.RecipeUpdateView.as_view(), name='recipe-update'),
# Xóa view
path('recipes/<int:pk>/delete/', views.RecipeDeleteView.as_view(), name='recipe-destroy'),
]
Từ code trên, bạn sẽ thấy các trình xem dựa trên class dùng hàm as_view() để tạo mẫu URL của chúng.
Bước 8: Kiểm tra endpoint API
Từ thư mục dự án, chạy:
python manage.py runserver
Điều này sẽ khởi động server của bạn, tiến hành một số kiểm tra, in URL mà bạn có thể truy cập.
Giờ bạn có thẻ kiểm tra các endpoint API bằng cách điều hướng tới URL tương ứng và gửi các phương thức truy vấn HTTP cho hoạt động CRUD. Bạn sẽ thấy giao diện mặc định như sau:
Thế là xong! Hi vọng bài viết hữu ích với các bạn.