0

Tạo Django app

Django app là gì?

  • Trong Django, một app (ứng dụng) là một thành phần độc lập có một chức năng cụ thể trong dự án Django tổng thể.
  • Một project Django có thể chứa nhiều app và một app cũng có thể được tái sử dụng trong nhiều project khác nhau.

Cách để tạo một Django app

  • Tạo một app bằng lệnh

    python manage.py startapp <tên app>
    
    • Note: Ở bài viết này mình sẽ lấy tên app là web để làm ví dụ nhé. Câu lệnh tạo sẽ là
      python manage.py startapp web
      
  • Lưu ý: Một số tên app không nên đặt:

    • Trùng với tên module chuẩn của Python vì gây khó khăn cho import sau này: email string json sys os time types datetime
    • Trùng với các app mặc định của Django vì dễ gây lỗi hoặc hành vi không mong muốn: admin auth contenttypes sessions messages staticfiles

Đăng ký App với hệ thống

  • Trong settings.py của project chính, bạn cần thêm app vào INSTALLED_APPS

    INSTALLED_APPS = [
        ...
        'web',  # Tên app của bạn
        ...
    ]
    
  • Lưu ý: Trong Python, nếu bạn khai báo một danh sách các chuỗi mà thiếu dấu phẩy ngăn cách, Python sẽ ngầm nối các chuỗi liền nhau thành một chuỗi duy nhất, do cơ chế nối chuỗi literal (string literal concatenation). Nên khi gõ xong tên app bạn nên thêm dấy phẩy sau cùng nhé.

    # Thiếu dấu phẩy ngăn cách
    list_strs = [
        'chuoi 1'
        'chuoi 2'
    ]
    # Output: list_strs = ['chuoi 1chuoi2']
    

Cấu trúc của một Django App

  • Khi bạn chạy lệnh tạo app, thì cấu trúc mặc định của một app sẽ như sau

    web/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py
    
  • Ở đây mình sẽ tạo thêm vài Python package hoặc Python file để đầy đủ chức năng hơn.

    web/
        ...
        # Mở rộng của Django
        forms.py
        urls.py
        
        templates/
        templatetags/
        static/
        
        # Nếu sử dụng Rest Framework
        serializers.py
        permissions.py
        
        # Tác vụ bất đồng bộ
        tasks.py
        
        # Giúp code dễ hiểu hơn
        constants.py
        services.py
        helpers.py
        utils.py
        ...
    

Giải thích các thành phần của app

  • admin.py

    • Cấu hình hiển thị dữ liệu trong Django admin
  • app.py

    • Cấu hình app
  • models.py

    • Khai báo các model (cấu trúc bảng dữ liệu)
  • tests.py

    • Viết test cho app
  • views.py

    • Xử lý logic và trả về response
  • migrations/

    • Lưu các file migration để quản lý thay đổi DB

Về phần mở rộng Django

  • forms.py

    • Dùng để khai báo các form dựa trên Django Form hoặc ModelForm.
  • urls.py

    • Dùng để khai báo các route (URL) riêng cho app.
          urlpatterns = [
          ...
          path('web/', include('web.urls')),  # gọi tới web/urls.py
          ...
      ]
      
  • templates/

    • Thư mục chứa các file HTML mẫu dùng để phục vụ Server side rendering hoặc dùng cho email dạng HTML
  • templatetags/

    • Thư mục chứa các tags định nghĩa riêng để xử lý dữ liệu trên templates
  • static/

    • Chứa các file tài nguyên tĩnh (công khai) như CSS, JS, hình ảnh,...
    • Có một lưu ý là khi chuyển sang chế độ production thì Django sẽ không cho phép truy cập vào folder này từ bên ngoài nữa. Lúc này bạn có thể thực hiện:
      • Gom tất cả static file của tất cả app về chung một nơi. Nơi lưu được cấu hình trong file settings.py với tùy chọn STATIC_ROOT
        python manage.py collectstatic --noinput --clear --verbosity 1
        
      • Sử dụng Nginx proxy để điều hướng và trả về static file
      • Một cách khác có thể đẩy các file này lên S3 và phân phối bằng CloudFront, đồng thời config lại STATIC_URL trong settings.py là link của CloudFront

Về Rest framework

  • serializers.py

    • Để chuyển đổi dữ liệu giữa JSON và model.
  • permissions.py

    • Dùng để định nghĩa quyền truy cập tài nguyên

Về tác vụ bất đồng bộ

  • tasks.py
    • Nếu bạn dùng Celery để hẹn lịch thực hiện một tác vụ gì đó.

Một số thành phần giúp code dễ hiểu hơn

  • constants.py

    • Lưu các hằng số, danh sách lựa chọn (choices) cho field model.
  • services.py

    • Chứa các logic nghiệp vụ (business logic)
    • Là nơi bạn viết các hàm xử lý logic chính của hệ thống, liên quan tới nghiệp vụ.
    • Thường là các bước xử lý lớn, nhiều bước, tương tác với models, gọi API, xử lý flow...
  • utils.py

    • Chứa các hàm tiện ích, không phụ thuộc nghiệp vụ
    • Là nơi chứa các hàm đơn giản, thường dùng lại ở nhiều nơi
    • Thường chỉ xử lý string, format dữ liệu, chuyển đổi đơn vị, encode/decode, validate định dạng,...
  • helpers.py

    • Hỗ trợ các phần nhỏ trong views/forms/serializers
    • Thường tương tự utils.py, nhưng gắn liền hơn với từng phần cụ thể của app.
    • Có thể là hàm hỗ trợ nhỏ cho views hoặc form, như format lại context, tạo slug,...

Tài liệu tham khảo


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí