Python backend development: birinchi API'ingizni yarating
Python backend development'ni o'rganing: Django, Flask va FastAPI bilan REST API'lar yarating. Yangi boshlovchilar uchun kod misollari bilan bosqichma-bosqich qo'llanma.
Muallif: William Imoh
Siz Python'ning funksiyalar, sinflar, loop'lar va oddiy dasturlar yozish kabi asoslarini allaqachon bilasiz. Ammo backend development'ga o'tish real ilovalar parda ortida qanday ishlashini — server-side logic va ma'lumotlarni qayta ishlashdan tortib ma'lumotlar bazalari va API'largacha — o'rganishni anglatadi. Aynan shu bosqichda siz Python asoslarini o'rganishdan haqiqiy backend tizimlarini qurishga o'tasiz.
Python — bunday o'tishni amalga oshirish uchun eng mashhur dasturlash tillaridan biri. Uning o'qilishi oson sintaksisi o'rganish jarayonini ancha yengillashtiradi, keng Python ecosystem'i esa zamonaviy veb-dasturlash uchun yetuk va yaxshi hujjatlashtirilgan ko'plab vositalarni taqdim etadi. Django, Flask va FastAPI kabi freymvorklar oddiy REST API'lardan tortib yirik veb-ilovalargacha bo'lgan hamma narsani yaratishni osonlashtiradi.
Ushbu qo'llanmada backend development nimani anglatishini, Python'ning asosiy freymvorklari bir-biridan qanday farq qilishini va har birini qachon ishlatish kerakligini bilib olasiz. Shuningdek, noldan haqiqiy backend ilovasini yaratasiz va shu orqali Python backend'larini qurish uchun ham nazariy asosga, ham amaliy tajribaga ega bo'lasiz.
TL;DR
Ushbu qo'llanma oxirida quyidagilarga ega bo'lasiz:
-
Client-server architecture qanday ishlashi va Python unda qanday o'rin tutishi haqida aniq tushuncha.
-
Loyiha talablaringizga qarab
Django,FlaskvaFastAPIo'rtasida qanday tanlov qilish. -
Ma'lumotlar bazasi va ishlaydigan API endpoint'iga ega backend'ni noldan qurish bo'yicha shaxsiy tajriba.
-
Yangi boshlovchilar ko'p yo'l qo'yadigan xatolar va ulardan qochishga yordam beradigan best practice'lar haqida bilim.
-
Python backend development yo'lidagi sayohatingizni davom ettirish uchun mustahkam poydevor.
Python backend development nima?
Python backend development — Python yordamida veb va mobil ilovalarni ishlatib turadigan server-side tizimlarni yaratish jarayoni. U kelayotgan so'rovlarni qayta ishlash, business logic'ni qo'llash, ma'lumotlar bazalari bilan ishlash, foydalanuvchi authentication'ini boshqarish va foydalanuvchilarga tuzilmali javoblarni qaytarishni o'z ichiga oladi.
Har safar ilovaga kirganingizda, buyurtma berganingizda yoki feed'ni yuklaganingizda backend ishlayotgan bo'ladi. Foydalanuvchilar ko'radigan va o'zaro ta'sir qiladigan narsalarga e'tibor qaratadigan frontend development'dan farqli o'laroq, backend development bu o'zaro ta'sirlarni amalga oshirishga imkon beradigan ichki mexanizmlarni boshqaradi.
Quyidagi jadvalda backend development frontend development bilan taqqoslanadi:
| Jihat | Backend development | Frontend development |
|---|---|---|
| Asosiy yo'nalish | Server-side logic va ma'lumotlarni qayta ishlash | Vizual interfeys va foydalanuvchi bilan o'zaro ta'sir |
| Business logic | Ha, asosiy business logic'ni boshqaradi | Yo'q, UI va presentation logic'ni boshqaradi |
| Ma'lumotlar bazasini boshqarish | Ha | Yo'q |
| Foydalanuvchi authentication / authorization'i | Ha | Qisman |
| API development | Ha | Yo'q |
| Runtime environment | Server | Brauzer |
Client-server model
Client-server model — vebning asosiy arxitekturasi. U ikki alohida dastur — client va server — tarmoq orqali qanday aloqa qilishini tavsiflaydi. Client — so'rov yuboradigan dastur, masalan, brauzer, mobil ilova yoki command-line vositasi. Server esa uzoqdagi mashinada ishlaydigan, shu so'rovlarni tinglaydigan, ularni qayta ishlaydigan va javob qaytaradigan dastur. Server turli infratuzilmalarda ishlashi mumkin, masalan, cloud computing xizmatida, Virtual Private Server'da (VPS) yoki data center'dagi mashinada.
Client-server model quyidagicha ishlaydi:
-
Foydalanuvchi brauzerida formani yuboradi.
-
Brauzer HTTP serverga HTTP so'rov yuboradi. Masalan, u forma ma'lumotlari bilan
POST /tasksso'rovini yuborishi mumkin. -
Backend so'rovni qabul qiladi, ma'lumotlarni validation'dan o'tkazadi, ularni ma'lumotlar bazasiga saqlaydi va odatda JSON yoki HTML formatidagi javobni qaytaradi.
-
Brauzer javobni render qiladi.
Har bir backend tizimi — u oddiy aloqa formasini ishlatadimi yoki yirik ilovani — aynan shu model atrofida ishlaydi. Python backend developer sifatida ishingizning katta qismi shu o'zaro ta'sirning server tomonini qurish va qo'llab-quvvatlash atrofida aylanadi.
Python backend'ning asosiy qismlari
Python backend so'rovlarni qayta ishlaydigan, ma'lumotlarni saqlaydigan, foydalanuvchilarning authentication'ini amalga oshiradigan va service'larni production'da ishlatib turadigan bir nechta muhim qismdan iborat.

