Đay là bài hướng dẫn thứ 2 trong series hướng dẫn cách viết Web Service API (Backend API) sử dụng Python Django Rest Framework (gọi tắt là DRF).

Ở bài trước, bạn đã học cách tạo base app mang tên mydrf cho dự án. Django nhóm các chức năng liên quan vào thành 1 app hay cũng gọi là 1 module.

Bài toán được sử dụng trong chuỗi bài hướng dẫn này là quản lý danh sách khách hàng (“customer”) và địa chỉ văn phòng của từng khách hàng (“address”). Vậy nên chúng ta có thể tách thành 2 module: customer và address. Trong bài này chúng ta sẽ lập trình Backend API cho cho module/app customer của sản phẩm.

Bước 1: Tạo module quản lý khách hàng (customer)

Tại thư mục gốc của dự án. Chạy lệnh sau đây để khởi tạo module customer.

python3.8 manage.py startapp mycustomer

Chúng ta đặt tên của module là “mycustomer”.

Trong thực tế, bạn luôn nên dùng prefix như “my” hoặc từ khóa nào đó của dự án để đặt tên cho các module. Việc này đảm bảo không gây ra trùng lặp với các module mã nguồn mở khác của python đã được cài đặt hoặc sẽ được cài đặt trong tương lai.

Bạn sẽ thấy thư mục “mycustomer” này được tạo trong dự án với các file cơ bản.

Để thống nhất với cách đặt tên với prefix “my”, tiếp tục đổi tên file theo format sau:

  1. models.py thành mycustomer_models.py: tệp tin này thể hiện cấu trúc thông tin của 1 khách hàng. Đây cũng là nơi chứa

  2. views.py thành mycustomer_views.py: đây là nơi xử lý đầu vào khi Backend API được gọi, gọi models, và trả về kết quả ở format json

Thêm các file sau:

  1. mycustomer_urls.py: đây là nơi khai báo cáo url của Backend API liên quan tới customer
  2. mycustomer_serializers.py: serializer là cách python django sử dụng lấy và trả thông tin.

 

Bước 2: Setup app mới trong settings của base app mydrf

Mở file mydrf/settings.py, thêm module chúng ta vừa mới tạo vào như sau:

INSTALLED_APPS = [
    ...
    'mycustomer',
    ...
]

Tiếp tục mở file mycustomer_api/urls.py, thêm đoạn code sau:

urlpatterns = [
    ...
    path('api/customer/', include('mycustomer.mycustomer_urls')),
    ...
]

URL pattern này cho phép chúng ta gọi API của module này theo format sau:

<METHOD> <host>/api/sample

Ví dụ:

Bước 3: Xây dựng model cho module mycustomer

Mở file mycustomer/mycustomer_models.py và thêm code như sau:

from django.db import models

# Create your models here.
class MyCustomer(models.Model):
    name = models.CharField(max_length=250, blank=False, unique=True)
    website = models.TextField(blank=True, default='',null=True)

    class Meta:
        db_table = 'mycustomer'
        ordering = ['name']

Ở đoạn code trên:

  • Cột primary key của bảng theo mặc định sẽ không cần khai báo. Django sẽ dùng tên mặc định là “id”.
  • Bạn thấy các trường name, website sẽ chính là tên cột của bảng
  • Tên bảng được khai báo ở db_table.
  • Biến ordering cho biết sắp xếp mặc định theo cột nào.
  • Giá trị blank=True cho phép cột được trống
  • Giá trị default=… cho phép khai báo giá trị mặc định của cột
  • Giá trị null=True (hoặc False) cho phép cột được nhận giá trị null hay không
  • Giá trị unique=True (hoặc False) cho phép khai báo cột có phải có giá trị unique hay không (tức là không được phép lặp lại). Ở đây chúng ta không cho phép lặp lại tên khách hàng trong cơ sở dữ liệu

Bước 4: Tạo API view

API view là cách django xử lý đầu vào và hiển thị kết quả chạy của Backend API. Tạo api view cơ bản sau cho module khách hàng. Chúng ta sẽ quay lại file này khi chúng ta bắt đầu viết chi tiết các backend api.

Mở file mycustomer_views.py và thêm đoạn code sau:

from rest_framework import viewsets
from mycustomer.mycustomer_models import MyCustomer

class MyCustomerViewSet(viewsets.ModelViewSet):
    queryset = MyCustomer.objects.all()

Bước 5: Tạo URLs

Mở file mycustomer_urls.py và thêm đoạn code sau:

from mycustomer.mycustomer_views import MyCustomerViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'', MyCustomerViewSet, basename='mycustomer')
urlpatterns = router.urls

Với đoạn code trên, chúng ta sử dụng default router của django rest để format cách gọi API:

  1. GET localhost/api/mycustomer/1 # get record that has primary key = 1
  2. POST localhost/api/mycustomer # add new record
  3. DELETE localhost/api/mycustomer/1 # delete record with id = 1
  4. PATCH localhost/api/mycustomer/1 # update existing record id = 1

Bước 6: Tạo bảng trong CSDL bằng công cụ migrations

Các bước đã qua đủ để bạn tạo bảng trong csdl. Chúng ta sẽ dùng lệnh migration của django. Lệnh này sẽ dựa theo cấu trúc bạn khai báo trong mycustomer_models.py để thiết lập bảng mycustomer trong cơ sở dữ liệu MySQL.

Tại thư mục gố của dự án, dùng lệnh:

python3.8 manage.py makemigrations
python3.8 manage.py migrate

Bạn có thể mở mysql (chẳng hạn dùng phpmyadmin) để xem bảng mycustomer đã được tạo với các column định nghĩa trong mycustomer_models.py

Bài tiếp theo: Django REST 3: Tạo Web Service API cho Module Khách Hàng (POST, GET, DELETE, PATCH)

Leave a Reply

Discover more from Bệ Phóng Việt

Subscribe now to keep reading and get access to the full archive.

Continue reading