سوالات مصاحبه فنی Django برای استخدام برنامه‌‌‌نویسان

Django Interview Questions

24 مرداد 1402
django-interview-questions

هنگامی که کارفرمایان به دنبال کسی برای پر کردن یک جایگاه شغل خالی در شرکت خود می گردند، معمولا به دنبال فردی کار بلد هستند که با اطلاعات و مفاهیم مرتبط با موقعیت شغلی مطابقت داشته باشد. آن‌ها کسی را می‌خواهند که نه تنها مناسب باشد، بلکه بتواند نیازهای شرکت را در یک زمینه خاص برطرف بکند و دست راست شرکت در این زمینه باشد.

شما به‌عنوان متقاضی، باید موقعیت خود را با اطمینان از اینکه می‌توانید هر سوال مصاحبه‌کننده را پاسخ دهید، تقویت کنید. برای کمک به شما در انجام این کار، ما 56 سوال مصاحبه فنی جنگو را در سه سطح ساده، متوسط و پیشرفته برای شما گردآوری کرده ایم که در آن ها سعی شده است طیف وسیعی از مفاهیم جنگو پوشش داده شود.

بیایید به این سوالات جنگو را با هم بخوانیم و برای مصاحبه شغلی سرنوشت ساز خود آماده شویم.

سطح ساده سوالات مصاحبه فنی جنگو

  1. Django یا جنگو چیست؟

جنگو یک فریم ورک برنامه نویسی مخصوص توسعه وب و منبع باز است که به زبان پایتون نوشته شده است. با فریم ورک جنگو می توان وب اپلیکیشن هایی تولید کرد که سرعت توسعه آنها بسیار بالا بوده و به راحتی قابل نگهداری و باشند.

  1. آیا Django از روی فیلم تارانتینو نامگذاری شده است؟ (این سوال مصاحبه فنی جنگو نیست :) )

نه، Django به افتخار جنگو راینهارت، یک گیتاریست جاز که از 1930 تا اوایل دهه 1950 فعالیت میکرد و که یکی از بهترین گیتاریست های تمام دوران ها به حساب می آید، نامگذاری شده است :) .

  1. مهم ترین ویژگی‌های جنگو چیست؟

برنامه نویسان جنگو را بیشتر به دلیل ویژگی های شگفت انگیز زیر انتخاب میکنند:

  • سرعت زیاد
  • یک فریم ورک بارگذاری شده که دارای احراز هویت، مدیریت محتوا و فیدهای RSS است
  • مقیاس پذیر برای پاسخگویی به سنگین ترین تقاضاهای ترافیک
  • امنیت بسیار بالا
  • تطبیق پذیری، که شما را قادر می سازد انواع مختلف وب اپلیکیشن را ایجاد کنید
  1. می توانید چند شرکت که از جنگو استفاده می کنند نام ببرید؟

برخی از شرکت‌های معروف‌تر که از جنگو استفاده می‌کنند عبارتند از:

  • Instagram
  • FireFox
  • Pinterest
  • Reddit
  • Youtube 
  1. چرا توسعه دهندگان وب جنگو را ترجیح می دهند؟

توسعه دهندگان وب از جنگو استفاده می کنند زیرا:

  • توسعه سریع: Django شامل مجموعه‌ای از قابلیت‌های آماده برای کارهای رایج توسعه وب مثل احراز هویت کاربری، نقشه سایت، فید RSS و غیره است که باعث می‌شود برنامه‌های وب خیلی سریع‌تر ساخته شوند.
  • کتابخانه‌ها و پکیج‌ها: Django شامل کتابخانه‌ها و ابزارهای آماده‌ای مثل ORM، موتور قالب سازی یا Template Engine، Admin Interface یا رابط مدیریت و غیره است که برنامه‌نویسی را بسیار راحت تر می‌کند.
  • قابلیت مقیاس‌پذیری: Django با فریم‌ورک پایتون می‌تواند به راحتی مقیاس‌پذیر باشد.
  • امنیت: Django از برنامه در برابر خطراتی مثل SQL Injection و XSS محافظت می‌کند.
  • انعطاف‌پذیری: Django انعطاف زیادی در طراحی دیتابیس و مدل‌ها دارد.
  • جامعه فعال: Django جامعه بزرگ و فعالی دارد که پشتیبانی خوبی ارائه می‌دهد.
  • مستندات خوب: مستندات گسترده‌ای برای یادگیری سریع Django وجود دارد.
  • الگو MVT: جنگو از الگوی MVT پیروی می‌کند که باعث توسعه کد تمیز و قابل استفاده مجدد می‌شود.
  1. CRUD چیست؟

CRUD مخفف CREATE، READ، UPDATE و DELETE است. CRUD در واقع به توسعه‌دهندگان در مورد نحوه ساخت مدل‌های قابل استفاده در هنگام ساخت API ها کمک میکند.

  1. آیا جنگو معایبی دارد؟

