Python ning versiyasini bilish




Download 2.75 Mb.
bet2/3
Sana02.04.2024
Hajmi2.75 Mb.
#185827
1   2   3
Bog'liq
1-dars
1-амалиёт, 2-amaly ish BAXTINUR, O\'quv reja 4-m.ish, 35% ANKETASI
from django.shortcuts import render
from django.http import HttpResponse


def index(request):
print(request)
return HttpResponse("Hello world!!!")
Ammo marshrutizator bu ilovani ko’rsatishi uchun mysite ilovasining urls.py faylida yo’nalish ko’rsatilmagan.

Faqatgina admin ilovasi marshruti ko’rsatilgan. Misol uchun http://127.0.0.1:8000/admin manzilini brauzerning adreslar satriga kiritib, quyidagicha admin ilovasi yuklaanganligini ko’rishimiz mumkin.

Lekin http://127.0.0.1:8000/news manzilini kiritganimizda bizga quyidagicha xatolik xabari beriladi.

Sababi biz website ilovasining urls.py marshrutizator faylida bu ilova uchun yo’lni ko’rsatmadik.
Endi bu faylni quyidagicha o’zgartiramiz

Bu yerda news papkasi website papkasidan tashqarida joylashgani uchun news papkasi ko’rinmaydi va xatolik beradi. Shu vaqtda quyidagicha yo’nalishni to’g’rilash lozim

Source Root komandasi tanlangach xatolik yo’qoladi.

Endi adreslar satriga http://127.0.0.1:8000/news/ manzilni kiritsak, quyidagi natijani olishimiz mumkin.


Ya’ni news ilovasini ishga tushirdik.
Endi news ilovasining views.py fayliga yana bir funksiya yozamiz.
Misol uchun: name nomli funksiya yozamiz u bizga ism familiyani qaytarsin

Endi bu funksiyani ham website ilovasining urls.py faylida ko’rsatamiz.

Va http://127.0.0.1:8000/name/ manzilda quyidagi natijani olamiz.

Yuqorida qaralgan marshrutlash usuli optimal emas. Endi include moduli yordamida ilovalarni marshrutlashni qaraymiz.

Bunda news ilovasi hali urls.py fayliga ega emas, shuning uchun uni yaratib olishimiz kerak.


Va enter tugmasini bosamiz

Endi news/urls.py fayliga quyidagi kodni yozamiz.

Bunda marshrutizatorlar soni ikkita bo’ldi. Asosiy website nomli proyektning marshrutizatori ilovaning marshrutizatoriga murojaat qiladi. Ilovaning marshrutizatori esa, qaysi sahifa yuklanishini marshrutlab beradi.
Endi yana serverni ishga tushirib sinab ko’ramiz.

Name sahifasini ishga tushirish esa

Modellar
Kengroq https://django.fun/docs/django/ru/3.2/ manzilning Уровень модели bo’limida ma’lumot olish mumkin.
Kompyuterimizga SQLiteStudio dasturini o’rnatib olamiz. Dasturdan foydalanish quyida keltirilgan.

Dasturni ishga tushirganimizda quyidagi dastur oynasi hosil bo’ladi.

Dasturga yangi ma’lumotlar bazasi qo’shish uchun quyida ko’rsatilgan tugmani bosamiz yoki ctrl+O tugmalar kobinatsiyasidan foydalanamiz.

Bunda quyidagi muloqot oynasi hosil bo’ladi.

Bu yerda File bo’limiga tugmasi orqali mavjud MB faylini yuklaymiz. Biz djangoSaytlar papkasida websayt nomli loyiha yaratgan edik. Websayt papkasi ichida db.sqlite ma’lumotlar bazasi avtomatik hosil qilingan edi. Shu faylni mazkur MBBT ga bog’laymiz.

Yuklaganimizdan so’ng

Oynada Test connection tugmasini bosamiz va keyin OK tugmasini bosamiz. Bo’sh MB MBBT ga yuklandi.

