🧩 7-BO‘LIM: Django, DRF, FastAPI – Framework Specific savollar va javoblar
🔹 Django
1. Django’da signal’lar bilan nima qilgansan?
post_save,pre_save,post_deletesignal’lari bilan Profile yaratish, admin notificatsiya, va audit log yozish uchun ishlaganman.
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
2. Middleware’lar qanday ishlaydi va nima uchun kerak?
- Request va response oqimini intercept qiladi.
Authentication,Rate limiting,Logging,Multi-tenant switchuchun ishlatiladi.
class MyCustomMiddleware:
def __call__(self, request):
print("Before view")
response = self.get_response(request)
print("After view")
return response
3. Django’da OneToOne, ForeignKey, ManyToMany farqi?
| Field | Relationship | Access |
|---|---|---|
| OneToOneField | 1:1 | .relatedname |
| ForeignKey | Many:1 | .model_set |
| ManyToMany | Many:Many | .all() |
4. select_for_update() qachon ishlatiladi?
- Transaction ichida row’ni lock qilish uchun (deadlock yoki race condition’ga qarshi)
with transaction.atomic():
user = User.objects.select_for_update().get(id=1)
user.balance -= 100
user.save()
5. Meta: unique_together vs UniqueConstraint?
- Django 3.2+ dan
UniqueConstraintishlatiladi, bu aniqroq:
class Meta:
constraints = [
models.UniqueConstraint(fields=['user', 'course'], name='unique_user_course')
]
🔹 DRF (Django REST Framework)
6. Serializer’larda .create() va .update() metodlari qachon kerak?
ModelSerializerdefault o‘zi bajaradi- Custom logic kerak bo‘lsa override qilinadi
class UserSerializer(serializers.ModelSerializer):
def create(self, validated_data):
password = validated_data.pop("password")
user = User(**validated_data)
user.set_password(password)
user.save()
return user
7. DRF permission’lari haqida?
IsAuthenticated,IsAdminUser,AllowAny- Custom:
class IsOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return obj.user == request.user
8. APIView vs GenericAPIView vs ViewSet farqlari?
| Class | Use case |
|---|---|
APIView |
full manual control |
GenericAPIView |
mixin bilan ishlaydi |
ViewSet |
RESTful endpointlar uchun |
9. @action dekoratori nima?
- ViewSet ichida
non-CRUDendpoint yaratish:
@action(detail=True, methods=["post"])
def activate(self, request, pk=None):
...
10. Filtering, Search, Ordering qanday qo‘shiladi?
class MyViewSet(viewsets.ModelViewSet):
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ['status']
search_fields = ['title', 'description']
ordering_fields = ['created_at']
🔹 FastAPI
11. FastAPI’da dependency injection qanday ishlaydi?
def get_db():
db = Session()
try:
yield db
finally:
db.close()
@app.get("/users/")
def read_users(db: Session = Depends(get_db)):
return db.query(User).all()
Depends()orqali requestda kerakli resurslar inject qilinadi
12. FastAPI’dagi Pydantic modellar va ORM mode?
class User(BaseModel):
id: int
name: str
class Config:
orm_mode = True
orm_mode = True→ SQLAlchemy instance’ni JSON response’ga avtomatik o‘girish
13. Background tasklar qanday qo‘shiladi?
from fastapi import BackgroundTasks
def send_email(email: str):
...
@app.post("/register/")
def register_user(email: str, bg: BackgroundTasks):
bg.add_task(send_email, email)
14. FastAPI + SQLAlchemy + Alembic migratsiyasi haqida?
alembic init migrationsalembic revision --autogenerate -m "add users"alembic upgrade head
FastAPI loyihalarida models/, schemas/, routers/ folderlar bilan modular DDD structure afzal.
15. FastAPI vs DRF – qachon qaysi biri?
| Criteria | DRF | FastAPI |
|---|---|---|
| Maturity | Juda katta | Nisbatan yangi |
| Async support | Limited | Native async |
| Performance | O‘rtacha | Yuqori (Starlette) |
| ORM support | Django ORM only | SQLAlchemy / others |
| Swagger | Custom | Auto generated, kuchli |