بله، جنگو هم مثل هر فریم‌ورک دیگری معایبی دارد:

  • یادگیری آن دشوارتر از برخی فریم‌ورک‌های دیگر مثل Flask است. جنگو دارای امکانات زیادی است و یادگیری تمام آن‌ها زمان‌بر است.
  • کندتر از برخی فریم‌ورک‌های دیگر عمل می‌کند. جنگو به خاطر همان امکانات فراوان، کندتر از بعضی رقبای سبک‌ترش است.
  • انعطاف‌پذیری کمتری نسبت به برخی فریم‌ورک‌ها دارد. جنگو به شدت بر روی الگوی MVT تاکید دارد.
  • استفاده از جنگو بدون دانش Django REST Framework برای ساخت APIها دشوار است.
  • مهاجرت از نسخه‌های قدیمی به جدید جنگو گاهی دشوار و وقت‌گیر است.
  1. معماری جنگو چگونه است؟

معماری جنگو

جنگو از الگوی MVT (تمپلیت ویو مدل) پیروی می کند که بر اساس معماری مدل ویو  کنترلر است. MVT کمی با الگوی MVC متفاوت است زیرا قراردادهای خود را حفظ می کند، بنابراین کنترلر توسط خود فریم ورک کنترل می شود.

تمپلیت یک لایه برای نمایش به کاربران بوده که علاوه بر فرمت HTML ای که دارد زبان تمپلیت جنگو (DTL) ترکیب شده است. توسعه دهنده مدل، ویو و تمپلیت را کدنویسی کرده و سپس آن را به یک URL اختصاص می‌دهد و در نهایت، جنگو آن را به کاربر ارائه می دهد. معماری جنگو شامل موارد زیر است:

  • مدل ها (models): Schema یا طرحواره دیتابیس و ساختمان داده را شرح می دهد
  • ویوها (views): آنچه کاربر می بیند را کنترل می کند. View داده‌ ها را از مدل‌ ها فراخوانی می‌کند، محاسبات انجام شده را اجرا و در نهایت آن را به Template ارسال می‌کند.
  • تمپلیت ها (templates): نحوه مشاهده صفحات توسط کاربر را کنترل می کند. توضیح می دهد که چگونه داده های دریافتی از ویوها باید تغییر یا تمپلیت بندی شوند تا در صفحه نمایش داده شوند
  • کنترلر(controller): منطق کاری و اطلاعاتی که باید از مدل دریافت و پردازش شود در این بخش اجرا می شوند.
  1. ساختار دایرکتوری پروژه جنگو را توضیح دهید.

جنگو با ایجاد یک پروژه و یک پوشه app، بخش های مختلف برنامه وب را با استفاده از یک ساختار دایرکتوری سازماندهی می کند. ایجاد و تنظیم یک پروژه مناسب به DRY نگه داشتن پروژه (don’t repeat yourself یا تکراری کد نزن) کمک می کند. هنگامی که یک پروژه جنگو ایجاد می کنید، جنگو با استفاده از نام پروژه ای که انتخاب می کنید، یک دایرکتوری root (ریشه) برای پروژه ایجاد می کند. این دایرکتوری شامل فایل های مورد نیاز برای ایجاد عملکرد اولیه برای برنامه های وب شما است.

  1. مدل جنگو چیست؟

مدل جنگو یک ویژگی مربوط به جنگو است که به شما امکان می دهد جداول، فیلدها و محدودیت ها را بسازید. SQL (زبان کوئری ساختاریافته) یک زبان پیچیده است که شامل کوئری های مختلف زیادی برای ایجاد و ساخت، حذف، به روز رسانی و سایر وظایف مرتبط با پایگاه داده است.

مدل در جنگو به کلاسی اشاره دارد که به جدول پایگاه داده یا مجموعه پایگاه داده متصل می شود. هر Property کلاس مدل جنگو یک فیلد پایگاه داده را نشان می دهد. آنها در app/models.py تعریف شده اند

مثال:

from django.db import models

class SampleModel(models.Model):

field1 = models.CharField(max_length = 50)

field2 = models.IntegerField()

class Meta:

db_table = “sample_model”

هر مدلی در جنگو از django.db.models.Model ارث می برد. مثال ما دارای 2 ویژگی (1 کاراکتر و 1 فیلد عدد صحیح) است که در فیلدهای جدول خواهند بود. کلاس Meta به شما کمک می کند مواردی مانند مجوزهای موجود، نسخه های مفرد و جمع name، نام جدول دیتابیس مرتبط، انتزاعی بودن یا نبودن مدل و غیره را مشخص کنید. برای دریافت اطلاعات بیشتر در مورد مدل ها می توانید به اینجا مراجعه کنید.

  1. ویو در جنگو چیست؟

ویو جنگو توابع پایتون مشابه اسناد HTML هستند و درخواست‌های HTTP را می‌پذیرند و پاسخ‌های HTTP را برمی‌گردانند.

تابع view یا به اختصار "view" به سادگی یک تابع پایتون است که یک درخواست وب را می گیرد و یک پاسخ وب را برمی گرداند. این پاسخ می تواند محتویات HTML یک صفحه وب، یا تغییر مسیر، یا خطای 404، یا یک سند XML، یا یک تصویر و غیره باشد.

مثال:

from django.http import HttpResponse

def sample_function(request):

return HttpResponse(“Welcome to Django”)

