Django մոդելներ

Մեզ ինչ-որ բան է պետք ՝ մեր բոլոր բլոգային գրառումները պահելու համար, դա հենց այն է ինչ մենք հիմա կստեղծենք: Բայց նախ եկեք խոսենք objects/օբյեկտներ կոչվող իրերի մասին:

Օbjects/Օբյեկտներ

Ծրագրավորման մեջ կա մի հասկացություն, որը կոչվում է օբյեկտիվ կողմնորոշում(կամ օբյեկտի վրա հիմնված ծրագրավորում:): Գաղափարն այն է, որ հրահանգների ձանձրալի հաջորդականության փոխարեն, մենք մոդելավորում ենք իրերը և նկարագրում, թե ինչպես են դրանք փոխազդում միմյանց հետ:

Այսպիսով, ինչ է օբյեկտը: Դա հատկությունների և գործողությունների հավաքածու է: Տարօրինակ է թվում, բայց մենք մի օրինակ կբերենք:

Եթե ​​մենք ուզում ենք կատու մոդելավորել, ապա կստեղծենք Cat/ կատուt օբյեկտ, որն ունի որոշակի հատկություններ, օրինակ ՝ color/գույն, age/տարիք mood/տրամադրություն ՝ (վատ, լավ, քնկոտ;)), owner/սեփականատեր (օրինակ ՝ մեկ այլ առարկա. Անձ կամ, եթե կատուն վայրի է, այս հատկությունը դատարկ կլինի):

Cat/Կատու օբյեկտը կունենա որոշակի գործողությունների շարք. purr/մլավել, scratch/ճանկռել, կամ feed/կերակրել (որտեղ մենք կատուին տալիս ենք մի քանի CatFood (կատվի սնունդ), որը կարող է նաև լինել իր սեփական հատկություններով առանձին առարկա օրինակ taste/համ ):

Cat
--------
color
age
mood
owner
purr()
scratch()
feed(cat_food)


CatFood
--------
taste

Այսպիսով, հիմնականում գաղափարը՝ օբյեկտի նկարագրումն է կոդի մեջ՝ հատկություններով (կոչվում են object properties/օբյեկտի հատկություններ) և գործողություններով (կոչվում են methods/մեթոդներ):

Այսպիսով, ինչպե՞ս ենք մոդելավորելու բլոգի հաղորդագրությունները: Մենք ուզում ենք բլոգ կառուցել, այնպես չէ՞:

Մենք պետք է պատասխանենք այն հարցին. Ի՞նչ է բլոգի գրառումը: Ի՞նչ հատկություններ պետք է այն ունենա:

Դե, հաստատ մեր բլոգային գրառմանը պետք է ինչ-որ տեքստ իր բովանդակությամբ և վերնագիրով, այնպես չէ՞: Լավ կլինի իմանալ նաև, թե ով է այն գրել, այնպես որ հեղինակը մեզ պետք է: Վերջապես, մենք պետք է իմանանք, թե երբ է ստեղծվել գրառումը և երբ է հրապարակվել:

Post
--------
title
text
author
created_date
published_date

Ի՞նչ բաներ կարող եք անել բլոգում գրառման միջոցով: Լավ կլիներ որ գրառումը հրապարակող ինչ-որ մեթոդ լիներ, ճի՞շտ է:

Այսպիսով, մեզ հարկավոր է publish/հրապարակման մեթոդ:

Դե, քանի որ մենք որոշել ենք, թե ինչ ենք ուզում ստանալ, եկեք սկսենք մոդելավորել այն Django- ում:

Django մոդել

Իմանալով, թե ինչ է օբյեկտը, մենք կարող ենք ստեղծել Django մոդել մեր բլոգի գրառման համար:

Django- ում մոդելը հատուկ տեսակի առարկա է. Այն պահվում է տվյալների բազայում/database.: Տվյալների բազան/database-ը տարբեր տվյալների հավաքածու է: Սա այն վայրն է, որտեղ դուք կպահեք տեղեկատվություն օգտվողների, ձեր բլոգի հաղորդագրությունների և այլնի մասին: Մենք կօգտագործենք SQLite տվյալների բազա ՝ մեր տվյալները պահելու համար: Սա ներքին կարգավորման/default Django տվյալների շտեմարանն է. Այս փուլում նրա հնարավորությունները բավարար են մեր պահանջների համար:

Դուք կարող եք տվյալների շտեմարանում մոդելի մասին մտածել որպես աղյուսակ ՝ սյունակներով (դաշտերով/columns (fields) և տողերով (տվյալներով)/rows (data):

Դիմումների ստեղծում

Ամեն ինչ կոկիկ պահելու համար մենք մեր ծրագրի ներսում կստեղծենք առանձին ծրագիր: Շատ հաճելի է ամեն ինչ կազմակերպել հենց սկզբից: Ծրագիր / Application ստեղծելու համար մենք պետք է հրամանի տողում մուտքագրենք հետևյալ հրահանգը ( djangogirls գրացուցակից, որտեղ գտնվում է manage.py ֆայլը).

macOS and Linux:

(myvenv) ~/djangogirls$ python manage.py startapp blog

Windows:

(myvenv) C:\Users\Name\djangogirls> python manage.py startapp blog

Դուք կնկատեք, որ ստեղծվել է նոր blog գրացուցակ, որն այժմ պարունակում է մի շարք ֆայլեր: Այսպիսով, մեր նախագծում գրացուցակները և ֆայլերը պետք է ունենան այսպիսի տեսք.

djangogirls
├── blog
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── myvenv
│   └── ...
└── requirements.txt

Դիմումը/application-ը ստեղծվելուց հետո մենք պետք է Django- ին ասենք, որ այն այժմ պետք է օգտագործի այն: Մենք դա անում ենք mysite/settings.py ֆայլում - բացեք այն ձեր կոդի խմբագրում/code editor: Մենք պետք է գտնենք INSTALLED_APPS և ավելացնենք 'blog.apps.BlogConfig', պարունակող տող, հենց վերևում ] : Այսպիսով, վերջնական արդյունքը պետք է ունենա այսպիսի տեսք.

mysite/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog.apps.BlogConfig',
]

Բլոգի գրառման մոդելի ստեղծում

blog/models.py այս ֆայլում մենք բնութագրում ենք Models/մոդելներ կոչվող բոլոր օբյեկտները. Սա մի տեղ է, որտեղ մենք կսահմանենք մեր բլոգի գրառումը/blog post-երը:

Բացեք blog/models.py այս ֆայլը կոդերի խմբագրում, ջնջեք ամբողջ տեքստը և փոխարենը տեղադրեք հետևյալ կոդը.

blog/models.py

from django.conf import settings
from django.db import models
from django.utils import timezone


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

Համոզվեք, որ str մեթոդի յուրաքանչյուր կողմում օգտագործեք երկու տակի գծիկ (_) : Այս կոնվենցիան հաճախ օգտագործվում է Python ծրագրավորման մեջ , և երբեմն կոչվում է "dunder" (կարճ ՝ «կրկնակի ընդգծում»/ "double-underscore"):

Սարսափելի է թվում, ճի՞շտ է: Բայց մի անհանգստացեք. Մենք կբացատրենք, թե ինչ են նշանակում այս տողերը:

Բոլոր տողերը, որոնք from կամ import են սկսվում, թույլ են տալիս մուտք գործել կոդ այլ ֆայլերից: Այսպիսով, բոլոր ֆայլերի միջև միևնույն կոդը պատճենելու և տեղադրելու փոխարեն, մենք կարող ենք այն հղել ՝ օգտագործելով ... import ....

class Post(models.Model): –այս տողը սահմանում է մեր մոդելը (դա object/օբյեկտ-ն է):

  • class/դասը հատուկ բանալիբառ է, որը ցույց է տալիս, որ մենք օբյեկտ ենք սահմանում:
  • Post -ը մեր մոդելի անունն է: Ցանկության դեպքում մենք կարող ենք փոխել այն (բայց պետք է խուսափել հատուկ նիշերից և սպիտակ տարածությունից): Միշտ դասի անունը սկսեք մեծատառով:
  • models.Model նշանակում է, որ Post օբյեկտը Django մոդել է, ուստի Django- ն գիտի, որ անհրաժեշտ է այն պահպանել տվյալների բազայում:

Այժմ մենք սահմանում ենք այն հատկությունները, որոնց մասին մենք խոսում էինք ՝ title/վերնագիրը, text/տեքստը, created_date/ստեղծման ամսաթիվը, published_date/հրապարակման ամսաթիվը և author/հեղինակ. Դա անելու համար մենք պետք է պարզենք յուրաքանչյուր դաշտի տեսակը (արդյո՞ք այն տեքստային է): Թվայի՞ն Ամսաթի՞վ Կապը մեկ այլ օբյեկտի հետ, ինչպես օգտագործողը:)

  • models.CharField - այսպես մենք սահմանում. տեքստի դաշտ նիշերի քանակի սահմանափակումով:
  • models.TextField -սա երկար տեքստի համար է ՝ առանց սահմանի: Իդեալական է թվում բլոգի գրառման բովանդակության համար, այնպես չէ՞:
  • models.DateTimeField - սա ամսաթիվ և ժամ է:
  • models.ForeignKey –սա հղում է դեպի այլ մոդել:

Մենք չենք բացատրի կոդերի յուրաքանչյուր մասն այստեղ, քանի որ դա չափազանց շատ ժամանակ կպահանջի: Ստուգեք Django- ի պաշտոնական փաստաթղթերը. Եթե ցանկանում եք ավելին իմանալ մոդելի դաշտերի և տարբեր օբյեկտներ սահմանելու մասին, այս հղումը կարող է օգնել. (https://docs.djangoproject.com/en/2.2/ref/models/fields/#field-types) :

Ինչ կասե՞ք def publish(self): (def հրապարակելուն (ինքնուրույն): Սա հենց այն publish/հրապարակման եղանակն է, որի մասին նախկինում խոսում էինք: def նշանակում է, որ սա function/method-ֆունկցիա / մեթոդ է, և publish-ը մեթոդի անունն է: Ցանկության դեպքում կարող եք փոխել մեթոդի անվանումը: Անվանման կանոնն այն է, որ մենք բացատների փոխարեն օգտագործում ենք փոքրատառ և ստորին գծեր: Օրինակ, միջին գինը հաշվարկող մեթոդը կարելի է անվանել calculate_average_price:

Մեթոդները հաճախ ինչ-որ բան են վերադարձնում/ return : Դրա մի օրինակ կա __str__ մեթոդում: Այս սցենարում, երբ մենք զանգահարենք __str__(), մենք կստանանք գրության վերնագիր ունեցող տեքստ (string/տող):

Նաև նկատեք, որ def publish(self): և def __str__(self): կտրված են մեր դասի ներսում: Քանի որ Python- ը զգայուն է սպիտակ տարածության նկատմամբ, մենք պետք է դասի մեջ ներմուծենք մեր մեթոդները: Հակառակ դեպքում, մեթոդները չեն պատկանի դասին, և դուք կարող եք ինչ-որ անսպասելի արդյունք ունենալ:

Եթե ​​մոդելների հետ կապված ինչ-որ բան դեռ պարզ չէ, ազատորեն հարցրեք ձեր ուսուցչին: Մենք գիտենք, որ դա իսկապես բարդ է, հատկապես, երբ զուգահեռաբար ուսումնասիրում ես, թե ինչ են օբյեկտներն/objects ու գործառույթները/functions: Բայց հուսանք, որ այս ամենը քեզ հիմա մոգություն չի թվում:

Ստեղծեք աղյուսակներ ձեր տվյալների բազայում

Վերջին քայլը տվյալների բազայում մեր նոր մոդելի ավելացումն է: Նախ, մենք պետք է տեղյակ պահենք Django- ին, որ մենք փոփոխություններ ենք մտցրել մեր մոդելի մեջ: (Մենք հենց նոր ստեղծեցինք այն) Գնացեք ձեր վահանակի պատուհանում և մուտքագրեք python manage.py makemigrations blog: Այն պետք է ունենա նման տեսք:

command-line

(myvenv) ~/djangogirls$ python manage.py makemigrations blog
Migrations for 'blog':
  blog/migrations/0001_initial.py:

  - Create model Post

Նշում. Մի մոռացեք պահպանել ձեր խմբագրած ֆայլերը: Հակառակ դեպքում, ձեր համակարգիչը կգործարկի նախորդ տարբերակները, որը կարող է ձեզ անսպասելի սխալ հաղորդագրություններ հաղորդել:

Django- ն մեզ համար տվյալների բազայի համար ստեղծեց միգրացիոն ֆայլ: Մուտքագրեք python manage.py migrate blog , արդյունքը պետք է լինի հետևյալը.

command-line

(myvenv) ~/djangogirls$ python manage.py migrate blog
Operations to perform:
  Apply all migrations: blog
Running migrations:
  Applying blog.0001_initial... OK

Ուռա! Մեր Post մոդելը այժմ մեր տվյալների բազայում է: Ցանկալի կլիներ տեսնել դա, այնպես չէ՞: Անցեք հաջորդ գլխին ՝ տեսնելու, թե ձեր Post-ը ինչ տեսք ունի:

results matching ""

    No results matching ""