Giải thích kiến trúc MVT của Django
Khung công tác web Django có kiến trúc mô hình-xem-mẫu (MVT), làm cho nó trở thành khung công tác duy nhất bạn cần để tạo một trang web hoặc ứng dụng web hoàn chỉnh. Khung Python này cho phép bạn tạo các mô hình tạo cơ sở dữ liệu và hiển thị các mẫu HTML động cho giao diện người dùng bằng cách sử dụng các khung nhìn.
Sức mạnh của Django không có gì bí mật; nó nhanh chóng, đáng tin cậy, có thể mở rộng và an toàn. Độ tin cậy cũng như khả năng mở rộng của phần mềm này phụ thuộc vào kiến trúc MVT của nó. Và trong bài viết này, bạn sẽ tìm hiểu chính xác cách thức hoạt động của kiến trúc MVT của Django.
Mục Lục
Mô hình của Django là gì?
Mô hình trong kiến trúc MVT của Django xác định cấu trúc và hành vi của dữ liệu bạn muốn lưu trữ thông qua trang web của mình. Mỗi mô hình Django bạn tạo sẽ tạo ra một bảng cơ sở dữ liệu tương ứng, trong đó mỗi thuộc tính của mô hình sẽ trở thành một trường trong bảng.
Tiếp tục với thiết lập từ bài viết giới thiệu của chúng tôi về Django, bạn có thể tạo mô hình cho người bán. Người bán có thể có mô hình người bán có thông tin cá nhân, chẳng hạn như tên và chi tiết liên hệ cũng như mô hình liên quan cho các mặt hàng mà mỗi người bán bán.
Cấu trúc tệp dự án Django mẫu hiện có
mysite/
mysite/
_pycache_
_init_.py
asgi.py
settings.py
urls.py
wsgi.py
sellers/
migration
_init_.py
admin.py
apps.py
models.py
test.py
views.py
db.sqlite3
manage.py
Tạo mô hình Django
Nếu bạn nhìn vào phần ứng dụng của người bán trong cấu trúc tệp ở trên, bạn sẽ thấy một tệp có tên models.py. Đây là nơi bạn sẽ tạo tất cả các mô hình Django cho phần người bán trên trang web của mình. Mỗi mô hình mà bạn tạo sẽ là một lớp con của API mô hình của Djangođó là lý do tại sao mỗi Django tạo models.py tệp có nhập mô hình mặc định.
Tệp mô hình.py
From django.db import models# Create your models here.
class Seller(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
contact_number = models.CharField(max_length=30)
class Product(models.Model):
seller = models.ForeignKey(Seller, on_delete=models.CASCADE)
item_name = models.CharField(max_length=100)
item_qantity = models.IntegerField()
item_price = models.DecimalField(max_digits=9, decimal_places=2)
item_description = models.TextField()
Đoạn mã trên là bản sao của nội dung cập nhật của model.py tập tin. Tệp hiện tạo ra hai mô hình — Người bán và Sản phẩm. Các mô hình này chia sẻ mối quan hệ một-nhiều, trong đó một người bán có thể có nhiều sản phẩm được bán. Vì vậy, mô hình Sản phẩm có khóa ngoại từ người bán và một on_delete thuộc tính được đặt thành mô hình.CASCADEcó nghĩa là khi bạn xóa người bán, bạn sẽ tự động xóa mọi sản phẩm có khóa chính như một khóa ngoại.
Bạn cũng có thể nhận thấy rằng mỗi mô hình trong mã trên không có khóa chính. Điều này là do Django sẽ tự động tạo khóa chính nếu bạn không tạo một cách rõ ràng.
Trước khi có thể sử dụng bất kỳ mô hình nào bạn tạo, bạn cần cho Django biết nơi tìm nó. Để làm điều này, bạn sẽ cần điều hướng đến settings.py và chèn tên của mô-đun có chứa models.py tập tin, vào INSTALLED_APP tiết diện.
Trong dự án mẫu cho bài viết này, models.py tệp nằm trong mô-đun của người bán. Do đó, việc cập nhật INSTALLED_APP phần sẽ đọc như sau:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sellers',
]
Với đoạn mã trên, các mô hình trong ứng dụng của người bán hiện được hiển thị trên trang web Django và bây giờ bạn có thể chuyển sang phần di chuyển.
Tiến hành di chuyển rất quan trọng vì quá trình này là một cách truyền bá những thay đổi bạn thực hiện trong các mô hình của mình sang lược đồ cơ sở dữ liệu tương ứng. Vì vậy, mỗi khi bạn thực hiện các thay đổi đối với mô hình của mình, bạn sẽ cần phải tiến hành quá trình di chuyển — bao gồm hai bước.
Bước một là thực hiện di chuyển, đây là lệnh tạo di chuyển dựa trên những thay đổi được phát hiện trong models.py tập tin. Để bắt đầu quá trình di chuyển, bạn sẽ cần mở thiết bị đầu cuối của mình, điều hướng đến thư mục có dự án Django của bạn và khởi chạy máy chủ bằng lệnh sau:
python manage.py runserver
Với máy chủ đang chạy trong một thiết bị đầu cuối, hãy mở một thiết bị đầu cuối mới và nhập lệnh sau:
python manage.py makemigrations
Sau khi thực thi, thiết bị đầu cuối sẽ tạo ra kết quả sau:
Migrations for 'sellers':
sellersmigrations 001_initial.py
- Create model Seller
- Create model Product
Kết quả ở trên nói rõ rằng bạn hiện có các chuyển đổi cho hai kiểu máy — người bán và sản phẩm. Bây giờ nếu bạn điều hướng đến thư mục di chuyển trong mô-đun người bán của mình, bạn sẽ thấy rằng nó hiện có một tệp mới được gọi là 0001_initial.py. Trong tệp này, bạn sẽ tìm thấy các di chuyển mà bạn vừa tạo.
Tệp 0001_initial.py
# Generated by Django 3.2.9 on 2022-02-26 16:06from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Seller',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=30)),
('last_name', models.CharField(max_length=30)),
('contact_number', models.CharField(max_length=30)),
],
),
migrations.CreateModel(
name='Product',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('item_name', models.CharField(max_length=100)),
('item_qantity', models.IntegerField()),
('item_price', models.DecimalField(decimal_places=2, max_digits=9)),
('item_description', models.TextField()),
('seller', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sellers.seller')),
],
),
]
Mỗi lần bạn thực hiện một di chuyển mới, thư mục di chuyển sẽ tạo ra một phiên bản mới của tệp này.
Bước hai của quá trình di chuyển cuối cùng là di chuyển các mô hình. Điều này có nghĩa là bạn đồng bộ hóa trạng thái cơ sở dữ liệu với models.py bằng cách sử dụng các di chuyển mà bạn vừa tạo trong 0001_initial.py tập tin. Bạn có thể hoàn tất quá trình này (trong khi máy chủ vẫn đang chạy) bằng lệnh sau:
python manage.py migrate
Mẫu của Django là gì?
Mẫu là một cách để tạo động HTML cho dự án Django của bạn. Mỗi mẫu Django có .html phần mở rộng và sự kết hợp của nội dung tĩnh và động. Các mẫu Django có cú pháp độc đáo bao gồm các cách mới để tạo các biến và thẻ trong tài liệu HTML.
Tạo mẫu Django
Để giới thiệu các mẫu trong trang web Thương mại điện tử mẫu cho bài viết này, bạn sẽ cần tạo một thư mục mới trong mô-đun người bán. Thư mục mới được gọi là “mẫu” này sẽ là nơi lưu trữ tất cả các tài liệu HTML cho ứng dụng của người bán — bắt đầu với trang chủ.
Tệp seller_home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sellers | E-commerce</title>
</head>
<body>
<h1>Welcome Sellers!</h1>
</body>
</html>
Sau khi bạn đã tạo các mẫu của mình, bạn sẽ cần hiển thị chúng với Django bằng cách thêm thư mục mẫu của bạn vào MẪU phần của settings.py tập tin. Cập nhật MẪU phần sẽ giống như sau:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
# new code that points to the location of the templates
BASE_DIR / 'sellers' / 'templates'
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Bây giờ Django biết nơi tìm các mẫu cho trang web, bạn có thể tiếp tục và hiển thị chúng lên giao diện người dùng bằng cách sử dụng chế độ xem.
Xem của Django là gì?
Chế độ xem là lớp thứ hai của kiến trúc MVT của Django, một mẫu là vô dụng trừ khi một chế độ xem kết xuất nó với giao diện người dùng. Chế độ xem có trách nhiệm chấp nhận các yêu cầu web và trả lại các phản hồi thích hợp (bao gồm cả các mẫu). Ở dạng cơ bản nhất, dạng xem là một hàm Python, được lưu trữ trong view.py tệp của dự án Django của bạn.
Tạo chế độ xem Django
Các view.py tệp nằm trong mô-đun người bán của dự án Django mẫu. Khi người bán truy cập trang web của bạn, bạn sẽ muốn họ truy cập trang chủ của người bán. Trang chủ này bạn sẽ tạo bằng cách sử dụng mẫu HTML, giống như trang được tạo trong phần mẫu ở trên.
Tệp view.py
from django.shortcuts import renderdef index(request):
return render(request, 'sellers_home.html')
Chế độ xem ở trên nhận một yêu cầu và trả về mẫu HTML của người bán. Vì vậy, mỗi khi người dùng truy cập (hoặc yêu cầu) http://127.0.0.1:8000/sellers/, họ sẽ thấy trang chủ của người bán. Đây là sau khi bạn tạo urls.py tệp trong mô-đun của người bán.
Tệp urls.py của Người bán
from django.urls import path
from . import viewsurlpatterns = [
path('', views.index, name='index'),
]
Và bao gồm đường dẫn đến mô-đun của người bán urls.py tập tin trong urls.py tập tin nằm trong thư mục Django chính.
Tệp urls.py Trang web
from django.contrib import admin
from django.urls import include, pathurlpatterns = [
path('sellers/', include('sellers.urls')),
path('admin/', admin.site.urls),
]
Bây giờ chế độ xem đã được thiết lập, bạn có thể đảm bảo rằng máy chủ Django vẫn đang chạy và điều hướng đến http://127.0.0.1:8000/sellers/ trong trình duyệt của bạn để xem trang chủ của người bán.
Trang chủ của Người bán
Kiến trúc MVT của Django so với Kiến trúc MVC
Kiến trúc MVT của Django khá khác với kiến trúc MVC phổ biến.
Phần mẫu của kiến trúc MVT hoạt động theo cách giống như chế độ xem trong kiến trúc MVC, trong khi chế độ xem trong kiến trúc MVT hiển thị các chất lượng tương tự như bộ điều khiển trong kiến trúc MVC. Tuy nhiên, các mô hình trong cả hai kiến trúc hoạt động giống nhau.
Đọc tiếp
Thông tin về các Tác giả