دو نوع ویو وجود دارد:

  • ویو مبتنی بر تابع: ویوی خود را به عنوان یک تابع وارد می کنیم.
  • ویو مبتنی بر کلاس: یک رویکرد شی گرا است.
  1. ORM جنگو چیست؟

ORM (مخفف Object Relational Mapper) ما را قادر می‌سازد تا با پایگاه‌های داده تعامل داشته باشیم، به گونه‌ای که می‌توانیم از نوشتن کوئری های خام خودداری کنیم، امکان بازیابی، ذخیره، حذف و انجام سایر عملیات روی پایگاه داده بدون نوشتن هیچ  کوئری  SQL وجود دارد. ORM به عنوان یک لایه انتزاعی بین مدل ها و پایگاه داده کار می کند.

ORM یک API انتزاعی پایگاه داده است که با استفاده از آن می‌توانیم با مدل‌های پایگاه داده آن تعامل داشته باشیم، به‌عنوان مثال، اقداماتی مانند ساختن، حذف، ویرایش و جستجوی آیتم ها را انجام دهیم.

  1. فایل های استاتیک را تعریف کنید و کاربرد آنها را توضیح دهید.

وب سایت ها به طور کلی نیاز به ارائه فایل های اضافی مانند تصاویر دارند. جاوا اسکریپت یا CSS. در جنگو، به این فایل‌ها "فایل‌های استاتیک" گفته می‌شود، جدای از آن، جنگو فایل‌های django.contrib.static را برای مدیریت این فایل‌های استاتیک فراهم می‌کند.

  1. Django-admin و manager.py چیست و دستورات آنها را توضیح دهید؟

"Django-admin" ابزار خط فرمان جنگو برای انجام وظایف گوناگون است و manager.py به طور خودکار در هر پروژه جنگو ایجاد می شود. عملکردهای مشابه Django-admin را انجام می دهد، اما متغیر محیطی DJANGO SETTINGS MODULE را نیز تغییر می دهد تا به فایل settings.py پروژه شما اشاره کند.

  1. تمپلیت Jinja چیست؟

Jinja یک زبان تمپلیت ساز مدرن پایتون است که از تمپلیت های جنگو الهام گرفته شده است و معمولا برای اجرا استفاده می‌شود.

  1. URL جنگو چیست؟

در جنگو، URL ها به عنوان درگاه ورودی برنامه شما عمل می کنند. در urls.py، می‌توانید نحوه عملکرد مسیریابی جنگو را پیکربندی کنید.

URL ها یکی از مهم ترین بخش های یک برنامه وب هستند و جنگو با کمک ماژول خود به نام URLconf (پیکربندی URL) راهی برای طراحی URL های ویژه در اختیار شما می گذارد. عملکرد اصلی این ماژول پایتون این است که می توانید URL های خود را در جنگو به روشی که دوست دارید طراحی کنید و سپس آنها را به تابع پایتون (تابع View) نگاشت کنید. این URL ها می توانند ثابت و پویا باشند. این نشانی‌های اینترنتی در urls.py وجود دارند، جایی که با تابع view مطابقت دارند.

سینتکس پایه:

from django.urls import path

from . import views

urlpatterns = [

path('data/2020/', views.data_2020),

path('data/<int:year>/', views.data_year)

]

  1. استایل های مختلف وراثت مدل در جنگو چیست؟

در جنگو چندین روش برای وراثت مدل‌ها وجود دارد:

وراثت از کلاس پایه مدل (Model):

می‌توان یک مدل جدید را از کلاس پایه Model ارث بری کرد. این روش مناسب است وقتی می‌خواهیم یک مدل کاملاً جدید ایجاد کنیم.

وراثت چندگانه (Multi-table inheritance):

یک مدل می‌تواند از چند مدل دیگر ارث بری کند. در این حالت هر مدل والد دارای یک جدول جداگانه در دیتابیس خواهد بود.

وراثت تک جدولی (Abstract base models):

مدل پایه انتزاعی تعریف می‌شود و مدل‌های فرزند از آن ارث می‌برند. همه مدل‌ها در یک جدول ذخیره می‌شوند.

وراثت جعبه ابزاری (Proxy models):

مدل پروکسی تعریف می‌شود تا ویژگی‌های اضافی به مدلی دیگر اضافه کند. هر دو مدل در یک جدول قرار می‌گیرند.

انتخاب نوع وراثت بستگی به نیازهای پروژه دارد. وراثت چندگانه برای تفکیک منطقی داده‌ها و وراثت تک جدولی برای تفکیک فیزیکی داده‌ها مناسب است.

پس از خواندن سوال های بالا، زمان آن رسیده است که سطح دشواری این سوال ها را با پرسش های سطح متوسط افزایش دهیم.

سطح متوسط سوالات مصاحبه فنی جنگو

  1. تفاوت بین یک project و یک app چیست؟

project کل برنامه را پوشش می دهد، در حالی که یک app یک ماژول یا برنامه کاربردی در project است که با یک نیاز مخصوص سروکار دارد. بنابراین، یک project از چندین app تشکیل شده است، در حالی که یک app در چندین project حضور دارد.

  1.  تمپلیت جنگو چیست؟

