ws o'zgaruvchini Workbook().active ga tenglaymiz va ws.title ni varoq nomini nima deb nomlamoqchi bo'lsak shu bilan nomlaymiz.
kodni ishga tushiramiz:
vaqroq nomini o'zgartirdik
Yacheykalarga qiymat kiritish:
ws['A1'] = 15
sace funksiyasida oldin. ws ya'ni ws nomli birinchi varoqdagi A1 katakchaning qiymatini ko'rsatyapmiz. Agar kodni ishga tushirsangiz:
qiymatini o'zgartirdik
ws (varoq) xuddi dict ga o'xshaydi. Kalit so'z orqali ('A1') qiymatini o'zgartiraverasiz ammo listga o'xshatib append funksiyasidan foydalanib qiymat kiritishingiz ham mumkin:
ws.append([51,15,5,65,65,56,65,56,56,56,65])
Bu orqali siz 2-qatorga yuqoridagi sonlarni birinma ketin yacheykalarga joylayapsiz. Nega ikkinchi qator?! Chunki siz birinchi qatorga A1 yacheykaga matn kiritib qo'ydingiz. append funksiyasidan foydalanganimizda ws ga yangi list qo'shdi.
ws ni sodda tarzda tasavvur qilamiz:
ws = [[15],[[51,15,5,65,65,56,65,56,56,56,65]]
buni biroz boshqacharoq yozamiz:
ws = [[15],
[[51,15,5,65,65,56,65,56,56,56,65]]
Excelda ham xuddi shunday holat:
append funksiyadan foydalandik
Qanday tasavvur qilishni bilib oldingiz degan umiddaman.
Siz pythonning boshqa kutubxonalaridan foydalanishingiz ham mumkin. Masalan:
Xulosa: Siz boshqa kutubxonalar bilan ishlab ko'ring, Exceldagi barcha imkoniyatlar shu kutubxonada mavjud. Sizlar bilan Bunodbek Abdurazzoqov bo'ldi. Rahmat hammaga.
Bu maqolada sizlar bilan static fayllar haqida gaplashamiz. settings.py fayli bilan tanishayotganimizda staticlar haqida ham aytib o'tgan edim. Bugun static fayllar hosil qilamiz va ishlatamiz.
Sizlarga yaxshi bo'lsin deb tayyor shablondan foydalanaman. Chunki bu shablondan foydalansak dars davomida shablonga backend yaratsak bu sizlar uchun portifolio bo'lib qoladi.
Shablonning vazifasini chuntirib o'taman. Bu shablon kitob sotuvchi do'konning sayti bo'lib web sayt orqali kitob buyutma bersa bo'ladi. Bu shablonni sizlar tortib olishingiz uchun link
djangoga hali ulangani yo'q
Bu shablonni frontendini o'zgartirib olishingiz mumkin o'zingiz hohlgandaqa. Men esa faqatgina backend qismini o'rgataman. Siz oldinlari web sayt yaratayotganingizda fayllarni shunchaki html faylini oldiga qo'yib htmlga esa href yoki src lariga faylning nomi yozib qo'yilar edi. Ammo djangoda esa biroz boshqacharoq. templates nomli papkada faqatgina html fayllar ishlaydi. Qolgan static(rasm, CSS, JS..) fayllarni esa alohida serverdan ro'yxatdan o'tkazib keyin ishlatsa bo'ladi.
Bu shablonni yaratayotgan django projectimizga joylashimiz uchun:
appmizdagi urls.py faylidan ikkinchi path funksiyasini o'chirib yuboring faqatgina bitta urls yetarli
buyrug'ini beramiz. Bu amaldan so'ng staticfiles nomli papkamizdagi fayllar static fayliga tushadi. Va static papkamizga yanabir qo'shimcha papka hosil bo'ladi "admin" nomli. Bu papka admin panelning CSS va JS fayllari bo'lib admin panelning dizaynini shu fayllar orqali o'zgartirsangiz bo'ladi. Bu esa ortiq ish biz darsligimiz davomida admin panel dizaynini o'zgartirmaymiz.
Serverni ishga tushiramiz:
static ulanmagan
Ko'rim turibsizki web sahifamiz hech qanday CSS, JS va Rasmlarga ulanmagan. Bu ni siz Ctrl + Shift + i bosib Console bo'limiga o'tib ham ko'rishingiz mumkin.
Buning uchun biz index.html faylini ochamiz va ba'zigi o'zgartirishlar kiritishni boshlaymiz. CSS, JS va Rasmlarni ulagan barcha linklarning oldiga "static/" deb yozib qo'yamiz. Chunki bizning fayllarimiz static papkada turibdi(Online qabul qilinayotganlarga tegmang u linklarni static papkasidan oladigan qilib qo'ymang).
Serverni ishga tushiramiz:
runserver
Ko'rib turibsizki barcha narsa o'z joyida. CSS, JS va Rasmlar to'g'ri ulangan. Keyingi darsdan shu saytga backend yaratmiz(har bir qismi uchun).
Bu maqolada sizlar bilan Jinja bilan tanishamiz. Fremworksiz jinja ishlamaydi. Shuning uchun biz dars davomida Jinja bilan tanishtirib ketishga qaror qildim.
from django.urls import path
from . import views
app_name = 'lib_app'
urlpatterns = [
path('', views.home, name='home'),
]
urlpatterns listiga yangi path funksiyasi yozish kerak.(istasangiz yozing bo'lmasam tayyor path funksiyasini tuzribdi o'sha funksiyani nusxalab qo'ying). 1-elementiga 'salom/', 2-elementiga views.home2, 3-elementiga name='home2'
path('salom/', views.home2, name='home2')
views.py da ham home2 nomli funksiya hosil qiling yoki tayyor home funksiyasini nusxalab oling. home2 funksiyamiz index.html ni emas index2.html ni ko'rsatadi.
home2 funksiyamizda context orqali vaqtni emas boshqa fayl deymiz. Chunki ikkala sahifamiz bir xil bo'lib qolsa farqlay olmay qolamiz.
Ko'rib turibsiz. Sahifalarimizning faqatgina 1 qator kod bilan farq qiladi. Kelajakda siz juda katta saytlar bilan ishlayottganingizda sahifaning header(tepa qism)i 1-2 Mb ni tashkil qiladi. Footer(pastki qism) ham 1-2 Mb ni tashkil qilishi mumkin. Bunda har bir sahifa ochilayotganda tepa va pastki qismni boshqattan tortib oladi(Barcha sahifaning tepa va pastki qismi bir xil bo'lsa ham). Bu ortiq Mb sariqflashga olib kiradi. Mb sariflanayotganda esa vaqt ham ketadi. Bu esa sahifalaringiz ochilayotganda sekinlik bilan ochilishiga olib keladi. Jinjadan foydalansangiz sahifaning faqatgina main(asosiy, o'rta) qismi o'zgartiradi holos. Bu esa sahifa tez ochilishiga olib keladi. Sizlar bilan Jinjada amaliy ish qilib ko'ramiz.
jinja
Birinchi bo'lib templates papkasida istagan nomdagi .html fayl hosil qilib olamiz(base.html). index.html fayli va index2.html fayllarining asosiy joyini qoldiramiz va o'xshash qismini olib olamiz. base.html fayliga tashlaymiz. Kodlar qaysi qismga qo'yilishini(index.html fayliga ulaganimizdan so'ng index.html faylini ochsak biz tanlagan joyga index.html faylini qo'yadi va ko'rsatadi) belgilash uchun kod yozamiz. {% block content %} va {% endblock %} shu kodlar ichidagi kodni almashtiradi. holos tepa va pastki qismlar qoladi main almashadi.
Biz hali beri index.html va index2.html fayllarni base.html ga ulaganimiz yo'q. Ulash uchun index.htmlga kod yozishni boshlaymiz.
yuqori qismga gulli qovslar ichiga juft foiz belgisi ichiga {% %}extends deymiz keyin stringda 'base.html' deymiz.
{% extends 'base.html' %}
Kodni qayerdan boshlab base.html ga olib o'tishi belgilash uchun yana {% block content %} va {% endblock %} kodlaridan foydalanamiz. index2.html faylini ham xuddi shunday qilib olamiz.
Xulosa: Jinja nomli shahar ham mavjud googledan qidirayotganda adashtirib yubormang. O'z ustingizda ishlashdan to'xtamang. Sizlar bilan Bunyodbek Abdurazzoqov bo'ldi. Raxmat hammaga.
Bu maqolada sizlar bilan djangodagi views.py orqali ma'lumotni backenddan frontendga o'tkazamiz. Esingizda bo'lsa o'tgan darsda views.py orqali web saytni index.html ga ulagan edik. Endi Backenddan turib frontendga ma'lumotni yuboramiz.
Birinchi bo'lib sizlaga backenddan ma'lumot yuborishni o'rgataman. Buning uchun siz render funksiyasida uchinchi elementiga dict(lug'at python o'rgatilayotganingizda o'rgangan bo'lishingiz kerak) yozamiz. dictga istagan kalit so'zi va qiymatini bering. Men esa kalit so'ziga 'salom' dedim qimatiga esa 'Bunyodbek Abdurazzoqov' dedim.
Frontendga ma'luumot qabul qilish. Buning uchun html kodingizning ko'rinadigan biror bir qismiga ikki marotaba gulli qovslar qo'ying {{}} shu qovslar ichiga views.py da yozgan dict ning biror bir kalit so'zini yozing. Menning kalit so'zim salom edi. {{ salom }} men bu kodni salom django dagi django so'zining o'rniga qo'ydim.
Ya'na ham tushunarli bo'lishi uchun kalit so'zlarini alishtirib ko'ring...
Backend dasturchilar views.py da biroz boshqacharoq yo'l tutishadi. Avval dictni o'zgaruvchiga tenglab keyin o'zgaruvchini index.html dan so'ng yozishadi.
Xuloasa: Siz Backenddan Frondendga ma'lumot jo'natishni bilib oldingiz. Python qanday qilib web saytga tasir o'tkazishini ham bilib oldingiz degan umiddaman, boshqa kutibxonalarni ham ishlatib ko'ring(masalan:Math). Sizlar bilan Bunyodbek Abdurazzoqov bo'ldi. Raxmat hammaga.
Bu maqolada sizlar bilan urls views template larni o'tamiz. Bugungi mavzu eng asosiy va eng katta mavzu bo'lib urls views va template mavzularini o'z ichiga oladi. Chunki bu mavzular bir biriga chambarchas bog'liq bo'lib bir birisiz sizga tushuntirishimning iloji yo'q.
Birinchi bo'lib django projectimiz bor bo'lgan papkaga kiramiz va projectimizning ichidagi projectimiz nomi bilan bir hil nomili projectga kiramiz. Menda project nomi library edi. library>library>urls.py ga kiramiz.
"""library URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
Shu faylni kod editorda ochib olamiz va yuqori qismdagi komentaryni o'qiymiz. Komentda siz uchun kerakli bo'lgan bilimlar mavjud. Komentning pastki qismida boshqa appga qanday qilib ulashni ko'rsatib o'tgan.
Siz qilishingiz kerak:
django.urls dan include funksiyasini path funksiyasi bilan birgalikda chaqirib olishingiz.
urlpatterns ning ichiga path('', include('lib_app.urls', namespace='app')) yozishingiz zarur.
"""library URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('lib_app.urls', namespace='app'))
]
Siz bu amalingiz bilan include funksiyasini chaqirdingiz va lib_app papkadagi urls.py faylini ishga tushirdingiz. Hzorida esa bunday fayl mavjud emas chunki bu faylni o'zimiz hosil qilib olamiz. Qachonki domendan so'ng yoki localhostdan so'ng hechqanday manzil bo'lmasa urls.py faylimiz lib_app papkadaki urls.py ni ishga tushiradi.
lib_app papkada urls.py faylini hosil qilib olamiz. Bu faylni hohlasangiz hosil qilib olib so'ngra library papkasidagi urls.py ichidagi kodni nushalab olib o'tishingiz ham mumkin yoki urls.p faylini o'zini nushalab qo'ying.
So'ngra app ning ichidagi urls.py ning bazi qismlarni o'chirib yuboramiz.
urlpatterns listini tozalab olamiz.
from django.contrib import admin ni o'chirib yuboramiz chunki asosiy urls.py faylimizda chaqirib qo'yganmiz. Bu faylda esa kerak emas.
Bundan so'ng bizning app mizning urls.py faylimiz manabunday holda bo'lishi kerak:
"""library URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.urls import path
urlpatterns = [
]
Endi o'zgartirishlar kiritamiz:
app mizning nomi yozib olamiz app_name='lib_app'
urls.py ning yuqorisidagi komentda yozib qo'ygan qanday qilib views ga ulashni o'qib chiqing
komentda yozib qo'ygan from . import views yozing. Bu bilan siz views.py ni chaqirib olgan bo'lasiz
urlpatterns ning ichiga path funksiyasini ishlatamiz. path funksiyasining ichiga birinchi bo'lib linkni yozamiz, siz qaysi link bo'lganda bu funksiya ishlasin? Agar asosiy ya'ni home sahifasini linkini yozmoqchi bo'lsangiz qo'shtirnoqlarni bo'sh qoldiring
ikkinchi elementiga siz viewsdan funksiyani yozasiz men views.home funksiyasini yozdim
uchunchi elementiga bu qanday sahifa ekanligini yozamiz
"""library URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.urls import path
from . import views
app_name = 'lib_app'
urlpatterns = [
path('', views.home, name='home')
]
Siz bu kodlaringiz bilan:
shu katalogdagi views nomli faylni chaqirib oldingiz
app ning nomini kiritdingiz. Bu urls.py yanada yaxshi ishlashini taminlaydi. app_name djangoning yangi versiyalarida keng qo'llanilmoqda
path funksiyasida bo'sh qolgan qo'shtirnoqlar bu asosiy sahifa ishga tushirganda ya'ni domendan so'ng boshqa manzil bo'lmasa viewsdagi home funksiyasi ishga tushadi
name='home' deganimizning sababi keyinchalik asosiy sahifaga o'tayotganimizda giperlink dan foydalanayotganingizda bo'sh joy qoldirsangiz asosiy sahifaga o'tmaydi o'sha paytda maxsus funksiya ishtirokida "home" deb yozsangiz ishlaydi
from django.shortcuts import render
# Create your views here.
views faylimizda render funksiyasi avvaldan chaqirilgan bo'ladi. Chunki biz render funksiyadan foydalanamiz. Django iloji boricha dasturchilarga yordam berishga urinadi.
appmizning urls.py faylida views dagi home funksiya ishga tushsiz degan edik. Endilikda esa bu funksiyani hosil qilishimiz kerak.
yuqori qisda os kutubxonasini chaqirib olish import os
TEMPLATES ga tushung va DIRS nomli list ichiga yozing
os.path.join(BASE_DIR, 'templates')
lib_app library papkalarini yoniga templates nomli papka hosil qiling
istasangiz DIRS listini ichidagi 'templates' ni o'rniga boshqa so'z yozing va o'sha nomdagi papka hosil qiling ammo yozilmagan qoidalarga ko'ra teplate papkaning nomi templates bo'lishi kerak. Bu sizning kodingizni boshqa dasturchilar ishlatayotganda osonroq bo'ladi.
Bu templates papkani ichiga index.html fayl hosil qiling
Xulosa: Bu maqolada djangoning asosiy qismini aytib o'tdik. Sizlar urls.py dagi linkni o'zgartirib ko'ring ya'nada chuqurroq bilib olasiz. Sizlar bilan Bunyodbek Abdurazzoqov bo'ldi. Raxmat hammaga.
Bu amalingizdan so'ng sizda libapp nomli yangi papka hosil bo'ladi. Siz libapp nomli app hosil qildingiz ammo siz istagan nomli app hosil qilishingiz mumkin(project nomi bundan mustasno). Agar siz settings faylidagi applar orasiga 'lib_app' deb yozib qo'ysangiz siz django projectingizga bu appingizni ulagan bo'lasiz.
lib_app ulash
Siz to'g'ri ulaganingizni bilmoqchi bo'lsangiz CMDga:
yozing va "Enter".(avvalgi darslarda tushuntirilgan edi). runserver qilib bo'lganimizdan so'ng lib_app nomli app papkamizda "__pycache__" nomli papka hosil bo'ladi bu siz app ni to'g'ri ulaganingizdan dalolat.
__pycache__ papka => Bu papkada boshlanishida hech narsa bo'lmaydi. Keyinchalik fayllar to'lib ketadi. Bu papka python fayllar o'zaro aloqasini yanada yaxshilaydi.(python bilan tanishayotganingizda o'rgangansiz)
migrations papka => Bu sizga hali tanish bo'lmagan migrate va makemigartions amallari natijasida hosil bo'lgan fayllar shu papkaga yig'iladi. Backend dasturchilar bu fayllarga tegmaydi bu fayllar faqatgina ma'lumotni saqlab turish vazifasini bajaradi.
__init__.py => Bu fayl - Python uchun kataloglarni (ya'ni folder) paketlar (package) kabi ko'rib chiqishi uchun talab qilinadi. Eng oddiy holatda, __init__.py shunchaki bo'sh fayl bo'lishi mumkin, lekin u paket uchun boshlang'ich kodini bajarishi yoki quyida tavsiflangan all o'zgaruvchisini o'rnatishi mumkin.
admin => Bu fayl admin panel uchun modellarimizni ko'rishga yordam beradi. Admin panelni djangoning o'zi to'liq nazorat qiladi. Biz esa admin panelda qaysi modellar ko'rinishi holos. Shunda server himoyasi ortadi.
appas.py => Bu appmizning eng asosiy qismi ammo bu qismga backend dasturchilar juda ham kam teginishadi. Shuningdek, u mavjud modellarning ro'yxatini saqlaydi.
models.py => Bu faylga modellarimizni yozamiz. OOP dagi bilimlarimizni shu yerda qo'llaymiz. Bu fileda yozgan classlarimiz djangoning modelidan nasl olinsa classlar malumotlar omborida yangi yacheykalarni hosil qiladi. Django orqali siz bemalol malumotlar ombori bilan ishlay olasiz.
tests.py => Bu fayl orqali senior developerlar o'z appini sinovdan o'tkazadi: Tezligi, himoyasi...
views.py => Bu fayl o'z nomi bilan views - "ko'rinish". Bu fayl orqali siz web saytingiz oynasiga istagan ma'lumotingizni olib chiqishingiz mumkin. Html faylini ulab bemalol web saytingizda ko'rsatishingiz mumkin. Html faylinigizga malumotlar omboridagi malumotlarni ham shu fayl orqali olib chiqasiz. Frontenddan kelgan malumotni ham shu fayl orqali backendga o'tkazasiz.
Xulosa: Tushunmagan joylaringiz bo'lsa albatta komentga yoki telegram manzilimga yozishingiz mumkin. Sizlar bilan Bunyodbek Abdurazzoqov bo'ldi. Raxmat hammaga.
Bu maqolada Math kutubxonasini qo'lidan nimalar kelishini ko'rib chiqamiz. Siz bilmagan funksiyalar bo'lishi aniq chunki Math kutubxonasini bazilar faqatgina random ni bor deb o'ylashadi bazilar Math kutubxonasini ko'rishmagan bo'lsa ajablanmang. Bu Math kutubxonasi haqida bilmaydiganlar diqqatiga pythonni o'rnatganingizda bu kutubxona ham birgalikda o'rnaydi.
math kutubxonasi
Sodda algebratik funksiyalar
math.ceil(x)
Bu funksiya float sonni integer qiladi, Yaxlitlashga o'xshaydi ammo bu yaxlitlash emas. Bu Yaxlitlayotganda agar nuqtadan so'ng raqam bo'lsa yaxlitlayotganda 1 qo'shib qo'yadi.
>>> math.ceil(150.1)
151
>>> math.ceil(150.0)
150
math.comb(n, k)
Bu funksiya latareya o'yniga bog'lab olsak. Omad latto'da 36 ta shar bor va 5 ta shar tanlab olinadi. Umumiy sharlar soni n(36) va tanlanadigan sharlar soni k(5). Bu funksiya shu o'yinda nechta konbinatsiya bo'lishini aniqlaydi. Bu konbinatorika asoslarida o'tiladi. Hech qahon funsiyaga manfiy qiymat va float qiymat bermang chunki, sharlar manfiy son bilan sanay olasizmi?! va hech qachon k, n dan katta bo'lmasligi kerak chunki 36 ta sharni ichidan 40 ta shar olib bera olasizmi?!(agar shunday qobilyatingiz bo'lsa pythondagilarga aytib qo'ying :) Agar bunday qobilyatingiz bo'lmasa shu funksiya qoidalariga amal qiling. Sizga bu mavzu matematikadan 8-sinf oxirida va OTM da o'tiladi. Uning formulasi => n! / (k! * (n - k)!)
Bu funksiya x dan sonni va y dan ishorani oladida birlashtiradi. X ning ishorasi qanday bo'lishidan qattiy nazar unga y ning ishorasini beradi va float ko'rinishida qaytaradi. (y ning o'rniga 0 kiritsam mubat deb o'yladi. Qizig'i 0 manfiy ham musbat emas deyilgan edi).
Bu funksiya x ning absalyut qiymati(moduli)ni chiqaradi. Nima bo'lsa ham musbat qilib qo'yadi. Float ko'rinishida chiqaradi. Bu excel dasturida ham mavjud abs().
>>> math.fabs(-15)
15.0
>>> math.fabs(15)
15.0
math.factorial(x)
Bu funksiya x ning faktariyalini hisoblaydi. Faktariyal bu malum bir songacha bo'lgan barcha natural sonlar ko'paytmasi( 5 desak bu 1*2*3*4*5=125 degani). X o'rnida manfiy son bo'lishi mumkin emas.
Bu funksiya ceil() ning teskarisi bo'lib nuqtadan so'ng barcha sonlarni yo'qotib yuboradi. Bu manfiy va musbat sonlar qabul qilaveradi. Agar butun son bo'lsa(integer) shu sonning o'zini chiqaradi. Float son bo'lsa nuqtadan so'ng barcha raqamlarni yo'qotib integer son chiqaradi.
Bu funksiya o'zimiz ishlatib kelayotgan "%" vazifasizni bajaradi. Ya'ni sonni songa bo'lgandagi qoldiqni topadi. Masalan 5 ni 2 ga bo'lganda 1 qoldiq qoladi bunda 5 soni X va 2 soni Y boladi. Bular haqiqiy son(integer va float, barcha sonlar) bo'lishi mumkin. Sizga nima bo'lishidan qattiy nazar float son qaytaradi.
Bu funksiya x ga son kiritganingizda sizga ikkita son chiqaradi (m,e). Bu bilan siz OTM da tanishasiz(Sohangiz tibbiyot yoki melitsiya bo’lmasa). Bu funksiyaning nomi mantissa. Bunda x = m * 2**e tartibda bo’ladi. Ya’ni m ga 2 ning e ninchi darajasini ko’paytirilsa x kelib chiqadi. m doimo |m|<1. Bu o’nli logorifmning kasr qismi bo’ladi. Bu funksiya eng kam ishlatiladigan funksiyalar sirasiga kiradi. X o’rniga hohlagan sonni qo’yishingiz mumkin.
Bu funksiya x ning o’rniga list yoki tuple kiritasiz. Va list va tuple ni sonlar tashkil etgan bo’lishi zarur(matnni raqamga qo’shib qo’ymaydi-ku). Shundan so’ng listdagi yoki tuple dagi sonlarni yig’indisini float ko’rinishida qaytaradi.
Bu funksiya matematikadagi EKUB, bo’lib eng katta umumiy bo’luvchi. x va y ni bo’la oladigan eng katta sonni hisoblaydi. X va Y ning o’rniga faqatgina integer son kiritish mumkin. Masalan x ni 12 y ni esa 16 desak javobi 4 chiqadi chunki 4 soni 12 va 16 sonlarini bo’la oladigan eng katta son.
math.isclose( a , b , rel_tol = 1e-09 , abs_tol = 0.0 )
Bu funksiya a va b ning o’xshash yoki o’xshash emasligini aniqlaydi. Bu funsiyadagi rel_tol bu a va b sonlarining yozilishi necha foiz bir biriga o’xshashligi. abs_tol esa a va b sonlar qanchalik oraliq ekanligini bildiradi. Bu funksiya o’zidan True yoki False qiymat qaytaradi.
Bu funksiya agar x malum bir miqdorga ega bo’lgan son bo’lsa True qiymat agar cheksiz son bo’lsa yoki NaN bo’lsa False qiymat qaytaradi.
isinf funksiyasi
math.isnan(x)
Bu funksiya agar x NaN bo’lsa True qiymat bo’lmasa False qiymat qaytaradi.
math.isnan
math.isqrt(n)
Bu funksiyaga n o’rniga butun sonni(integer) kiritsangiz sizga shu sonning butun ildizini chiqarib beradi. Yani bu funksiya sqrt() funksiyaga o’xshash ammo bu faqatgina butun sonlar bilan ishlaydi(integer square root). Masalan siz 24 sonini kiritsangiz sizga 4 sonini chiqarib beradi. 9 kiritsangiz 3 chiqaradi.
Bu funksiya math kutubxonasiga endigina qo’shilgan bo’lib(Python 3.9) sonlaning EKUK(eng kichik umumiy karrali)ini topadi. X va y sonlarini o’rniga son kiritsangiz sizga EKUKini chiqaradi. Masalan 6 va 8 ni kiritsangiz sizga 24 soni qaytaradi.
>>> math.lcm(15, 20)
60
>>>math.lcm(4, 6)
12
math.ldexp(x, y)
Bu funksiya frexp() funksiyaning teskarisi. Sizga x ni 2 ning y ninchi darajasini ko’paytiradi(x*(2**y)). Bu ham juda kam foydalaniladi.
>>> math.ldexp(3,5)
96.0
>>> math.ldexp(1,2)
4.0
math.modf( x )
Bu funksiya x ni butun va kasr qismlarga ajratib beradi. X ni o’rnida 2.1 soni kiritilsa bu funksiyada tuplening ichida ikkita son bilan chiqaradi (0.1, 2.0).
Bu funksiya ham kombinatorika asoslariga asoslangan bo’lib 2-formulasi.
n!/(n-k)! bu formuladan necha javob chiqsa o’sha sonni funksiya qaytaradi. Bu funksiya qayerda ishlatiladi. 3 ta raqamdan 2 honali nechta son tuzsa bo’ladi. Bu funksiyaning comb() funksiyasidan farqi shundaki u omad latto ga o’xshagan masalalarda ya’ni sharlarning nechanchi bo’lishi farqi yo’q edi bu funksiyamizda esa joylashishi ham hisobga olinadi va har bitta joylanish turi konbinatsiya deyiladi. N har doim k dan katta bo’lishi zarur(3 ta raqamdan 4 xonali son yasangchi)
Bu funksiya x o’rniga list yoki tuple kiritasiz va funksiya sizga shu list yoki tupledagi sonlar ko’paytmasini chiqaradi. start o’zgaruvchisiga esa son kiritiladi va x dagida ko’paytmalarga ko’paytiriladi.
Bu funksiya % va fmod() ga juda o’xshash. Ammo prinsipi boshqacha. X ga va y ga son kiritasiz va x ni y ga bo’lgandagi qoldig’ini olasiz. Ammo x o’rniga 2 va y o’rniga 3 kiritsangiz sizga -1 chiqarib beradi. Chunki bu oddiygina mod emas. Javobni float ko’rinishida qaytaradi.
Bu funksiya e(2.718281…) ning x inchi darajasini qaytaradi. Qaytarayotganda albatta float son qaytaradi. Chunki 2.718281... sonning 0-darajasidan boshqa barcha sonlar floatdir. Sizga bu funksiya e**x ni qaytaradi. e esa matematikada tanishib olishingiz mumkin "Eksponensial". Bu funksiyani ishlatish uchun OTM matematikasini bilishingiz kerak.
Bu funksiya math.exp(x) dan 1 ni ayridi.(exp(x) - 1). Yoki (e**x)-1. Bu funksiya dasturchilar ko'p marotaba birni ayrigani uchun 2 ta belgi ko'p sariflangani uchun shu funksiya ishlab chiqildi. Bu orqali siz -1 deb yozishingiz shart emas.
Bu funksiya matematikadagi logarifimni hisoblaydi(10-sinf matematika II qism). Bu funksiya qaytaradigan son shunday bo'ladiki o'sha sonni y ning darajasiga yozsak x kelib chiqadi. Ya'ni Bu funksiya qaytaradigan sonni z desak y**z=x orqali bog'lashingiz mumkin. yoki aksincha y=sqrt(x,z)
Bu funksiya e asosga ko'ra x+1 ning logarifimini qaytaradi. Shunday son qaytaradiki bu son e ning darajasi ga qo'yilganida x+1 chiqadi. Bu funksiyada log dan so'ng 1p ni ko'rmoqdasiz bu 1 plus degan ma'noni anglatadi. Ya'ni birni qo'sh.
Bu funksiya shunday sonni qaytaradikki shu sonni 2 ning darajasiga qo'ysak x kelib chiqadi. Bu funksiya log(x,2) dak gap shunchaki cho'zib o'tirmaslik uchun log2 yaratildi. Bunda funksiya qaytaradigan sonni z desak 2**z=x yoki sqrt(x,z)=2.
Bu funksiya shunday son qaytaradiki shu sonni 10 ning darajasiga qo'ysak x kelib chiqadi. Ya'ni bunda funksiya qaytaradigan sonni z desak 10**z=x yoki sqrt(x,z)=10.
Bu funksiya x ning y ninchi darajasini qaytaradi. Funksiya o'rniga siz x**y qilishingiz ham mumkin. Aslida bu funksiyani ham x**y tashkil etadi holos. return x**y
Bu funksiya x ning kvadrat ildizini topadi. Bu matematikada o'tiladi(8-sinf). Bu pow() funksiyaning teskarisi ya'ni pow darajasini topsa bu esa ildizini topib beradi.
To'gri burchakli uchburchakning tuzilishini bilib olishibiz kerak.
To'g'ri burchakli uchburchak
Oldin burchak sinusi va cosinusi haqida bilib olsak. Burchak sinusi deb Gepetenuzaning burchak qarshisidagi tomonga nisbatiga aytiladi. Cosinus deb Gepetenuzaning burchakga yopishga katet nisbatiga aytiladi. Bizga burchak berilgan bo'lsa bas tomoni esa shart emas.
math.degrees(x)
Bu funksiya radian o'lchovini gradus o'lchoviga o'tkazadi. Funksiyalarda radianda yozish kerak bo'lishi mumkin. Bu funksiyaning tuzilishi faqatgina return x*57.2957795 dan iborat.
Bu funksiya gradus o'lchovini radian o'lchoviga o'tkazadi. Funksiyalarda radianda yozish kerak bo'lishi mumkin. Bu funksiyaning tuzilishi faqatgina return x/57.2957795 dan iborat.
Bu funksiya x ning sinusini topadi. Bilib qo'ying x ni gradus o'lchovida emas radian o'lchovida hisoblaydi. 1 radian = 57.2957795 gradusga teng. Masalan Bizga yuqoridagi rasmdan burchak C ning sinusini topish kerak bo'lsa, a/b yoki sin(C).
Bu funksiya x ning cosinusini topadi. Bilib qo'ying x ni gradus o'lchovida emas radian o'lchovida hisoblaydi. 1 radian = 57.2957795 gradusga teng. Masalan Bizga yuqoridagi rasmdan burchak C ning cosinusini topish kerak bo'lsa, a/c yoki cos(C).
Bu funksiya x ning Tanginusini topadi. Bilib qo'ying x ni gradus o'lchovida emas radian o'lchovida hisoblaydi. 1 radian = 57.2957795 gradusga teng. Masalan Bizga yuqoridagi rasmdan burchak C ning Tanginusini topish kerak bo'lsa, sinx(x)/cos(x) yoki c/b yoki cos(C)
math.asin(x)
Bu funksiya sin(x) funksiyaning teskarisi bo'lib, sonni radianga o'tkazadi(180 gradusdan oshmaydi). sin funksiyaga x son kiritsak y qiymatni olsak asin funksiyaga y ni kiritsak x ni olamiz.
Bu funksiya cos(x) funksiyaning teskarisi bo'lib, sonni radianga o'tkazadi(180 gradusdan oshmaydi). cos funksiyaga x son kiritsak y qiymatni olsak acos funksiyaga y ni kiritsak x ni olamiz.
Bu funksiya tan(x) funksiyaning teskarisi bo'lib, sonni radianga o'tkazadi(180 gradusdan oshmaydi). tan funksiyaga x son kiritsak y qiymatni olsak atan funksiyaga y ni kiritsak x ni olamiz.
Bu funksiya atan() funksiyaning vazifasini yuqori darajada bajaradi. Sin va cos da bir hil qiymatni ikki vaziyatdagina oladi. Tanginus ham shu funksiyalarga bog'liq bo'lganligi sababli qaysi gradusda aynan shunga tengligini bilish uchun atan2 funksiyasi ishlab chiqilgan.
Bu funksiya x va y oradidagi masofani topadi. Siz necha o'lchamlik kiritsangiz o'sha o'lchamdagi masofani o'lchaydi. Masalan x ni list ko'rinishida yozayotganingizda bir emas 2 ta yozsangiz bu 2 o'lchamlik bo'ladi. Bu funksiya xattoki 3 o'lchamdagi oraliqni ham topa oladi. Qizig'i 4 o'lchamni topib yuboryapti...(4-o'cham vaqt nazariyasidan kelib chiqadi.... bu bizga tegishli emas). Bu funksiyaning asosini Pifagor teoremasi tashkil etadi.
Bu funksiya faqatgina to'gri burchakli uchburchakning gepetenuzani topish uchun ishlatiladi. x va y ga katetlari yoziladi. Va bu funksiya Pifagor teoremasi asosida ishlaydi. return sqrt((x**2)+(y**2)).
Agar siz Giperbolik funktsiyalardan foydalanmoqchi bo'lsangiz Yuqorida keltirgan funksiyalarning ohiriga h harifini qoshib qo'ysangiz bas.
Maxsus funksiyalar
math.erf(x)
Bu funksiya ingiliz tilidan olingan bo'lib "error function" deyiladi. Bu xato funksiya degan manoni anglatadi. Bu funksiyaga hohlagan qiymatdagi son kiritishingiz mumkin. Sizga -1 va 1 oralag'ida son chiqaradi. Agar siz katta son kiritsangiz sizga 1 soni chiqadi chunki qanchalik katta son kiritilsa -1 va 1 oralig'idagi eng katta sonni chiqaradi. Siz katta kiritganingizda shunday son chiqaradi-ki u son deyarli 1 ga teng bo'ladi shuning uchun sizga 1 ko'rinadi.
Bu funksiya math.erf(x) ga o'xshash ammo faqri bor. Bu ham barcha sonlarni qabul qiladi. Va 0 dan 2 gacha son qaytaradi. Buning ishlash prinsipi teskari bo'lib, Qancha son katta bo'lgani sari qaytadigan son shuncha kamayadi. Siz manfiy son kiritsangiz aksincha.
Bu funksiya factorial funksiyasiga o'xshab ishlaydi ammo boshqacha son qaytaradi. Chunki faktorial hisoblayotganda 5! = 1*2*3*4*5 ammo gamma 0 ni ham ko'paytiradi(Nega unda 0 ga ko'paytirsa barcha javoblar 0 chiqishi kerak-ku) ammo 0 o'rniga bitta oldin keladigan 1 sonini tortib oladi va 1 ham yonidagi sonlarni tortib oladi. Hullas factorial(5)=gamma(4). Bu funksiya pythonning 3.2 versiyasidan boshlab ishlab kelmoqda.
gammaning oldingi qismida kelayotgan l harifi log funksiyasini anglatadi. ya'ni gamma funksiyasidan chiqqan javobni logarifim qabul qiladi va u ham shu sonni logarifimi qaytaradi. log(gamm(x))
Bu constanta π = 3.141592…, ni anglatadi bu siz tanish bo'lgan aylanani uzunligi va yuzini topishda ishlatiladigan pi
math.e
Bu constanta e = 2.718281…, Bu eyler raqami bo'lib bu yuqori darajadi matematikadalarda uchraydi.
math.tau
Bu constanta τ = 6.283185…, tau=pi*2 ga bo'lib bu asosan sinus va cosinuslar bilan ishlaydigan ishlatadi. Bu 2π ham deb atashadi.
math.inf
Bu cheksiz qiymatini beradi. Agar siz -math.inf qiladigan bo'lsangiz sizga manfiy cheksizni beradi.
math.nan
Bu ingiliz tilidan olingan bo'ib “not a number” (NaN) qiymatni beradi. Bu constanta float('nan') ga teng.
Xulosa: Matematik amallar barcha joyda kerak bo'lishini bilsangiz kerak bu funksiyalarni bilib olsangiz kam bo'lmaysiz. Bu funksiyalar orqali dasturlar yaratib ko'ring esda qoladi. Bu funksiyalarni bilish uchun siz albatta matematika fanini chuqur o'rgangan bo'lishingiz zarur.
Bu maqolada sizlar bilan settings fayli bilan tanishamiz, bu faylin avvalgi darsda ham ta'kidlab o'tgan edim. Bugun bu fayldagi har bir kodning vazifasini bilib olasiz.
BASE_DIR ning vazifasi katta bo'lib u fayllar va papkalarni serverdan ro'yxatdan o'tkazishga yordam beradi. Siz runserver deganingizda projectingiz serverdagi turgandak ishlaydi. Serverdan ro'yxatdan o'tkazilmagan fayl va papkalarni django ishlata olmaydi(bunday fayl mavjud emas deydi).
SECRET_KEY ning vazifasi shundaki u prodakshinga yordam beradi va buni boshqalar bilishi taqiqlanadi.
DEBUG = True
DEBUG ning vazifasi shundaki agar u True qiymat qabul qilsa sizga xatolaringizni ko'rsatib turadi(brouzer va CMD da) agar False bo'lsa siz biror bir xato ish qilsangiz serverni o'sha ondayoq to'xtaydi(siz yana runserver qilishingizga to'g'ri keladi). Agar siz projectni ohirgacha bitirib hostga qo'ymaguningizgacha True tursin.
ALLOWED_HOSTS = []
ALLOWED_HOSTS ning vazifasi shundaki [] lar ichiga domen yozasiz va brouzerdan o'sha domen yozilganda sizning saytingiz chiqadi(agar siz hostga qo'ygan bo'lsangiz va host o'sha domenga ulangan bo'lsa).
DATABASES ning vazifasi ma'lumotlarni saqlash bo'lib bunda qanday nomli faylga va nima orqali o'sha faylga tasir o'tkazishni ko'rsatadi.(postgresql, sql, va Mysql ga o'xshash malumotlar omborini ulaydi).
LANGUAGE_CODE = 'en-en'
LANGUAGE_CODE ning vazifasi projectning tilini aniqlab beradi. Siz en-en desangiz ingiliz tilini tanlagan bo'lasiz(ikkinchi en esa buyukbiritaniya shevasi). Xatto-ki o'zbek tili ham mavjud 'uz'. Tilni o'zgartirganingizda admin page va debug pagelar o'zgarganini ko'rasiz(hali beri admin pageni ko'rmagan bo'lsangiz keyinchalik o'zgartirib koring)
TIME_ZONE = 'UTC'
TIME_ZONE ning vazifasi serverdagi vaqtni aniqlash. UTC => "Universal Time Coordinated" bo'lib biz(uzb)ning vaqti 'UTC+5'.
Bu static fayllarni serverdan ro'yxatdan o'tkazadi. Static fayllarga html fayllardan boshqa fayllar kiradi(CSS, JS, Rasmlar...).
Xulosa: Settings fayli rng muhim fayl bo'lib django projectining eng asosiy sozlamalari turadi. Sizlar bilan Bunyodbek Abdurazzoqov bo'ldi. Rahmat hammaga.
Bu maqolada sizlar bilan djangoda project boshlaymiz va barcha harakatlarimni sizlarga izohlab o'taman. Bu bilan siz djangoni boshlovchilar qatorida ko'raman degan umiddaman.
Buning uchun siz kompyuteringizni internetga ulaysiz so'ngra CMD ga
pip install django
deb yozasiz sizga django fremworkini eng so'ngi versiyasini o'rnatadi. (menda 3.1 versiya).
O'natilmasa komentga yoki telegramimga yozing
Tanishuv
Cmd dan chimagan holda biror bir ko'zga ko'rinadigan mazilga o'ting.(masalan desktop). Boshqa manzilga o'tish uchun cd dan foydalaning
C:\Users\User>cd desktop
C:\Users\User\Desktop>
Yozing:
Django-admin startproject library
Bundan so'ng sizning manzilingizda "library" papka hosil bo'ladi. Hozir siz django fremworki orqali django projectini hosil qildinigiz. "library" so'zini o'rniga istagan so'ziingizni yozishingiz mumkin men "library" deb nomladim.
Siz "library" nomli papkaga kirdingiz va djangoning localhostini ishga tushirdingiz. "manage.py" bu "library" papkada joylashgan python fayl. "runserver" so'zi esa localhostni ishga tushiradi va ishga tushganini bilish uchun CMD ga qarasangiz bas:
C:\Users\User\Desktop\library>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
December 29, 2020 - 17:14:20
Django version 3.1, using settings 'library.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Sizda sal boshqacharoq chiqishi mumkin. Pastki qismi esa ishlaganda doimo bir xil bo'ladi. U yerda host qachon ishga tushgani, django versiyasi va qasi file orqali ishlayotgani, hostning manzili va hostni to'xtatish uchun qilish kerak bo'lgan amal. Siz manzilni brouzerinigzga yozsangiz ko'rinadi:
__pycache__ papka => Bu papkada boshlanishida hech narsa bo'lmaydi. Keyinchalik fayllar to'lib ketadi. Bu papka python fayllar o'zaro aloqasini yanada yaxshilaydi.(python bilan tanishayotganingizda o'rgangansiz)
__init__.py => Bu fayl - Python uchun kataloglarni (ya'ni folder) paketlar (package) kabi ko'rib chiqishi uchun talab qilinadi. Eng oddiy holatda, __init__.py shunchaki bo'sh fayl bo'lishi mumkin, lekin u paket uchun boshlang'ich kodini bajarishi yoki quyida tavsiflangan all o'zgaruvchisini o'rnatishi mumkin.
settings.py => Bu django projectimizning miyyasi desak ham bo'ladi bu fayl projectning eng asosiy qismi bo'lib ko'plab ishlarni shu fayl bajaradi.(alohida dars qilaman)
urls.py => Bu nomidan malum URL lar builan ishlaydigan fayl bo'lib domen(localhost)dan so'ng keladigan linkga javob beradi.
Bu maqola orqalisiz Getpass kutubxonasi bilan tanishasiz. Bu kutubxona nomidan kelib chiqqan xolda "Get password" parolni qabul qiladi. Bu kutubxona 3 ta funksiyaga ega.
getpass kutubxonasi
getpass.getpass()
Bu funksiya input funksiyasi bajargan vazifani bajaradi. Ammo Siz yozayotgan natn ko'rinmaydi. Agar siz Django fremworkini ishlatgan bo'lsangiz super user paydo qilayotganda shu funksiyadan foydalanilgan. Amalda qilib ko'ramiz. Birinchi bo'lib CMD ni ochamiz va python deb yozamiz. getepass kutbxonasini chaqirib olamiz. So'ngra getpass kutubxonasidan getpass funksiyasini chaqiramiz. So'ngra Enter tugmasini bossak Sizdan Password so'raydi siz hohlagan narsangiz yozavering bu hechqaday parol emas shunchaki siz parol so'rash funksiyasini ishlatdingiz holos. Siz input funksiyasiga o'xshab bu funksiyasidan qaytarayotgan ma'lumotni o'zgaruvchiga berib qo'yishinigz mumkin. Password so'zni alishtirmoqchi bo'lsangiz qovslar ichiga qo'shtirnoq ochib unga matn yozsangiz Password deb emas siz kiritgan so'z chiqadi. Sizdan soraganda siz yozsangiz huddi yozmagandaqa bo'lasiz ammo yozayotgan bo'lasiz shuncha-ki sizga yozgan matiningiz ko'rinmaydi holos.
C:\Users\User>python
Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import getpass
>>> getpass.getpass()
Password:
'salom123456'
>>>
getpass.getuser()
Bu funksiya Sizning kompyuteringizning nomini qaytaradi. Masalan siz windows bosayotganda user degan joyiga "hodim" deb yozgan bo'lsangiz sizga "hodim" so'zini qaytaradi. Menda esa "user" qaytaradi chunki men windows bosayotganimda nomiga "user" deb yozib qo'ygan edim.
>>> getpass.getuser()
'User'
getpass.GetPassWarning
Bu esa shunchaki xato deyish maqsadida ishlatiladi.
Xulosa: Bu kutubxonadan siz parol so'rovida ishlatishingiz mumkin chunki siz yaratgan dasyutdan foydalanayotgan foydalanuvchi yozayotgan parolni hechkim bilmasligi kerak(Yozayotganda atrofidagilari bilmasligi uchun). Siz bilan Bunyodbek Abdurazzoqov bo'ldi. Qaddingiz va qadrinigz baland bo'lsin. Raxmat hammaga.