Site icon Bệ Phóng Việt

Django REST 2: Tạo Web Service API Đầu Tiên với Python Django (module)

Advertisements

Đ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:

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)

Exit mobile version