تمپلیت‌ها در جنگو برای نمایش داده‌ها به کاربران استفاده می‌شوند. تمپلیت‌ها فایل‌هایی هستند که حاوی کدهای HTML، CSS، JavaScript و متغیرها و تگ‌های زبان الگوی جنگو (DTL) می‌باشند.

ویژگی‌های تمپلیت‌ها در جنگو:

  • امکان تفکیک منطق نمایش از منطق تولید داده‌ها
  • قابلیت استفاده مجدد و سازمان‌دهی بهتر کد
  • امکان ارث‌بری تمپلیت‌ها از یکدیگر
  • دسترسی به متغیرها و منطق پایتون در بخش منطق نمایش
  • امکان استفاده از تگ‌های DTL مانند if ، for ، filter در تمپلیت
  • نمایش داده‌های دریافتی از view با استفاده از متغیرها
  • ترکیب تمپلیت‌های مختلف در یک تمپلیت والد

به طور کلی تمپلیت‌های جنگو باعث تفکیک منطق و افزایش قابلیت نگهداری کد می‌شوند.

  1. در مورد چرخه request/response جنگو توضیح دهید

با شروع فرآیند، سرور جنگو یک request (درخواست) دریافت می کند. سپس سرور به دنبال URL منطبق در الگوهای URL تعریف شده برای پروژه می گردد. اگر سرور نتواند URL منطبق را پیدا کند، یک کد 404 تولید کرده و به صورت response 404 بر می گرداند. اگر URL مطابقت داشته باشد، کد مربوطه را در فایل view مرتبط با URL اجرا می کند و یک response 200 ارسال می کند.

  1.  رابط کاربری Admin جنگو چیست؟

جنگو به یک رابط مدیریت کاملا قابل تنظیم و داخلی مجهز شده است. این پورتال به توسعه دهندگان این امکان را می دهد که تمام داده های موجود در پایگاه داده ای را که شامل برنامه ها و مدل های ثبت شده است، ببینند و تغییراتی در آنها ایجاد کنند. مدل باید در فایل admin.py ثبت شود تا بتوانید از جدول پایگاه داده با رابط مدیریت استفاده کنید.

  1. چگونه جنگو را نصب می کنید؟

کاربران پایتون را بر اساس سیستم عامل مورد استفاده که توسط سرورها ارائه می‌شود، نصب می کنند. سپس دستور "pip install django>=2.2,<3" را در ترمینال اجرا و منتظر نصب آن می‌شوند. همچنین یک روش بهتر برای نصب پایتون و جنگو استفاده از docker است که امکان ایزوله سازی پروژه را فراهم می‌کند.

  1. چگونه میتوان پی برد که کدام نسخه جنگو روی سیستم نصب شده است؟

با باز کردن خط فرمان و وارد کردن دستور زیر می توانید نسخه جنگو را بررسی کنید:

Python-m Django–version
  1. سیگنال در جنگو چیست؟

سیگنال‌ها قطعه‌هایی از کد هستند که حاوی اطلاعاتی در مورد آنچه در حال حاضر در حال انجام است، می باشند. یک دیسپچر هم برای ارسال و هم برای گوش دادن به سیگنال ها استفاده می شود.

هر زمان که تغییری در یک مدل وجود داشته باشد، ممکن است لازم باشد برخی از اقدامات لازم را انجام دهیم.

جنگو روشی زیبا برای کنترل این موارد در تمپلیت سیگنال ارائه می دهد. سیگنال ها ابزارهایی هستند که به ما امکان می دهند رویدادها را با اقدامات مرتبط کنیم. ما می‌توانیم این کارها را با توسعه تابعی اجرا کنیم که با فراخوانی سیگنال اجرا شود.

لیست سیگنال های داخلی در مدل ها:

Signals Description
django.db.models.pre_init &
django.db.models.post_init
Sent before or after a models’s _init_() method is called
django.db.models.signals.pre_save & django.db.models.signals.post_save Sent before or after a model’s save() method is called
django.db.models.signals.pre_delete &
django.db.models.signals.post_delete
Sent before or after a models’ delete() method or queryset delete() method is called
django.db.models.signals.m2m_changed Sent when a ManyToManyField is changed
django.core.signals.request_started &
django.core.signals.request_finished
Sent when an HTTP request is started or finished
  1. Authentication (احراز هویت کاربر) در جنگو را توضیح دهید

جنگو شامل یک سیستم احراز هویت کاربر است که Objectهایی مانند کاربران، گروه‌ها، مجوزهای کاربر و برخی از sessionهای کاربر مبتنی بر Cookie را کنترل می‌کند.

این سیستم شامل Objectهای زیر است و بر روی آنها کار می کند:

  • Users (کاربران)
  • Permissions (مجوز ها)
  • Groups (گروه ها)
  • Password Hashing System (سیستم هش رمز عبور)
  • Forms Validation (اعتبار سنجی فرم)
  • A pluggable backend system (یک سیستم قابل اتصال بک اند)
  1. چه دیتابیس های توسط جنگو پشتیبانی می شود؟

دیتابیس های زیر  به طور رسمی توسط جنگو پشتیبانی می‌شوند:

  • PostgreSQL
  • MariaDB
  • MySQL
  • Oracle
  • SQLite
  1. استفاده از session framework چگونه است؟

ساختار session امکان ذخیره سازی و بازیابی هر نوع داده را برای هر بازدیدکننده سایت فراهم می کند. ارسال و دریافت کوکی ها را خلاصه می کند و داده ها را در سمت سرور نگه می دارد.

  1. context چیست؟

در جنگو، context یک دیکشنری است که در آن کلیدها نام متغیرها و مقدارها، مقادیر آن متغیرها هستند. تمپلیت این دیکشنری (context) را دریافت کرده و  از آن به همراه متغیرها برای خروجی محتوای پویا استفاده می کند.

  1. توابع Django.shortcuts.render چیست؟

تابع render یک تابع میانبر است که به توسعه دهنده اجازه می دهد تا به سرعت دیکشنری را بفرستد. سپس با استفاده از موتور تمپلیت در این تابع، تمپلیت با دیکشنری داده ترکیب می شود. در نهایت، تابع render یک HttpResponse حاوی متن رندر شده ارائه می‌کند، که داده‌های برگردانده شده توسط مدل‌ها است. در نتیجه، render() در زمان توسعه دهنده صرفه جویی کرده و به او اجازه می دهد تا از چندین موتور تمپلیت استفاده کند.

  1. اهمیت فایل settings.py چیست؟

فایل settings.py یکی از مهم‌ترین فایل‌های پروژه‌های جنگو است و نقش مهمی در پیکربندی پروژه دارد. اهمیت این فایل به شرح زیر است:

  • تنظیمات مربوط به پایگاه داده مانند نام پایگاه داده، نام کاربری و رمز عبور در این فایل قرار می‌گیرد.
  • تنظیمات مربوط به مدل‌های ایجاد شده در پروژه در این فایل مشخص می‌شود.
  • تنظیمات مربوط به زمان‌بندی پروژه مثل منطقه زمانی در این فایل انجام می‌شود.
  • تنظیمات مربوط به تمپلیت‌ها و فایل‌های استاتیک در اینجا قرار می‌گیرد.
  • تنظیمات مربوط به کش پروژه، زبان، میانواره و غیره در این فایل صورت می‌گیرد.
  • لیست APPLICATION_DIRS برای فعال کردن اپلیکیشن‌های پروژه در اینجا قرار می‌گیرد.
  • تنظیمات مربوط به احراز هویت، مجوزها و امنیت در این فایل انجام می‌شود.

به طور کلی فایل settings.py مغز مرکزی پروژه جنگو به حساب می‌آید و تمام تنظیمات اصلی در آن قرار دارد.

  1. چگونه می توان ردیف موارد موجود در مدل را مشاهده کرد؟

تابع '()all' در پوسته شما می تواند برای نمایش هر آیتم در پایگاه داده شما استفاده شود.

  1. چگونه آیتم ها را در مدل فیلتر کنیم؟

در جنگو راه‌های مختلفی برای فیلتر کردن آیتم‌های یک مدل وجود دارد:

1. فیلتر در متد مدل

می‌توانیم در متد مدل، فیلتر را اعمال کنیم. برای مثال:

class Book(models.Model):
  ...
  
  def latest_books(self):
    return self.objects.filter(publish_date__year=2023)[:10]

2. فیلتر در متد منیجر مدل

Book.objects.filter(is_published=True)

3. فیلتر در ابتدای لیست

latest_books = Book.objects.filter(publish_date__year=2023)[:10]

4. فیلتر در متد get_queryset کلاس مشاهده

class BookListView(ListView):
  def get_queryset(self):
    return Book.objects.filter(is_published=True)

5. فیلتر با استفاده از Q object برای فیلترهای پیچیده‌تر

from django.db.models import Q

Books.objects.filter(Q(publish_date__year=2023) & Q(price__gt=10000))

انتخاب روش بستگی به نیاز دارد. اما اغلب گزینه‌های اول و دوم رایج‌تر هستند.

ما سوالات آسان و متوسط ​​مصاحبه جنگو را پوشش داده ایم، اکنون بیایید به سطح پیشرفته سوالات و پاسخ های مصاحبه جنگو نگاه کنیم.

سطح پیشرفته سوالات مصاحبه فنی جنگو

  1. فریم ورک Rest چیست؟

Django Rest Framework (DRF) چارچوبی است که به شما کمک می کند API های RESTful را به سرعت ایجاد کنید. آنها به دلیل استفاده از پهنای باند کم برای برنامه های وب ایده آل هستند.

  1. در جنگو از middleware برای چه اهدافی استفاده می شود؟

شما از middleware برای چهار عملکرد مختلف استفاده می کنید:

  • Gzipping محتوا
  • حفاظت از جعل درخواست در سایت
  • مدیریت session
  • استفاده از احراز هویت (authentication)
  1. فایل URLs-config برای چیست؟

فایل urls.py در جنگو نقش مهمی در مسیریابی و اتصال URLها به views دارد.

وظایف اصلی این فایل عبارتند از:

  • تعریف الگوهای مسیریابی URL با استفاده از regular expression
  • متصل کردن الگوهای URL به views مربوطه
  • اضافه کردن namespace برای URLها برای ارجاع دهی بهتر
  • تعریف URLهای دارای پارامتر
  • استفاده از نام مستعار برای URLها به جای هاردکد کردن مسیر
  • تفکیک URLها بر اساس اپلیکیشن یا دسته‌بندی منطقی
  • امکان تفویض مسیریابی فرعی به فایل‌های urls دیگر
  • import کردن views برای اتصال URL به آنها

به طور کلی فایل urls.py باعث می‌شود مسیریابی در جنگو سازمان‌یافته و قابل مدیریت باشد.

  1. آیا جنگو از کلیدهای اصلی چند ستونی پشتیبانی می کند؟

جنگو به طور مستقیم از کلیدهای اصلی چند ستونی پشتیبانی نمی‌کند.

دلیل این موضوع این است که جنگو از ORM استفاده می‌کند و در سطح ORM، کلید اصلی همیشه یک فیلد واحد است.

البته راه‌حل‌هایی وجود دارد:

  • استفاده از ترکیب چند فیلد با unique_together در متاکلاس مدل
  • تعریف یک فیلد کلید اصلی جدید و محاسبه مقدار آن بر اساس چند فیلد دیگر
  • اضافه کردن محدودیت و اندیس‌های سطح پایگاه داده برای فیلدهای مورد نظر
  • پیاده‌سازی کلید مرکب در سطح پایین‌تر با استفاده از raw SQL

بنابراین بهتر است به جای کلید اصلی چندستونی، از روش‌های بالا در جنگو استفاده کرد.

  1. چگونه می توانید کوئری های SQL را در جنگو مشاهده کنید؟

برای شروع، مطمئن شوید که تنظیمات DEBUG با True تنظیم شده است. اگر این طور نبود، دستورات زیر را بنویسید:

from Django.db import connection

connection.queries
  1. چندین استراتژی Cache که توسط جنگو پشتیبانی می شود را فهرست کنید.

جنگو از این استراتژی های کش پشتیبانی می کند:

  • کش دیتابیس
  • کش حافظه
  • کش سیستم فایل
  • Memcached
  1. QuerySet در context جنگو چیست؟

QuerySet مجموعه ای از کوئری های SQL است. دستور print(b.query) کوئری SQL ایجاد شده از فراخوانی filter را به شما نشان می دهد.

  1. چرا از کلاس django.test.Client استفاده می کنیم؟

کلاس Client در ماژول تست جنگو، یکی از مفیدترین ابزارها برای Unit Testing و تست پذیرش در جنگو است.

دلایل اصلی استفاده از این کلاس:

  • شبیه‌سازی درخواست‌های HTTP (GET, POST و غیره) به سرور جنگو
  • تست کردن views بدون نیاز به راه‌اندازی یک سرور واقعی
  • دسترسی به کد پاسخ‌ها، متن پاسخ و context درخواست‌ها
  • امکان ارسال داده به صورت POST, GET, JSON
  • تست کردن دسترسی‌ها و مجوزها
  • اعمال تغییرات بر روی session و cookie
  • تست فرآیندهای احراز هویت و ورود
  • سهولت استفاده با زیرمجموعه‌ای از آزمون‌های موجود در Django

به طور کلی این کلاس باعث می‌شود بتوان به راحتی تست‌های اندازه‌گیری و جامعی برای جنگو نوشت.

  1. چگونه از سشن های مبتنی بر فایل استفاده کنیم؟

برای استفاده از یک جلسه مبتنی بر فایل، باید تنظیمات SESSION_ENGINE را روی "Djangoo.contrib.sessions.backends.file" تنظیم کنید.

  1. mixin چیست؟

در جنگو، یک mixin یک کلاس پایتون است که توسط کلاس دیگری به ارث برده می شود تا عملکردهای اضافی را برای برنامه انجام دهد. کلاس هایی که می توانند دوباره استفاده شوند و مقیاس شوند، mixin هستند. یک شکل منحصر به فرد از وراثت های چندگانه یک mixin است. mixin ها معمولا در دو زمینه به کار می روند:

  • می خواهید به یک کلاس چندین ویژگی اختیاری بدهید.
  • می خواهید یک ویژگی خاص را برای کلاس های متعدد اعمال کنید.
  1. کلاس Field جنگو چیست؟

به طور کلی، "Field" یک کلاس انتزاعی است که یک ستون جدول پایگاه داده را نشان می دهد. RegisterLookupMixin یک زیر کلاس از کلاس Field است. این فیلدها توسط متد value برای ساخت جداول پایگاه داده بکار گرفته شده و سپس برای انتقال انواع داده ای پایتون به دیتابیس استفاده می شود. در نتیجه، فیلدها اجزای ضروری جنگو مانند مدل‌ها و کوئری ست ها هستند.

  1. چرا تغییر مسیر دائمی گزینه خوبی نیست؟

تغییر مسیر دائمی تنها در صورتی استفاده می شود که نیازی به نمایش URL های قدیمی نداشته باشیم. مرورگر پاسخ تغییر مسیرهای دائمی را در کش نگه می دارد، بنابراین تلاش برای تغییر مسیر به جایی دیگر باعث ایجاد مشکلاتی می شود. از آنجا که این یک فرآیند در سمت مرورگر است، اگر کاربر شما به صفحه دیگری هدایت شود، همان صفحه را بارگیری می کند.

  1. تفاوت بین فیلد OneToOne و ForeignKey چیست؟

هر دو یکی از رایج ترین انواع فیلدها در جنگو هستند. تنها تفاوت این دو در این است که فیلد ForeignKey علاوه بر کلاس مدل، گزینه on_delete را نیز شامل می شود، زیرا برای روابط چند به یک استفاده می شود، در حالی که فیلد OneToOne فقط روابط یک به یک را مدیریت می کند و فقط به کلاس مدل نیاز دارد.

  1. چگونه چندین QuerySet را در یک View ترکیب کنیم؟

QuerySet ها را می توان در QuerySet دیگری ترکیب کرد و لازم نیست آنها از یک مدل باشند. برای ادغام QuerySets از همان مدل، از عملگر union پایتون استفاده میکنیم. عملگر union می تواند برای ترکیب دو یا چند QuerySet با سینتکس زیر استفاده شود:

model_combination = model_set1 | model_set2 | model_set3

علاوه بر این، می توانید با استفاده از متد chain() از پکیج Itertools، دو یا چند QuerySet را از مدل های دیگر به هم متصل کنید.

from itertools import chain

model_combination = list(chain(model_set1, model_set2))

به عنوان یک جایگزین، می‌توانید دو یا چند QuerySet را از مدل‌های دیگر با استفاده از union ادغام کنید تا  all=TRUE را ارسال کنید تا امکان تکرار وجود داشته باشد.

model_combination = model_set1.union(model_set2, all=TRUE)

 

  1. روش های شخصی سازی Admin Interface جنگو را ذکر کنید

راه های مختلفی برای ویژه سازی و شخصی سازی رابط مدیریت جنگو وجود دارد:

  • اضافه کردن ستون‌های سفارشی به لیست نمایش آیتم‌ها در مدل‌ها
  • اضافه کردن فیلترهای سفارشی برای فیلتر کردن آیتم‌ها
  • اضافه کردن دکمه‌ها و اکشن‌های سفارشی در لیست‌ها
  • تغییر ظاهر و استایل رابط مدیریت با اضافه کردن CSS و JavaScript
  • ایجاد مدل‌های سفارشی برای نمایش داده‌های خاص
  • تغییر ترتیب نمایش مدل‌ها در رابط مدیریت
  • اضافه کردن نمایشگرهای سفارشی برای فیلدها
  • ایجاد گروه‌بندی منطقی برای مدل‌ها در رابط مدیر
  • محدود کردن دسترسی به بخش‌های مدیریت برای کاربران
  • افزودن صفحات و منوهای سفارشی

با استفاده از این تکنیک‌ها می‌توان رابط کاربری مدیریت را مطابق با نیازها شخصی‌سازی کرد.

  1. اشیا Q را در ORM جنگو توضیح دهید

هنگام نوشتن کوئری‌های پیچیده، اشیا Q استفاده می شوند زیرا filter فقط به شما اجازه می دهند شرایط را "AND" کنید. در حالی که اشیا Q به شما اجازه می دهند که شرایط را "OR" کنید. 

  1. استثنا یا Exception جنگو چیست؟

یک استثنا یا Exception یک رویداد غیرعادی است که باعث از کار افتادن یک برنامه می شود. جنگو کلاس های Exception خود را برای مقابله با این شرایط دارد و همچنین از تمام Exception پایتون پشتیبانی می کند.

  1. ساختار دایرکتوری یک پروژه جنگو را شرح دهید؟

  • manager.py: یک ابزار خط فرمان که به شما امکان می دهد با پروژه جنگو خود تعامل داشته باشید
  • __init__.py: یک فایل خالی که به پایتون می گوید که دایرکتوری فعلی باید به عنوان یک بسته پایتون در نظر گرفته شود.
  • settings.py: شامل تنظیمات پروژه فعلی مانند اتصالات DB است.
  • urls.py: همه URL های پروژه در اینجا موجود است
  • wsgi.py: این فایل یک نقطه ورودی برای برنامه شما است که توسط وب سرورها برای ارائه پروژه ای که ایجاد کرده اید استفاده می شود.
  1. تمپلیت ها به چه زبانی هستند؟

تمپلیت ها بخشی جدایی ناپذیر از معماری MVT هستند. آنها به طور کلی شامل HTML، CSS و js هستند که در آنها متغیرهای پویا و اطلاعات با کمک view ها تعبیه شده اند. برخی از ساختارها توسط موتور تمپلیت شناسایی و تفسیر می شوند. اصلی ترین آنها متغیرها و تگ ها هستند.

یک تمپلیت با یک context ارائه می شود. رندر فقط متغیرها را با مقادیرشان جایگزین می‌کند که در متن موجود هستند و تگ‌ها را پردازش می‌کند. همه چیز دیگر همان طور که هست باقی می ماند.

