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
- Note: Ở bài viết này mình sẽ lấy tên app là
-
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
- Trùng với tên module chuẩn của Python vì gây khó khăn cho import sau này:
Đăng ký App với hệ thống
-
Trong
settings.py
của project chính, bạn cần thêm app vàoINSTALLED_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 ... ]
- Dùng để khai báo các route (URL) riêng cho app.
-
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ọnSTATIC_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
trongsettings.py
là link của CloudFront
- 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
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