Django Model saqlanuvchi ma’lumotlarning strukturasini ifodalaydi. Ularning nomi, maydon tipi, maximum kengligi, avtomatik qiymati, ro’yxat punktlari tanlovi, dokumentatsiya uchun yordam matni va hokazolarni ko’rsatadi.


Uning kodlari models.py faylida yoziladi. Yuqorida yaratgan news ilovasining models.py fayliga kerakli kodlarni kiritish bilan davom etamiz.

models moduli models.py fayliga dastlab import qilingan bo’ladi. Biz merosxo’rlik asosida bu modeldan foydalanamiz.
Biz News obyektini sarlavhasi(title), matni(content), yaratilgan vaqti(created_at), yangilangan vaqti(updated_at), va rasmi(photo) degan atributlari bilan birgalikda yaratamiz. Buning uchun quyidagi dastur kodini kiritamiz.

Endi bu kodni qatorma qator tahlil qilamiz.
class News(models.Model):
News nomli obyekt yaratilayati va bu obyekt models modulida joylashgan Model obyektining avlodi sifatida yaratildi.
title = models.CharField(max_length=150)
Sarlavha maksimum uzunligi 150 ta belgidan iborat satr sifatida yaratildi va bu imkoniyatni bizga models modulida joylashgan CharField obyekti berdi.
content = models.TextField(blank=True)
Yangilik matni yaratildi va bu imkoniyatni bizga models modulida joylashgan TextField obyekti berdi. Blank = True – bo’shliq ya’ni dastlab hech qanday matn yo’q.
created_at = models.DateTimeField(auto_now_add=True)
Yangilik yaratilgan vaqt atributi yaratildi va bu imkoniyatni bizga models modulida joylashgan DateTimeField obyekti berdi.
Bu yerda auto_now yoki auto_now_add atributlaridan foydalanish mumkin, ularning farqi
auto_now – har safar Model.save() funksiyasi chaqirilganda qiymatni joriy vaqtga qo’yadi.
auto_now_add – Faqatgina yangilik yaratilgan vaqtni joriy vaqtga qo’yadi.
updated_at = models.DateTimeField(auto_now=True)
Yangilik yangilangan vaqt atributi yaratildi va bu imkoniyatni bizga models modulida joylashgan DateTimeField obyekti berdi.
photo = models.ImageField(upload_to='photos/%Y/%m/%d')
Yangilik rasmi atributi yaratildi va bu imkoniyatni bizga ImageField obyekti berdi. upload_to atributi fayl joylashgan adresni oladi.
is_published = models.BooleanField(default=True)
Chop qilinganligini ko’rsatuvchi is_published atributi BooleanField obyekti yordamida yaratildi. Avtomatik tarzda False qiymatini qabul qilganligi uchun biz uni True ga o’zgartirdik.
Django juda ko’plab bu kabi obyektlarga ega. Ular haqida https://django.fun/docs/django/ru/3.2/ref/models/fields/ manzildan ma’lumotlar olish mumkin.

Migrations


Migrations Model va MB o’rtasidagi aloqani o’rnatuvchi vosita hisoblanadi. Juda ko’p hollarda ular avtomatik hisoblanadi lekin qachon migratsiya qilishni bilish lozim bo’ladi. Kengroq ma’lumotni https://docs.djangoproject.com/en/3.2/topics/migrations/ manzildan olish mumkin.
Yangi ilova yaratilganda unda avtomatik tarzda migrations katalogi paydo bo’ladi va uning ichida bo’sh __init__.py fayli mavjud.

Yuqorida yaratilgan MB da rasm saqlash qismi mavjud. Rasmni saqlash uchun pillow kutubxonasini o’rnatish kerak.
pip install pillow
komandasini terminalga kiritamiz.
Endi migration qilish uchun
Python manage.py makemigrations
komandasini terminalga kiritamiz.

News ilovasi uchun migratsiya qilindi. News\migrations\0001_initial.py fayli yaratildi. News modeli yaratildi degan xabarlar chop qilindi.

0001_initial.py faylida quyidagi dastur kodini ko’rishimiz mumkin.
from django.db import migrations, models