سینتکس زبان تمپلیت جنگو شامل چهار ساختار زیر است:

  • متغیرها
  • تگ ها
  • فیلترها
  • کامنت ها

برای مطالعه بیشتر در مورد تمپلیت ها می توانید به این آدرس مراجعه کنید.

  1. چگونه فایل های استاتیک را پیکربندی کنیم؟

مطمئن شوید که django.contrib.staticfiles به INSTALLED_APPS شما اضافه شده است

در فایل settings مقدار STATIC_URL را به عنوان مثال تعریف می کنیم.

STATIC_URL = '/static/'

در تمپلیت‌های جنگو، از تگ تمپلیت ثابت برای ایجاد URL برای مسیر نسبی داده شده STATICFILES_STORAGE استفاده می کنیم.

{% load static %}

<img src="{% static 'my_sample/abcxy.jpg' %}" alt="ABC image">

طبق مثال بالا فایل‌های استاتیک در پوشه‌ای به نام static در برنامه ذخیره می‌شوند. به عنوان مثال my_sample/static/my_sample/abcxy.jpg

  1. لایف سایکل پاسخ دهی جنگو را توضیح دهید؟

هر زمان که درخواستی یا request ای به یک صفحه وب ارسال می شود، جنگو یک شی HttpRequest ایجاد می کند که حاوی یک متا دیتا در مورد آن درخواست یا request است. پس از آن جنگو ویوی خاصی را بارگذاری کرده و HttpRequest را به عنوان اولین آرگومان به تابع view ارسال می کند. هر ویو یک شی HttpResponse را برمی گرداند.

مراحل زیر زمانی اتفاق می‌افتد که درخواستی توسط جنگو دریافت می‌شود:

  1. ابتدا فایل Django settings.py بارگذاری می شود که شامل کلاس‌های middleware مختلف نیز می شود (MIDDLEWARES)
  2. middleware ها نیز به ترتیبی که در MIDDLEWAREST ذکر شده اند اجرا می شوند
  3. از اینجا به بعد درخواست به مسیریاب URL منتقل می شود، که به سادگی مسیر URL را از درخواست دریافت می کند و سعی می کند با مسیرهای URL داده شده ما در urls.py مپ کند.
  4. به محض اینکه مپ شد، تابع view معادل را فراخوانی می کند که از آنجا یک پاسخ معادل تولید می شود.
  5. پاسخ همچنین از middleware های پاسخ عبور می کند و به کلاینت/مرورگر ارسال می شود.
  1. چگونه آیتم های موجود در Model را فیلتر کنیم؟

ModelName.objects.filter(field_name=”term”)
  1. چگونه می توان کوئری SQL را از Set query بدست آورد؟

print(queryset.query)
  1. تفاوت بین select_related و prefetch_related چیست؟

تفاوت اصلی بین select_related و prefetch_related در جنگو به شرح زیر است:

select_related

  • برای روابط یک به یک استفاده می‌شود. مثلاً ForeignKey و OneToOneField
  • در واقع JOIN انجام می‌دهد و در یک کوئری از دیتابیس، داده‌ها را بارگذاری می‌کند
  • تعداد کوئری‌های ارسالی به دیتابیس را کاهش می‌دهد

prefetch_related

  • برای روابط یک به چند مثل ManyToManyField استفاده می‌شود
  • در واقع در دو مرحله عمل می‌کند. ابتدا مدل اصلی و سپس مدل مرتبط را بارگذاری می‌کند.
  • تعداد کوئری‌ها را افزایش نمی‌دهد
  • می‌تواند چندین مرتبه فراخوانی شود
  • اختیاری است در حالی که select_related اجباری

بنابراین بسته به نوع رابطه بین مدل‌ها از هر کدام استفاده می‌شود.

کلام آخر

جنگو یک فریمورک قدرتمند و کامل برای توسعه وب است که امروزه بسیار محبوب شده است. در این مقاله سعی کردم در سه سطح ساده، متوسط و پیشرفته سوالات مصاحبه جنگو را بررسی و شما را برای یک مصاحبه جذاب آماده کنیم.

اما نکته‌ی پایانی و کلام آخر این بخش یک جمله است: مصاحبه‌های زیادی انجام بدید تا ضعف‌های شما بیشتر و بهتر دیده شود و برای برطرف کردن آنها منابع یادگیری بهتری را مطالعه کنید.

نویسنده شوید
دیدگاه‌های شما (3 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

Nima gh
24 مهر 1401
سلام خسته نباشید ببخشید یه سوال داشتم من تویه urls.pyنوشته بود میحواید path اضافه کنید از include استفاده کنیدومنم همین کارو کردم.ولی سرور رو نمیتونم RUN کنم ارور میده مشکلش چیه ؟؟؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

Mohammad Gholampour
27 فروردین 1401
مرسی. خیلی عالی بود. خیلی خیلی ممنون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
12 اردیبهشت 1401
قدردان حمایت شما هستیم.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

میلاد
23 فروردین 1401
سوالات خیلی آبکی هستن. توی کدوم مصاحبه اینارو میپرسن آخه

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
12 اردیبهشت 1401
از نظر شما سپاسگزاریم و سعی می‌کنیم این مقاله را بهبود ببخشیم.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.