Բացատրված է Django-ի MVT ճարտարապետությունը


Հետաքրքրվա՞ծ եք MVT-ի և MVC ճարտարապետության միջև եղած տարբերությունների մասին: Չգիտե՞ք, թե ինչ են նշանակում այդ տերմինները: Պարզեք այստեղ:

Django վեբ շրջանակն ունի մոդել-դիտում-ձևանմուշ (MVT) ճարտարապետություն, ինչը այն դարձնում է միակ շրջանակը, որը ձեզ անհրաժեշտ կլինի ամբողջական կայք կամ վեբ հավելված ստեղծելու համար: Python-ի այս շրջանակը թույլ է տալիս ստեղծել մոդելներ, որոնք ստեղծում են տվյալների շտեմարաններ և դինամիկ HTML ձևանմուշներ մատուցում UI-ին՝ օգտագործելով views:

Ջանգոյի ուժը գաղտնիք չէ. այն արագ է, հուսալի, մասշտաբային և ապահով: Այս ծրագրաշարի հուսալիությունը, ինչպես նաև մասշտաբայնությունը հիմնված է նրա MVT ճարտարապետության վրա: Եվ այս հոդվածում դուք կիմանաք, թե ինչպես է աշխատում Django-ի MVT ճարտարապետությունը:

Ո՞րն է Ջանգոյի մոդելը:

Django-ի MVT ճարտարապետության մոդելը սահմանում է տվյալների կառուցվածքը և վարքագիծը, որը ցանկանում եք պահել ձեր կայքի միջոցով: Ձեր ստեղծած Django-ի յուրաքանչյուր մոդել առաջացնում է տվյալների բազայի համապատասխան աղյուսակ, որտեղ մոդելի յուրաքանչյուր հատկանիշ դառնում է աղյուսակի դաշտ:

Շարունակելով Django-ի մասին մեր ներածական հոդվածի կարգավորումը՝ դուք կարող եք մոդել ստեղծել վաճառողների համար: Վաճառողը կարող է ունենալ վաճառողի մոդել, որն ունի անձնական տվյալներ, ինչպիսիք են անունը և կոնտակտային տվյալները, և հարակից մոդել յուրաքանչյուր վաճառող ապրանքների համար:

Django նախագծի ֆայլի գոյություն ունեցող նմուշ

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

Django մոդելների ստեղծում

Եթե վերևի ֆայլի կառուցվածքում նայեք վաճառողների հավելվածների բաժինը, կտեսնեք models.py անունով ֆայլ: Այստեղ դուք կստեղծեք ձեր բոլոր Django մոդելները ձեր կայքի վաճառողների բաժնի համար: Ձեր ստեղծած յուրաքանչյուր մոդելը կլինի Django’s Model API-ի ենթադաս, այդ իսկ պատճառով Django-ի կողմից ստեղծված models.py յուրաքանչյուր ֆայլ ունի մոդելների լռելյայն ներմուծում:

Models.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()

Վերևի կոդը model.py ֆայլի թարմացված բովանդակության պատճենն է: Այժմ ֆայլը ստեղծում է երկու մոդել՝ Վաճառող և Ապրանք: Այս մոդելները կիսում են մեկ-շատերի հարաբերությունները, որտեղ մեկ վաճառողը կարող է վաճառել բազմաթիվ ապրանքներ: Այսպիսով, Ապրանքի մոդելն ունի օտար բանալին վաճառողի կողմից և on_delete հատկանիշը սահմանված է models.CASCADE, ինչը նշանակում է, որ երբ ջնջում եք վաճառող, դուք ավտոմատ կերպով կջնջեք յուրաքանչյուր ապրանք, որն ունի այդ հիմնական բանալին որպես օտար բանալին:

Նախքան ձեր ստեղծած ցանկացած մոդել օգտագործելը, դուք պետք է Django-ին ասեք, թե որտեղ գտնել այն: Դա անելու համար դուք պետք է անցնեք settings.py ֆայլ և տեղադրեք մոդուլի անունը, որը պարունակում է models.py ֆայլը, INSTALLED_APP բաժինը:

Այս հոդվածի օրինակելի նախագծում models.py ֆայլը գտնվում է վաճառողների մոդուլում: Հետևաբար, թարմացված INSTALLED_APP բաժինը կկարդա հետևյալը.

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sellers',
]

Վերևի կոդով վաճառողների հավելվածի մոդելներն այժմ տեսանելի են Django կայքին, և այժմ կարող եք անցնել միգրացիաներին:

Միգրացիաների անցկացումը կարևոր է, քանի որ այս գործընթացը ձեր մոդելներում կատարած փոփոխությունները տվյալների բազայի համապատասխան սխեմային տարածելու միջոց է: Այսպիսով, ամեն անգամ, երբ դուք փոփոխություններ եք կատարում ձեր մոդելում, դուք պետք է անցկացնեք միգրացիայի գործընթացը, որը ներառում է երկու քայլ:

Քայլ առաջինը միգրացիաներ կատարելն է, որը հրաման է, որը ստեղծում է միգրացիաներ models.py ֆայլում հայտնաբերված փոփոխությունների հիման վրա: Միգրացիայի գործընթացը սկսելու համար դուք պետք է բացեք ձեր տերմինալը, նավարկեք դեպի այն գրացուցակը, որն ունի ձեր Django նախագիծը և գործարկեք սերվերը՝ օգտագործելով հետևյալ հրամանը.

python manage.py runserver

Մեկ տերմինալում աշխատող սերվերի դեպքում բացեք նոր տերմինալ և մուտքագրեք հետևյալ հրամանը.

python manage.py makemigrations

Կատարումից հետո տերմինալը կստեղծի հետևյալ ելքը.

Migrations for 'sellers':
sellers\migrations\0001_initial.py
- Create model Seller
- Create model Product

Վերոնշյալ արդյունքը հստակ նշում է, որ այժմ դուք ունեք միգրացիա երկու մոդելի համար՝ վաճառողի և ապրանքի: Այժմ, եթե նավարկեք դեպի ձեր վաճառողների մոդուլի միգրացիոն պանակը, կտեսնեք, որ այն այժմ ունի նոր ֆայլ, որը կոչվում է 0001_initial.py: Այս ֆայլում դուք կգտնեք ձեր նոր ստեղծած միգրացիաները:

0001_initial.py Ֆայլը

# Generated by Django 3.2.9 on 2022-02-26 16:06

from 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')),
],
),
]

Ամեն անգամ, երբ դուք կատարում եք նոր միգրացիա, միգրացիայի պանակը ստեղծում է այս ֆայլի նոր տարբերակը:

Միգրացիայի գործընթացի երկրորդ քայլը մոդելների վերջնական տեղափոխումն է: Սա նշանակում է, որ դուք համաժամացնում եք տվյալների բազայի վիճակը models.py ֆայլի հետ՝ օգտագործելով այն միգրացիաները, որոնք հենց նոր ստեղծեցիք 0001_initial.py ֆայլում: Դուք կարող եք ավարտել այս գործընթացը (մինչ սերվերը դեռ աշխատում է) հետևյալ հրամանով.

python manage.py migrate

Ի՞նչ է Django-ի կաղապարը:

Կաղապարները ձեր Django նախագծի համար դինամիկ HTML ստեղծելու միջոց են: Django-ի յուրաքանչյուր ձևանմուշ ունի .html ընդլայնում և ստատիկ և դինամիկ բովանդակության համադրություն: Django կաղապարներն ունեն յուրահատուկ շարահյուսություն, որը ներառում է HTML փաստաթղթում փոփոխականներ և պիտակներ ստեղծելու նոր եղանակներ:

Django ձևանմուշի ստեղծում