class Migration(migrations.Migration):


initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='News',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=150)),
('content', models.TextField(blank=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('photo', models.ImageField(upload_to='photos/%Y/%m/%d')),
('is_published', models.BooleanField(default=True)),
],
),
]

Endi yaratilgan modelni MBBT (SQLite3) ga bog’lash uchun quyidagi dastur kodini kiritamiz.


Python manage.py sqlmigrate news 0001
Fayl nomidagi _initial.py qismi shart emas. Chunki bu qism har bir yaratiluvchi modellar nomlarida mavjud bo’ladi.

Ko’rib turganingizdek, modelda ko’rsatilgan tartib bo’yicha jadval yaratildi (CREATE TABLE) ya’ni teng kuchli SQL komandasi bilan almashtirildi.
Endi butun loyiha bo’yicha migratsiya qilish uchun
Python manage.py migrate
komandasidan foydalanamiz.

Bu yerda oxiridan ikkinchi migration biz yaratgan 0001_initial.py modeli migratsiyasi
Shundan so’ng SQLiteStudio dasturini qayta yuklaganimizda ma’lumotlar bazasi hosil bo’lganigini ko’rishimiz mukin bo’ladi.

Rasmlar saqlanishi uchun papka yaratishimiz kerak bo’ladi. Buni websayt loyihasining settings.py faylida amalga oshiramiz. Quyidagi kodlarni
STATIC_URL = '/static/'
Yozuvidan so’ng kiritamiz.

Endi asosiy urls.py faylida urlpatterns ga biz yaratgan o’zgaruvchilarni bog’laymiz. Settings.py faylidagi DEBUG o’zgaruvchisi mazkur sayt ishlayotgan yoki ishlamayotganligini ko’rsatadi agar bu o’zgaruvchi TRUE qiymatni qabul qilgan bo’lsa, ishlayotgan bo’ladi, agar sayt otladka rejimida bo’lsa bu o’zgaruvchi FALSE qiymatni qabul qiladi.
Shu sababli bog’lashda DEBUG o’zgaruvchisi ROST qiymat qabul qilganligini tekshirishimiz kerak.

CRUD 1-dars


Yaratilgan ma’lumotlar bazasiga ma’lumot joylashtrish uchun bizga loyihaning administrator qismo kerak bo’ladi lekin biz hali bu qismni yaratmadik. Shuning uchun oddiy python kodlaridan foydalanib bazaga ma’lumot kiritishni qarab chiqamiz.
Python manage.py shell
Buyrug’ini terminalda ishga tushirsak, python console ishga tushadi

Endi ma’lumot kiritish uchun quyidagi kodlarni kiritamiz.

Dastlab News modelini import qilib oldik. Keyin esa bu modelning birinchi namunasini yaratdik.

Edni yuqoridagi kabi namuna yaratilganligini tekshirib ko’rishimiz mumkin. Bu model namunasi yaratilgani bilan hali ma’lumot bazaga yozilgani yo’q. Agar News1 ning created_at atributiga murojaat qilsak, bizga hech qanday ma’lumot ekranga chiqarmaydi, lekin model yaratishda avtomatik joriy sana berilishi ko’rsatilgan edi. Sababi hali konstruktorga murojaat qilingani bilan MB ga yozilgani yo’q. Ma’lumotni saqlash uchun Model ning save() funksiyasidan foydalaniladi.

Endi Model ning News1 namunasi MB ga yozildi. Created_at, updated_at, photo va is_published atributlari avtomatik qiymat qabul qildi

Shundan so’ng SQLiteStudio dasturini ochib, refresh qilsak, ma’lumot jadvalga kiritilganini ko’rishimiz mumkin bo’ladi.

MB ga ma’lumot yozilganligi vaqti sql kod va boshqalar haqida ma’lumot olish uchun connection modulida foydalanishimiz mumkin. Buni quyidagicha amalga oshiramiz.

Download 2.75 Mb.
1   2   3




Download 2.75 Mb.