Asosiy qismlardan ba'zilari:
-
Routing, so'rovlarni parse qilish va javoblarni formatlash bilan shug'ullanadigan Python freymvorki.
-
PostgreSQL,MySQLvaSQLitekabi persistent ma'lumotlarni saqlash va tartibga solish uchun ma'lumotlar bazasini boshqarish tizimlari. -
Python kodingizdan ma'lumotlar bazasi bilan ishlash uchun ORM yoki SQL qatlami.
-
So'rovni kim yuborayotganini tekshiradigan foydalanuvchi authentication tizimlari.
-
Ilovani production'da ishlatib turadigan deployment infratuzilmasi, jumladan serverlar, container'lar va cloud xizmatlari.
Python backend freymvorkini tanlash
Siz tanlagan freymvork Python kodingizni qanday tuzishingizni, qanchalik tez ishlab chiqa olishingizni va ilovangiz qanday scale bo'lishini belgilaydi. Barcha yirik dasturlash tillarida ishlab chiqishni tezlashtirish uchun freymvorklar mavjud va Python ham bundan mustasno emas. Quyida uchta asosiy Python backend freymvorki, ularning imkoniyatlari va eng mos qo'llanish holatlari keltirilgan.
Django
Django — batteries-included, opinionated Python freymvorki. U veb-ilovalarga kerak bo'ladigan funksiyalarning ko'pchiligini tayyor holda taqdim etadi. Uning ajralib turadigan xususiyatlaridan biri — ichiga o'rnatilgan admin panel bo'lib, u foydalanuvchilar va yozuvlarni boshqarish, permission'larni tayinlash va kontent yuklash kabi vazifalarni ancha osonlashtiradi.
Django'ning mashhur ma'lumotlar bazalari va third-party package'lar bilan muammosiz integratsiyasi uni tuzilmadan voz kechmasdan tez ishlab chiqishni xohlaydigan jamoalar uchun kuchli tanlovga aylantiradi. Mening tajribamda Django ayniqsa maintainability va ishlab chiqish tezligi ustuvor bo'lgan loyihalar uchun juda mos keladi, chunki u ko'p sozlashni talab qilmasdan mustahkam poydevor beradi.
Flask
Flask — routing hamda so'rov va javoblarni qayta ishlash kabi asosiy backend vositalarini taqdim etadigan microframework. Django'dan farqli o'laroq, Flask sizga faqat eng zarur narsalarni beradi va qo'shimcha kutubxonalarni o'zingiz tanlashingizga imkon qoldiradi. Bu uni kichik API endpoint'lari va prototype'lar uchun juda mos qiladi.
FastAPI
FastAPI — asynchronous programming'ni qo'llab-quvvatlaydigan freymvork, ya'ni u ko'p sonli concurrent ulanishlarni samarali qayta ishlay oladi. U shuningdek OpenAPI va Pydantic orqali avtomatik hujjatlar va request validation'ni tayyor holda taqdim etadi, bu esa dasturchilarga boilerplate kodni sezilarli darajada kamaytirish imkonini beradi.
Bu FastAPI'ni yuqori unumdorlikdagi API development va microservice'lar uchun kuchli tanlovga aylantiradi. U ayniqsa I/O'ga og'ir ilovalar uchun foydali, masalan, tashqi API'larni tez-tez chaqiradigan, ma'lumotlar bazalariga query yuboradigan yoki tarmoq so'rovlarini qayta ishlaydigan ilovalar uchun.
Muhokama qilingan freymvorklarning batafsil tahlilini, jumladan loyiha talablari, unumdorlik ehtiyojlari va dasturlash tajribangizga qarab har birini qachon tanlash kerakligini bilmoqchi bo'lsangiz, bu yerda tugatganingizdan so'ng Python backend freymvorklari bo'yicha qo'llanmamizni o'qib chiqishga arziydi.
Python backend development'ning amaliy qo'llanilishi
Python backend'lari real hayotda qayerda ishlatilishini tushunish qaysi ko'nikmalar eng muhimligini va qanday backend loyihalarini qurishga arzishini ko'rishga yordam beradi.
Mobil va single-page application'lar uchun REST API'lar
Zamonaviy ilovalarning aksariyati — iOS, Android yoki vebda bo'lishidan qat'i nazar — backend'da ishlaydigan REST API orqali ishlaydi. Frontend development qatlami POST /orders yoki GET /users/42 kabi API endpoint'lariga so'rov yuboradi, backend esa JSON qaytaradi. Samarali veb-ilovalarni shu tarzda qurish frontend va backend'ni toza ajratib turadi, bu esa tizimlarni scale qilish va qo'llab-quvvatlashni osonlashtiradi. Bunday loyihalar uchun keng qo'llaniladigan freymvorklar — Django REST Framework va FastAPI.
Microservices architecture'lari
Yirik muhandislik jamoalari ko'pincha backend tizimlarini kichikroq, mustaqil service'larga ajratadi; har bir service foydalanuvchilar, to'lovlar yoki bildirishnomalar kabi muayyan domain uchun javobgar bo'ladi. Bu service'larni bir nechta serverda bir-biridan mustaqil ravishda deploy qilish va bir vaqtda ishlatish mumkin. FastAPI microservice'lar yaratish uchun ayniqsa mashhur, chunki u yengil, tez va uni container'larda deploy qilish oson.
Ma'lumotlarni qayta ishlash va machine learning model'larini serve qilish
Python katta hajmdagi ma'lumotlarni qayta ishlash, data analysis va prediction'lar bilan shug'ullanadigan backend tizimlari uchun keng qo'llaniladi. scikit-learn yoki PyTorch kabi vositalar yordamida model'larni o'rgatib, ularni FastAPI kabi freymvorklar yordamida API endpoint'lari orqali taqdim etishingiz mumkin. Bu pattern odatda ML model serving deb ataladi.
Model serving'dan tashqari, Python data science va machine learning vositalarining keng ecosystem'i tufayli server-side logic, analitik workflow'lar va AI imkoniyatlarini yagona tech stack doirasida muammosiz birlashtirish imkonini beradi.
E-commerce va kontent platformalari
Django'ning ichiga o'rnatilgan admin interfeysi, ORM'i va foydalanuvchi authentication'i uni e-commerce saytlari, yangiliklar platformalari, ichki dashboard'lar va CMS asosidagi ilovalar kabi kontentga boy veb-ilovalar uchun juda mos qiladi. Bu ichki funksiyalar maxsus vositalarga bo'lgan ehtiyojni kamaytirib, ishlab chiqish vaqtini tejaydi va mustahkam, production-ready hamda qo'llab-quvvatlash oson veb-ilovalarni tezroq yaratish imkonini beradi. Django ortidagi hamjamiyat qo'llab-quvvatlovi esa to'lovlar, qidiruv va boshqa ko'p narsalar uchun qayta foydalanish mumkin bo'lgan package'larning katta to'plami mavjudligini anglatadi.
Ichki vositalar va admin dashboard
Backend freymvorklari odatda inventarizatsiya tizimlari, hisobot dashboard'lari, boshqaruv portallari va ma'lumotlarni ko'rib chiqish interfeyslari kabi ichki biznes vositalarini yaratish uchun ishlatiladi. Bunday ilovalar ko'pincha xavfsiz authentication, ma'lumotlar bazasini boshqarish va role-based access control'ni talab qiladi, shuning uchun Django va Flask kabi freymvorklar bu vazifa uchun juda mos keladi.
Birinchi Python backend'ingizni yaratish
Hozirgacha siz Python backend development nima ekanini, backend tizimlari qanday ishlashini va ular odatda qayerda qo'llanilishini bilib oldingiz. Endi Django va Django REST Framework (DRF) yordamida minimal REST API yaratib, backend'ni noldan qanday qurishni o'rganish vaqti keldi.
Davom etishdan oldin Django va DRF o'rtasidagi farqni tushunib olish muhim, chunki yangi boshlovchilar ularning bir-biriga qanday bog'liqligini ko'pincha chalkashtirib yuborishadi. Django — veb-ilovalar yaratish uchun backend freymvorki, DRF esa Django ustiga qurilgan kengaytma bo'lib, aynan REST API'lar yaratish uchun vositalarni taqdim etadi. DRF Django'ga API'lar orqali frontend ilovalari va boshqa service'lar bilan o'zaro ishlash imkonini beradi. Shunday qilib, agar siz Django backend bilan aloqa qiladigan React frontend kabi narsa yaratayotgan bo'lsangiz, DRF keng tarqalgan va amaliy tanlov hisoblanadi.
Amaliy misolda Django ishlatilsa-da, model'lar, so'rovlarni qayta ishlash va ma'lumotlar bazasini boshqarish kabi asosiy backend tushunchalari Flask va FastAPI'ga ham tegishli, faqat tuzilma va sintaksis boshqacha bo'ladi.
Quyida birinchi Python backend'ingizni ishga tushirish uchun qadamlar keltirilgan:
1-qadam: Environment'ingizni sozlang
Biror kod yozishdan oldin development environment'ingiz tayyor ekaniga ishonch hosil qiling.
Python'ni o'rnating
Agar Python allaqachon o'rnatilgan bo'lsa, bu qadamni o'tkazib yuboring. Agar o'rnatilmagan bo'lsa, Python'ning rasmiy veb-saytiga kiring, eng so'nggi versiya installer'ini yuklab oling va uni ishga tushiring.
Python o'rnatilganini tekshirish va qaysi versiya borligini ko'rish uchun quyidagini ishga tushiring:
python --version
Loyiha papkasini yarating va virtual environment'ni sozlang
Loyihangiz dependency'larini kompyuteringizdagi boshqa Python loyihalaridan izolyatsiya qilish uchun virtual environment yaratishingiz kerak. Yangi loyiha papkasi va virtual environment yaratish uchun quyidagi buyruqlarni birma-bir kiriting:
mkdir sample_app
cd sample_app
python -m venv venv
Hozirgina yaratgan virtual environment'ingizni (venv) faollashtirish uchun operatsion tizimingizga mos quyidagi buyruqni ishga tushiring.
-
macOS/Linux'da quyidagini ishga tushiring:
source venv/bin/activate -
Windows'da quyidagini ishga tushiring:
venv\Scripts\activate
Django va Django REST Framework'ni o'rnating
Backend API yaratishdan oldin virtual environment'ingizga Django va DRF'ni o'rnatishingiz kerak. Buning uchun quyidagini ishga tushiring:
pip install django djangorestframework
Agar pip sizga yangilanishni taklif qilsa, o'rnatish eng so'nggi package'lardan foydalanishi uchun davom etishdan oldin uni yangilang.
Django loyihasi va app yarating
Django loyihasi ilova konfiguratsiyasini o'z ichiga oladi, app'lar esa backend'ingizning turli qismlarini qayta foydalanish mumkin bo'lgan module'larga ajratib tashkil qilishga yordam beradi. Django loyihasi va app yaratish uchun quyidagini ishga tushiring:
django-admin startproject myproject
cd myproject
python manage.py startapp api
Bu ikki narsani yaratadi:
-
myproject/: asosiy loyiha konfiguratsiyasi -
api/: backend logic'ingiz va API kodingiz joylashadigan app
Loyihani kod muharririda oching
Loyiha tuzilmasi tayyor bo'lgach, model'lar, view'lar, URL'lar va API logic'ini qo'shishni boshlash uchun uni o'zingiz yoqtirgan kod muharririda oching.
Agar Visual Studio Code'dan foydalanayotgan bo'lsangiz, hali ham myproject/ papkasida ekaningizga ishonch hosil qiling va quyidagini ishga tushiring:
code .
Bu joriy loyiha papkasini VS Code'da ochadi.
App'ingiz va Django REST Framework'ni ro'yxatdan o'tkazing
Loyiha va app yaratgandan so'ng, Django app'ingizni tanishi va DRF'ning API funksionalligini yuklashi uchun DRF'ni ham, app'ingizni ham ro'yxatdan o'tkazishingiz kerak. Buning uchun myproject/settings.py fayliga o'ting va INSTALLED_APPS ichiga ularni quyidagicha qo'shing:
INSTALLED_APPS = [
#...django’s default apps
'rest_framework',
'api',
]
Men yangi boshlovchilarda tez-tez uchratadigan xatolardan biri — aynan shu qadamni o'tkazib yuborish. Agar uni o'tkazib yuborsangiz, Django app'ingizning model'lari, view'lari yoki serializer'larini tanimaydi. Bu import xatolariga, ma'lumotlar bazasida jadvallarning yo'qligiga yoki to'g'ri ishlamaydigan API endpoint'lariga olib kelishi mumkin.
2-qadam: Birinchi model'ingizni yarating va migration'larni ishga tushiring
Model — ma'lumotlar bazasidagi muayyan jadvalni ifodalaydigan Python sinfi bo'lib, sinfning har bir attribute'i shu jadvaldagi field'ga mos keladi. U ma'lumotlaringiz uchun yagona va aniq source of truth hisoblanadi.
Birinchi model'ingizni yaratish uchun api/models.py fayliga o'ting va quyidagini qo'shing:
from django.db import models
class Task(models.Model):
title = models.CharField(max_length=200)
done = models.BooleanField(default=False)
def __str__(self):
return self.title
Bu kodda:
-
from django.db import modelsma'lumotlar bazasi schema'larini yaratish uchun zarur vositalarni import qiladi. Har bir model fayliga bu kerak. -
class Task(models.Model)Tasknomli yangi jadvalni aniqlaydi vamodels.Model'dan meros oladi. -
title = models.CharField(max_length=200)matn uchun (“string” kabi) ustun yaratadi, belgilar sonining maksimal chegarasi esa 200 qilib belgilanadi. -
done = models.BooleanField(default=False)boolean qiymatlarni (True/False) saqlash uchun ustun yaratadi. Default qiymat False qilib belgilangan, ya'ni yangi vazifalar default holatda “bajarilmagan” bo'ladi. -
def __str__(self): return self.title— maxsus method bo'lib, Django'ga, ayniqsa admin panelga, umumiy yorliq o'rniga vazifaning haqiqiy sarlavhasini (masalan, “Buy Milk”) ko'rsatishni bildiradi.
Migration'larni ishga tushirish
Model yaratilgan yoki yangilangandan so'ng, Django uni ma'lumotlar bazasidagi haqiqiy o'zgarishlarga aylantirishi kerak. Bu migration'lar orqali amalga oshiriladi. Migration'lar model'laringiz va ma'lumotlar bazangizni sinxron holda saqlab, data integrity'ni ta'minlaydi. Aslida ular model'laringiz uchun ma'lumotlar bazasining version control tizimidir.
Avval quyidagini ishga tushirib, migration fayllarini yarating:
python manage.py makemigrations
Bu buyruq model'laringizdagi o'zgarishlarni aniqlaydi va ma'lumotlar bazasini yangilash bo'yicha ko'rsatmalarni o'z ichiga olgan migration fayllarini yaratadi.
Keyin quyidagini ishga tushirib, bu o'zgarishlarni ma'lumotlar bazangizga qo'llang:
python manage.py migrate
Bu buyruq ma'lumotlar bazangiz schema'sini model'laringizga moslab yangilaydi.
Migration'larsiz ma'lumotlar bazangiz Task model'i yoki unga kelajakda kiritadigan o'zgarishlaringiz haqida bilmagan bo'lardi. Data integrity'ni ta'minlash uchun migration'larni doimo qo'llang.
3-qadam: Django Admin'ni sozlang
Endi Task model'ingiz migration orqali ma'lumotlar bazasiga o'tkazilgani uchun keyingi qadam uni Django admin panelida ko'rinadigan qilishdir. Django admin — ichiga o'rnatilgan dashboard bo'lib, u maxsus interfeys yaratmasdan ma'lumotlar bazasi yozuvlarini ko'rish, yaratish, yangilash va o'chirish imkonini beradi.
Model'ingizni admin panelda ro'yxatdan o'tkazish uchun api/admin.py fayliga o'ting va quyidagini qo'shing:
from django.contrib import admin
from .models import Task
admin.site.register(Task)
Bu kodda:
-
from .models import Taskmodels.pyfaylingizda aniqlagan Task model'ini qo'shadi. -
admin.site.register(Task)Task model'ini admin interfeysida ro'yxatdan o'tkazadi.
Keyin quyidagini ishga tushirib, admin akkauntini yarating:
python manage.py createsuperuser
Django sizdan foydalanuvchi nomi, email manzil va parolni kiritishni so'raydi. Superuser muvaffaqiyatli yaratilgandan so'ng development serverni ishga tushiring:
python manage.py runserver
Brauzeringizda http://127.0.0.1:8000/admin/ manzilini kiriting va credential'laringiz bilan tizimga kiring. Task jadvali bilan birga API app'ingizni ko'rishingiz kerak. Add Task tugmasini bosing, maydonlarni to'ldiring va saqlang.
Django admin — API endpoint'lari yoki frontend interfeyslarini qurishdan oldin model'laringiz, migration'laringiz va ma'lumotlar bazasi sozlamalari to'g'ri ishlayotganini tasdiqlashning eng tezkor usullaridan biri.
4-qadam: Birinchi API endpoint'ingizni yarating
Model'ingiz va ma'lumotlar bazangiz sozlangach, keyingi qadam ma'lumotlaringizni API endpoint orqali taqdim etishdir. DRF'da bu odatda uchta asosiy qismni o'z ichiga oladi: serializer, view va URL. Bu component'lar birgalikda backend'ingizga ma'lumotlar bazasidan ma'lumotlarni olish, ularni JSON'ga aylantirish va API endpoint orqali taqdim etish imkonini beradi.
Serializer yarating
Serializer Django model instance'larini API javobida qaytarish mumkin bo'lishi uchun JSON'ga aylantirishga javob beradi. U backend'ga ma'lumot yuborilganda avtomatik validation'ni ham bajaradi. Django serializer faylini avtomatik yaratmaydi, shuning uchun uni qo'lda yaratishingiz kerak.
api/ papkangiz ichida serializers.py nomli yangi fayl yarating va quyidagini qo'shing:
from rest_framework import serializers
from .models import Task
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = ['id', 'title', 'done']
Bu kodda:
-
ModelSerializerDjango model'ingiz asosida serializer field'larini avtomatik yaratadi. -
model = TaskDRF'ga Task model'idan foydalanishni bildiradi. -
fieldsAPI javobida qaysi model field'lari ko'rinishi kerakligini belgilaydi.
Ya'ni TaskSerializer Task obyektini quyidagicha ko'rinadigan, JSON'ga mos ma'lumotga aylantiradi:
{
"id": 1,
"title": "Buy milk",
"done": false
}
View yarating
View so'rov API endpoint'ingizga kelganda ishlaydigan server-side logic'ni o'z ichiga oladi. U qaysi ma'lumotlarni olish kerakligini, ularni qanday qayta ishlash kerakligini va qanday javob qaytarilishini hal qiladi.
api/views.py faylini oching va quyidagini qo'shing:
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Task
from .serializers import TaskSerializer
class TaskListView(APIView):
def get(self, request):
tasks = Task.objects.all()
serializer = TaskSerializer(tasks, many=True)
return Response(serializer.data)
Bu kodda:
-
Task.objects.all()ma'lumotlar bazasidan barcha vazifalarni oladi. -
TaskSerializer(tasks, many=True)bir nechta task obyektini JSON'ga aylantiradi. -
Response(serializer.data)serialize qilingan ma'lumotlarni API javobi sifatida client'ga qaytarib yuboradi.
Client ushbu endpoint'ga GET so'rovini yuborgan har safar get() method'i ishga tushadi.
URL route yarating
URL route endpoint URL'ini muayyan view bilan bog'laydi. So'rov ma'lum bir URL'ga yetib kelganda, Django shu so'rovni qaysi view qayta ishlashi kerakligini aniqlash uchun route konfiguratsiyasidan foydalanadi. Django api/urls.py faylini avtomatik yaratmaydi, shuning uchun uni api/ papkangiz ichida qo'lda yaratishingiz kerak.
api/urls.py fayliga quyidagini qo'shing:
from django.urls import path
from .views import TaskListView
urlpatterns = [
path('tasks/', TaskListView.as_view(), name='task-list'),
]
Bu kodda:
-
from django.urls import pathendpoint path'larini aniqlash uchun ishlatiladigan Django'ning URL routing vositasini import qiladi. -
from .views import TaskListViewkiruvchi so'rovlarni qayta ishlashi uchunviews.pyfaylingizdanTaskListViewsinfini import qiladi. -
urlpatterns = [...]Django kuzatib turishi kerak bo'lgan URL pattern'lar ro'yxatini yaratadi. -
path('tasks/', TaskListView.as_view(), name='task-list')Django'ga/tasks/endpoint'iga so'rov kelgan har safarTaskListView'ni ishga tushirishni bildiradi.
Keyin app URL'laringizni asosiy loyiha URL'lariga ulashingiz kerak. Buning uchun myproject/urls.py faylini oching va uni yangilang:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('api.urls')),
]
Bu kodda:
-
include('api.urls')api/urls.pyichida aniqlangan barcha URL route'larni import qiladi. -
path('api', include('api.urls'))app'ingizdagi barcha route'larga/api/prefiksini qo'shadi. Ya'nitasks/route'i/api/tasks/ga aylanadi.
Shunday qilib, http://127.0.0.1:8000/api/tasks/ manziliga so'rov yuborganingizda Django so'rovni TaskListView'ga uzatadi, u esa ma'lumotlar bazasidan vazifalarni olib, ularni JSON sifatida qaytaradi.
Yuqorida ko'rsatilgan URL'ni kiritishdan oldin serverni ishga tushirishni unutmang. Agar hammasi to'g'ri ishlayotgan bo'lsa, JSON formatida ko'rsatilgan Task ro'yxatini ko'rishingiz kerak. Bu API endpoint'ingiz ma'lumotlar bazangizga muvaffaqiyatli ulanganini anglatadi.
Endi Django admin panel orqali vazifalar yaratishingiz mumkin va ular avtomatik ravishda API javobida paydo bo'ladi.
5-qadam: Foydalanuvchi authentication'ini qo'shing
Django hech qanday third-party kutubxonani talab qilmasdan session'lar, password hashing va foydalanuvchilarni boshqarishni o'z ichiga olgan to'liq foydalanuvchi authentication tizimiga ega. API'lar uchun DRF'ning TokenAuthentication mexanizmi keng tarqalgan standart boshlang'ich nuqta bo'lib, u Django'ning ichiga o'rnatilgan authentication tizimi va user model'i bilan integratsiyalashadi. Shuningdek, kuchliroq identity verification talab qilinadigan maxfiy endpoint'lar uchun multi-factor authentication qo'shishingiz mumkin.
Oldingi qadamda yaratgan API endpoint'ingizni himoyalash uchun quyidagi qadamlarni bajaring:
Token app'ini ro'yxatdan o'tkazing va migration'larni ishga tushiring
myproject/settings.py faylida INSTALLED_APPS ro'yxatiga rest_framework.authtoken qatorini qo'shing:
INSTALLED_APPS = [
# ...
'rest_framework.authtoken',
]
So'ng token jadvalini yaratish uchun migration'larni ishga tushiring va serverni ishga tushiring.
Foydalanuvchingiz uchun token yarating
http://127.0.0.1:8000/admin/ manziliga o'ting va tizimga kiring. Auth Token bo'limi ostida Tokens bandini ko'rasiz — Add tugmasini bosing, foydalanuvchingizni tanlang va saqlang. Yaratilgan token ro'yxatda paydo bo'ladi. Uni nusxalab oling, chunki keyingi qadamda u sizga kerak bo'ladi.
API endpoint'ingizni himoyalang
Har bir so'rovda yaroqli token talab qilinishi uchun api/views.py faylini yangilang:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import TokenAuthentication
from .models import Task
from .serializers import TaskSerializer
class TaskListView(APIView):
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request):
tasks = Task.objects.all()
serializer = TaskSerializer(tasks, many=True)
return Response(serializer.data)
API endpoint'ingizni test qiling
Endi yaroqli tokensiz http://127.0.0.1:8000/api/tasks/ manziliga yuborilgan har qanday GET so'rovi 401 Unauthorized status'ini qaytaradi. Xavotirlanmang, bu aslida yaxshi belgi — u endpoint'ingiz endi himoyalangani va token qo'shilmagan so'rovlarni rad etishini ko'rsatadi.
Authenticated so'rov yuborish uchun sizga Postman, Thunder Client va Insomnia kabi API Client vositalari kerak bo'ladi. Thunder Client'da:
-
Yangi
GETso'rovini yarating vahttp://127.0.0.1:8000/api/tasks/URL'ini kiriting. -
Headers tab'ini bosing.
-
Header sifatida
Authorizationnomini, qiymat sifatida esaToken <your-token-key>ni qo'shing. DRF'ning Token Authorization'i token oldida doimoTokenprefiksi bo'lishini kutadi. -
Send tugmasini bosing.
Endi vazifalar ro'yxatingiz JSON sifatida qaytarilganini ko'rishingiz kerak. Shu bilan sizda ishlaydigan, himoyalangan API endpoint bor. Token authentication — qaysi usul qo'llanilishidan qat'i nazar, istalgan backend tizimida authentication qanday ishlashining bir misoli xolos. Brauzerga asoslangan frontend yoki API sozlamalari uchun keng tarqalgan yondashuv bo'lgan DRF uchun JSON Web Token authentication'ini qanday amalga oshirishni ham o'rganib chiqishingiz mumkin.
6-qadam: Loyihangiz tuzilmasini tashkil qiling
Django o'z loyihalari uchun app'larga asoslangan tuzilmadan foydalanadi. Har bir app ilovangizning muayyan qismi uchun javobgar bo'lgan mustaqil module hisoblanadi. Django loyihangiz o'sgani sari bu ajratish codebase'ni qo'llab-quvvatlashni oson saqlaydi va jamoalarga ilovaning turli qismlari ustida parallel ishlashni osonlashtiradi.
Yaxshi tuzilgan loyiha, shuningdek, ilovani containerize qilishni hamda development, staging va production uchun environment'ga xos sozlamalarni boshqarishni osonlashtirib, deployment jarayonini soddalashtiradi.
Toza DRF loyihasi quyidagicha ko'rinadi — agar shu paytgacha qadamlarni bajargan bo'lsangiz, sizda ham aynan shu tuzilma bo'lishi kerak:
myproject/
└── manage.py
└── myproject/
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
└── api/
├── migrations/
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── serializers.py
├── tests.py
├── views.py
└── urls.py
└── venv/
├── Include/
├── Lib/
└── Scripts/
Production-ready ilovalar ustida ishlashni boshlaganingizda settings.py faylini local.py va production.py kabi environment'ga xos fayllarga ajrating. Shuningdek, maxfiy ma'lumotlarni .env deb ataluvchi maxsus faylga ko'chiring. Bu faylda Django secret'lari, URL'lar, port'lar, hostname'lar, feature flag'lar, API token'lar va deployment environment nomlari bo'lishi mumkin.
Ehtiyot bo'lish kerak bo'lgan keng tarqalgan xatolar
Backend ilovalarini yaratar ekansiz, muqarrar ravishda konfiguratsiya xatolari, migration muammolari va debugging qiyinchiliklariga duch kelasiz. Ba'zi keng tarqalgan backend xatolari va best practice'larni erta tushunib olish sizni soatlab chalkashlikdan qutqaradi va ishonchliroq ilovalar yaratishga yordam beradi.
-
Virtual environment'lardan foydalanmaslik: Package'larni
pip installbilan global o'rnatish loyihalar o'rtasida dependency conflict'larini keltirib chiqarishi mumkin. Dependency'larni izolyatsiya qilish va toza development muhitini saqlash uchun har bir loyiha uchun doimo alohida virtual environment yarating. Shu bilan keyinchalik duch kelishingiz mumkin bo'lgan, oldini olsa bo'ladigan ko'plab muammolarning oldini olasiz. -
Model o'zgarishlaridan keyin migration'larni ishga tushirishni unutish: Migration qadamini o'tkazib yuborish ko'pincha
OperationalErrorkabi ma'lumotlar bazasi nomuvofiqligi xatolariga olib keladi. Buning sababi shuki, model'ni o'zgartirganingizda Django makemigrations va migrate buyruqlarini ishga tushirmaguningizcha ma'lumotlar bazangiz schema'sini avtomatik yangilamaydi. -
App'larni INSTALLED_APPS'da ro'yxatdan o'tkazishni unutish: Agar app'ingiz
INSTALLED_APPSro'yxatiga qo'shilmagan bo'lsa, Django model'larni yoki ilova konfiguratsiyasini tanimaydi. Ilova konfiguratsiyalaringiz to'g'ri yuklanishi va backend'ingiz kerakli tarzda ishlashi uchun har bir app'ni doimo qo'shing. -
Serialize qilingan ma'lumotlar o'rniga xom queryset'larni qaytarish: Django queryset'lari Python obyektlaridir, shuning uchun ularni JSON javoblariga aylantirish uchun DRF serializer'lari kerak. DRF'da ma'lumotlar bazasi natijalarini API javobida qaytarishdan oldin doimo serializer orqali o'tkazishingiz kerak. Bu API formatlashning izchilligini ta'minlaydi va to'g'ri avtomatik data validation'ni yo'lga qo'yadi.
-
Secret'larni to'g'ridan-to'g'ri kodda saqlash: API key'lar, ma'lumotlar bazasi credential'lari yoki secret key'larni
settings.pyichiga hardcode qilish ilovangizni data breach'larga ochiq qiladi. Buning o'rniga secret'larni environment variable'lar faylida saqlang. -
Qayta ishlanmagan exception'lar va noto'g'ri status kodlar: Client'lar so'rov natijasini to'g'ri tushunishi uchun API'ingiz mos HTTP status kodlarini qaytarishi kerak. Mustahkam error handling — yaxshi backend ilovasining belgilaridan biri.
Keng tarqalgan status kodlar quyidagilar:
| Status kod | Ma'nosi |
|---|---|
| 400 | Noto'g'ri so'rov yoki yaroqsiz kiritilgan ma'lumot |
| 401 | Authentication'dan o'tmagan so'rov |
| 403 | Kirish taqiqlangan |
| 404 | Resurs topilmadi |
| 500 | Ichki server xatosi |
API'ingizda status kodlarni quyidagicha aniq belgilashingiz mumkin:
from rest_framework import status
return Response(
{'error': 'Not found'},
status=status.HTTP_404_NOT_FOUND
)
Yodda tutish kerak bo'lgan best practice'lar
Django'ning ichiga o'rnatilgan authentication vositalaridan foydalaning
Django va DRF har biri turli qo'llanish holatlariga mos authentication mexanizmlarini taqdim etadi. Django tayyor holda session authentication'ni taqdim etadi, DRF esa token-based authentication'ni qo'shadi. JSON Web Token authentication uchun djangorestframework-simplejwt kabi mashhur third-party package DRF bilan muammosiz integratsiyalashadi. Bu sinalgan vositalardan foydalanish o'z mexanizmingizni noldan yaratishdan ko'ra xavfsizroq va qo'llab-quvvatlash osonroq bo'lib, xavfsiz veb-ilovalarni samaraliroq yaratishga yordam beradi.
API endpoint'laringiz uchun testlar yozing
Testlar yozish yangi funksiyalar qo'shganingizda yoki vaqt o'tishi bilan o'zgarishlar kiritganingizda backend'ingiz to'g'ri ishlashda davom etishini ta'minlaydi. Testlar yangilanishlardan keyin API endpoint'laringiz kutilgan javoblarni qaytarishini tekshiradigan xavfsizlik nazorati vazifasini bajaradi. Ular, shuningdek, debugging'ni osonlashtiradi, chunki biror narsa qachon va qayerda noto'g'ri ketganini tezda aniqlay olasiz.
Environment konfiguratsiyasini to'g'ri boshqaring
django-environ yoki python-decouple kabi vositalar yordamida .env fayllar orqali environment variable'laringizni boshqaring. Bu maxfiy qiymatlarni xavfsiz saqlash, konfiguratsiyani ilova kodidan ajratish va turli environment'larda ishlab chiqishni soddalashtirishga yordam beradi.
Loyihalarni separation of concerns asosida tuzing
Loyihalar o'sgani sari app'larni mantiqiy domain'lar bo'yicha tashkil qilish kodni qo'llab-quvvatlash va unda harakatlanishni osonlashtiradi. Masalan, Electronic Medical Records tizimida bemorlar, qabullar, anamnez yig'ish va konsultatsiyalar kabi turli domain'lar uchun alohida app'lar yaratishingiz kerak bo'lishi mumkin. Shuningdek, virtual environment'ni tasodifiy papkalarda emas, doimo loyiha darajasida saqlang. Bir nechta Python developer bitta codebase ustida ishlay boshlaganda separation of concerns yanada qimmatli bo'ladi.
Ma'lumotlar bazasi query'larini optimallashtiring
Query optimization — production darajasidagi ilovalar ustida ishlaydigan backend developer'lar uchun muhim ko'nikma. Ma'lumotlar va trafik ortib borgan sari yomon yozilgan ma'lumotlar bazasi query'lari ilovangizni sezilarli darajada sekinlashtirishi mumkin. Django keraksiz ma'lumotlar bazasi query'larini kamaytirish uchun select_related() va prefetch_related() kabi vositalarni taqdim etadi. Shuningdek, development jarayonida query unumdorligini tekshirish uchun pip install django-debug-toolbar kabi package'lardan foydalanishingiz mumkin.
Cross-Site Scripting (XSS) hujumlaridan himoyalaning
Django default holatda template chiqishini avtomatik escape qiladi, bu esa foydalanuvchi kiritgan ma'lumotlarning template'larda kod sifatida bajarilishining oldini olib, XSS hujumlari xavfini kamaytirishga yordam beradi.
API'lar uchun:
-
Kiruvchi ma'lumotlarni serializer'lar yordamida validation'dan o'tkazing.
-
Zarur bo'lganda ishonchsiz kiritilgan ma'lumotlarni, ayniqsa foydalanuvchilar yaratgan HTML yoki matnni tozalang.
-
Foydalanuvchilar yaratgan xavfli HTML'ni to'g'ridan-to'g'ri render qilishdan saqlaning.
Scale bo'la oladigan toza kod yozing
Backend'ingiz o'sgani sari toza arxitektura va modulli kodni saqlash tobora muhim bo'lib boradi, chunki bu ilovangizni tushunish, kengaytirish va debug qilishni osonlashtiradi. Ehtiyojlaringizga qarab ilovangizni asynchronous processing, yuqoriroq concurrency yoki real-time funksiyalarni qo'llab-quvvatlaydigan qilib kengaytirishingiz mumkin. Django, FastAPI va Django Channels kabi vositalar bu imkoniyatlarni amalga oshirish va scalable veb-ilovalar yaratishda yordam beradi.
Keyingi qadamlar
Endi siz backend development asoslarini, Python'ning asosiy freymvorklari turli qo'llanish holatlariga qanday mos kelishini hamda backend tizimlarini yaratishda qochish kerak bo'lgan keng tarqalgan xatolar va qo'llash kerak bo'lgan best practice'larni tushunasiz. Eng muhimi, siz nazariy bilimdan amaliyotga o'tib, birinchi Python backend'ingizni yaratdingiz va Django hamda Django REST Framework yordamida ishlaydigan REST API'ni taqdim etdingiz.
Bu faqat boshlang'ich nuqta. O'rganishingizni to'g'ri yo'nalishda ushlab turish uchun asosiy Python backend mavzularini bosqichma-bosqich qamrab oluvchi tuzilmali Python roadmap'imiz bilan loyihalar qurishni davom ettiring. Shundan so'ng backend development'ning to'liq manzarasini ko'rish uchun kengroq backend roadmap'imizni o'rganib chiqishingiz mumkin. Agar hali yaratmagan bo'lsangiz, taraqqiyotingizni kuzatish, o'rganish yo'llaringizni saqlash va texnologiyalar olamidagi sayohatingizda oldinga borgan sari shaxsiylashtirilgan roadmap'lardan foydalanish uchun roadmap.sh akkauntini yarating.