Այս հոդվածի էլեկտրոնային առևտրի վեբկայքում ձևանմուշներ ներկայացնելու համար ձեզ հարկավոր է նոր գրացուցակ ստեղծել վաճառողների մոդուլում: Այս նոր գրացուցակը, որը կոչվում է «կաղապարներ», կլինի բոլոր HTML փաստաթղթերի տունը վաճառողների հավելվածի համար՝ սկսած գլխավոր էջից:

The sellers_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>

Ձեր ձևանմուշները ստեղծելուց հետո դուք պետք է դրանք տեսանելի դարձնեք Django-ի համար՝ ավելացնելով ձեր ձևանմուշների գրացուցակը SEttings.py ֆայլի TEMPLATES բաժնում: Թարմացված ԿԱՂԱՄԲՅՈՒՂԵՐ բաժինը կունենա հետևյալ տեսքը.

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',
],
},
},
]

Այժմ, երբ Django-ն գիտի, թե որտեղ գտնել կայքի ձևանմուշները, կարող եք շարունակել և դրանք մատուցել UI-ին՝ օգտագործելով տեսքը:

Ո՞րն է Ջանգոյի տեսակետը:

View-ը Django-ի MVT ճարտարապետության երկրորդ շերտն է, ձևանմուշն անիմաստ է, քանի դեռ տեսքը չի տրամադրում այն UI-ին: Տեսակը պատասխանատու է վեբ հարցումների ընդունման և համապատասխան պատասխաններ (ներառյալ ձևանմուշները) վերադարձնելու համար: Իր ամենահիմնական ձևով դիտումը Python ֆունկցիա է, որը պահվում է ձեր Django նախագծի view.py ֆայլում:

Django View-ի ստեղծում

view.py ֆայլը գտնվում է Django նախագծի նմուշի վաճառողների մոդուլում: Երբ վաճառողը այցելում է ձեր կայք, դուք կցանկանաք, որ նա գնա վաճառողի գլխավոր էջ: Այս գլխավոր էջը դուք կստեղծեք՝ օգտագործելով HTML ձևանմուշ, որը նման է վերևի կաղապարի բաժնում ստեղծվածին:

View.py Ֆայլը

from django.shortcuts import render

def index(request):
return render(request, 'sellers_home.html')

Վերևի տեսքը ընդունում է հարցում և վերադարձնում է վաճառողի HTML ձևանմուշը: Այսպիսով, ամեն անգամ, երբ օգտատերը այցելում է (կամ խնդրում) http://127.0.0.1:8000/sellers/, նրանք կտեսնեն վաճառողների գլխավոր էջը: Սա այն բանից հետո, երբ դուք ստեղծեք urls.py ֆայլ վաճառողների մոդուլում:

Sellers urls.py ֆայլը

from django.urls import path
from . import views

urlpatterns = [
path('', views.index, name='index'),
]

Եվ ներառեք դեպի վաճառողների մոդուլի urls.py ֆայլի ուղին urls.py ֆայլում, որը գտնվում է Django-ի հիմնական գրացուցակում:

Կայքի urls.py ֆայլը

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('sellers/', include('sellers.urls')),
path('admin/', admin.site.urls),
]

Այժմ, երբ տեսքը կարգավորվել է, դուք կարող եք համոզվել, որ Django սերվերը դեռ աշխատում է և նավարկեք դեպի http://127.0.0.1:8000/sellers/ ձեր բրաուզերում՝ վաճառողների գլխավոր էջը տեսնելու համար:

Վաճառողների գլխավոր էջը

Django’s MVT Architecture ընդդեմ MVC Architecture-ի

Django-ի MVT ճարտարապետությունը բավականին տարբերվում է հանրաճանաչ MVC ճարտարապետությունից:

MVT ճարտարապետության կաղապարի բաժինը գործում է մոտավորապես նույն կերպ, ինչ տեսքը MVC ճարտարապետության մեջ, մինչդեռ MVT ճարտարապետության տեսքը ցուցադրում է որակներ, որոնք նման են MVC ճարտարապետության կարգավորիչին: Այնուամենայնիվ, երկու ճարտարապետության մոդելներն էլ աշխատում են միանման: