Django Framework Dərs 2 — Modellər
Əvvəlki dərsdə djangoya giriş etmişdik. Yeni bir proyekt yaratmışdıq və onun altında da bir application yaratmışdıq. Eyni proyekt üzərində davam edək. Tutaq ki verilənlər bazasıyla işləmək istəyirik. Bunun üçün yeni bir model əlavə edək və onun miqrasiya edək bazamıza.
Əvvəlcə admin səhifəsinin çalışdırılmağa çalışaq. Aşağıdakı scriptləri terminaldan çalışdıraq. Bu scriptler default django proyektindəki table-ları yaradır. Biz verilanlar bazası olaraq sqllite seçmişdik. db.sqlite3 adlı fayl yaranacaq və təxmini 128 kb həcmində.
python manage.py makemigrations
python manage.py migration
Default modellerimizi miqrasiya etdik verilenlər bazasına. İndi yeni bir istifadəçi yaradaq. Bunun üçün
python manage.py createsuperuser
scriptindən istifadə edəçəyik. Bu zaman istifadəçi adı parol email kimi məlumatlar istəyəcək.
Bu şəkildə admin adlı istifadəçi yaratdıq. superuser olaraq yaratdıq bu istifadəçini yəni admin olaraq bütün yetkilərə sahibdir. Ola bilər ki yuxarıdakı scipt işləməsin. Onda aşağıdakı scripti işlətmək lazımdı.
winpty python manage.py createsuperuser
db.sqlite3 verilənlər bazasındakı tableları görmək üçün Db Browser for sqlite proqramını yükləyib bu faylı açmaqla görə bilərsiz.
Bu tableların nə işə yaradığını təxmini anlaya bilirik daha sonrakı dərslərdə işləndikcə daha da aydın olacaq.
Daha sonra proyektimizi çalışdıraq.
python manage.py runserver
Daha sonra http://localhost:8080 yazaraq proyektimizin normal şəkildə çalışdığını görə bilərik. Admin səhifəsinə daxil olaq. http://localhost:8080/admin . Aşağıdakı səhifə açılmalıdır.
Yuxarıda açdığımız admin useri ilə səhifəyə daxil ola bilərik. Daxil olduqdan sonra belə bir səhifə bizi qarşılayacaq.
Hər şeyin doğru çalışdığına əmin olduqdan sonra indi biz verilənlər bazasına yeni table əlavə edək. Bunun üçün əvvəlcə modelimiz yaradaq. models.py faylına baxsaq orada sadəcə
from django.db import models
sətrinin olduğunu görərik. Yeni modellərimizi bu faylda yaradacayıq(Buna məcbur deyilik sadəcə başlanğıc üçün sadə bir nümunə göstəririk). Bütün modellər models.Model sinifindən törəyir. Deyək ki Customer table-ı yaratmaq istiyirik və bunun üçün əvvəlcə Modelimizi yaradırıq. Modeli aşağıdakı şəkildə yazmalıyıq.
class Customer(models.Model):
name = models.CharField(max_length=200, verbose_name=’müştəri adı’, default=’Həsən Cəfərov’, blank=True, null=True, unique=True, editable=True, db_index=True, db_column=’ad’, help_text=’Müştərinin adı soyadı ata adı’)
city = models.CharField(blank=True, max_length=120)
gender = models.CharField(blank=False, max_length=1)
phone = models.CharField(blank=True, max_length=15)
table = models.IntegerField(blank=True)
birthdate = models.DateTimeField()
is_active = models.BooleanField(default=True)
def __str__(self):
return self.name
Daha sonra modelimizə uyğun table yaratmaq üçün eyni qaydada
python manage.py makemigrations
python manage.py migration
İndi Db browser ilə db.sqlite3 faylını açaq.
Gördüyünüz kimi myfirstapp_customer table-ı yaranıb. Modeldə yazdığımız bütün sütunlar eyni tipdə əlavə olunub . Əlavə olaraq id sütunu avtomatik əlavə olunub. Diqqət etsək bu sütun primary key və autoincrement xüsusiyyətləri əlavə olunub. Django migration bu sütunu özü avtomatik yaradıb.İndiki halda proyekti çalışdırıb admin panelə daxil olsaq bu table-ı orada görmüyəcəyik. Bu table-ı admin səhifəsində görünməsini təmin etmək üçün admin.py faylına aşağıdakı sətirləri əlavə etmək lazımdır.
from django.contrib import admin
from .models import Customer # veya from myfirstapp.models import Customer
admin.site.register(Customer)
İndi proyektimizi çalışdırıb admin səhifəsinə getsək əlavə etdiyimiz table-ı görəciyik.
Buradan bu table ilə bağlı CRUD əməliyyatlarını rahat şəkildə edə bilərik.
İndi modelimizi yaratdığımız vaxt istifadə etdiyimiz tiplər haqqında danışaq. name sütunu üzərində parametrlərin nəyə yaradığına baxaq.
name = models.CharField(max_length=200, verbose_name=’müştəri adı’, default=’Həsən Cəfərov’, blank=True, null=True, unique=True, editable=True, db_index=True, db_column=’ad’, help_text=’Müştərinin adı soyadı ata adı’)
CharField — Uzunluğu 255 xarakterdən kiçik string ifadələr üçün istifadə olunan tipdir.
max_length — Bu maksimum uzunluğu təyin edir.
verbose_name — admin səhifəsində bu sütunun açıqlamasını necə görmək istəyiriksə bura yazırıq.
default — Əgər boş saxlasaq onda bura yazdığımız default dəyəri alacaq.
blank — True və False alır. Əslində table ilə əlaqəsi yoxdur. Form validation zamanı istifadə olunur.
unique — Sütun bənzərsiz adda ola bilər və ya bilməz.
editable — Əgər False dəyəri alarsa bu sütun admin paneldə və formlarda görünməz.
db_index — Bu sütun üçün index yaradılmasını bu properties ilə verə bilərik.
help_text — Formlarda görünən əlavə məlumat burada yazılır.
Digər sütunlara baxsaq İntegerField özündə tam ədəd saxlayan tipdir. BooleanField True False alır. DateTimeField tarix tipidir.
Bunlardan başqa digər çox işlənən tiplər bunlardır: FloatField, DecimalField, EmailField, URLField, FileField, ImageField, FilePathField, BinaryField.
Bu tiplər haqqında daha ətraflı məlumat buradan ala bilərsiz: https://docs.djangoproject.com/en/3.0/ref/models/fields/