جنگو یکی از فریمورکهای وب سطح بالا مبتنی بر پایتون، رایگان و متنباز است که در سال 2003 ایجاد شد. این فریمورک از الگوی معماری مدل-نمای-الگو (MVT) پیروی میکند. امروزه، تقاضا برای برنامهنویس جنگو بالاست. جنگو توسط بنیاد نرمافزاری جنگو (DSF)، یک سازمان غیرانتفاعی مستقر در ایالات متحده، مدیریت میشود. اگر شما یک مبتدی یا حتی یک حرفهای هستید که میخواهید به یک توسعهدهنده جنگو تبدیل شوید و خود را برای مصاحبههای آینده آماده کنید، رادینو سوالات و پاسخهای مصاحبه جنگو را ارائه میدهد که حتماً به شما کمک میکند تا مصاحبهتان را با موفقیت بگذرانید.
سوالات مصاحبه جنگو
سوال 1: جنگو چیست؟
جنگو یک فریمورک توسعه وب کامل است که تسهیل در ایجاد و نگهداری صفحات وب پویا با کیفیت بالا را فراهم میکند و همچنین توسعه سریع و سبکهای عملی و منطقی را توسعه میدهد. جنگو عملیات تکراری را خودکار میکند و به این ترتیب فرآیند توسعه را با کد کمتر و کارآمدتر میسازد.
سوال 2: تفاوت بین Flask و Django چیست؟
>>> Flask
- فریمورک WSGI است
- امکان استفاده از انواع مختلف پایگاه دادهها را دارد
- از SQLAlchemy استفاده میکند
- سبک کاری متنوع
- ساختار دلخواه
- پشتیبانی از API
- پشتیبانی از صفحات HTML پویا ندارد
- پشتیبانی از دیباگ بصری
- ابزار بوتاسترپ داخلی ندارد
- URL dispatcher به درخواست RESTful مربوط میشود
>>> Django
- فریمورک وب کامل است
- از انواع مختلف پایگاه دادهها پشتیبانی نمیکند
- از ORM داخلی استفاده میکند
- سبک کاری تکپارهای
- ساختار پروژه متعارف
- پشتیبانی از API ندارد
- صفحات پویا را میپذیرد
- پشتیبانی از دیباگ بصری ندارد
- ابزار بوتاسترپ داخلی (django-admin) برای شروع ساخت وباپلیکیشنها
- URL dispatcher با مستندات قوی
سوال 3: نام چند شرکت که از جنگو استفاده میکنند را بگویید
برخی از شرکتهایی که از فریمورک جنگو استفاده میکنند عبارتند از: اینستاگرام، موزیلا، دیسکوس، بیتباکت، Nextdoor و Clubhouse.
سوال 4: تفاوت بین پروژه و اپلیکیشن چیست؟
تفاوت اصلی بین پروژه و اپلیکیشن این است که پروژه به کل برنامه اشاره دارد در حالی که اپلیکیشن بخشی از پروژه است که به صورت مستقل قادر به انجام وظایف خاصی است.
سوال 5: معماری جنگو را توضیح دهید
معماری مدل-نمای-الگو (MVT) توسط جنگو استفاده میشود. این یک الگوی طراحی نرمافزار برای توسعه وب است. ساختار MVT جنگو از سه بخش تشکیل شده است:
- مدل: به عنوان رابط برای دادهها عمل میکند و مسئول مدیریت دادهها است. پایگاه دادهای مانند MySql یا Postgres که ساختار داده منطقی را پشتیبانی میکند.
- نما (View): رابط کاربری است که صفحه وب را در مرورگر شما نمایش میدهد. HTML/CSS/JavaScript و فایلهای Jinja برای نمایش آن استفاده میشود.
- الگو (Template): از بخشهای استاتیک HTML و نحوه درج محتوای دینامیک تشکیل شده است.
سوال 6: ویژگیهای استفاده از جنگو چیست؟
- تنظیمات سرور انعطافپذیر
- پایگاه داده رابطهای مدل
- ارائه شیگرا (ORM)
- سیستم قالببندی وب
- پشتیبانی از کلاسهای Middleware
- Dispatcher URL مبتنی بر Regex
- چارچوب تست واحد
- رابط مدیریت
- بهینهسازی برای SEO
- کاهش ریسکهای داخلی
- وراثت آسان
سوال 7: ساختار دایرکتوری پروژه جنگو را توضیح دهید
زمانی که شما یک پروژه جنگو را شروع میکنید، با برخی فایلهای پایه مانند manage.py و view.py شروع میشود.
- `__init__.py`: یک فایل خالی است که به این معناست که این دایرکتوری یک بسته است و با وارد کردن آن، پایتون تشخیص میدهد که این دایرکتوری یک پروژه پایتون است.
- `manage.py`: برای تعامل با پروژه از خط فرمان استفاده میشود و با این دستور میتوان فرمانهای مختلفی مانند:
`manage.py runserver`، `manage.py makemigrations`، `manage.py migrate`
و غیره را اجرا کرد.
- `settings.py`: فایل بسیار مهمی است که تمام مقادیر پیکربندی مورد نیاز برای عملکرد وباپلیکیشن را در خود نگه میدارد، مانند اپلیکیشنهای پیشفرض، middleware، پایگاه داده پیشفرض، کلیدهای API و بسیاری از موارد دیگر.
- `views.py`: اطلاعات کاربر را نمایش میدهد و برای استخراج و حذف و ایجاد اطلاعات در دیتابیس استفاده میشود.
- `urls.py`: یک URL (مکان یاب جهانی) است که تمام نقاط پایانی را شامل میشود و تمام لینکهای پروژه و توابعی که آنها را فراخوانی میکنند در آن ذخیره میشود.
- `models.py`: مدلها را در قالب کلاسها نمایش میدهد و هیچ منطقی که نحوه نمایش دادهها به کاربر را توضیح دهد، در آن نیست.
- `wsgi.py`: WSGI مخفف Web Server Gateway Interface است و برای استقرار پروژه در WSGI استفاده میشود و ارتباط بین اپلیکیشن جنگو و وبسرور را کمک میکند.
- `admin.py`: برای ایجاد کاربر سوپر، ثبت مدل، ورود و استفاده از وباپلیکیشن استفاده میشود.
- `app.py`: فایل پیکربندی اپلیکیشن است که به کاربر کمک میکند تا پیکربندی برنامه خود را شامل کند.
سوال 8: چگونه یک پروژه جنگو ایجاد میکنید؟
با استفاده از دستور زیر میتوان یک پروژه جنگو ایجاد کرد:
django-admin startproject projectname
سوال 9: چگونه یک اپلیکیشن جنگو ایجاد میکنید؟
با استفاده از دستور زیر میتوان یک اپلیکیشن جنگو ایجاد کرد:
python manage.py startapp appname
سوال 10: چگونه سرور توسعه خود را راهاندازی کنید؟
با استفاده از دستور زیر میتوان سرور توسعه را راهاندازی کرد:
python manage.py runserver
سوال 11: اهمیت تنظیم محیط مجازی برای جنگو چیست؟
محیط مجازی به شما این امکان را میدهد که وابستگیهای پروژههای مختلف را به صورت جداگانه مدیریت کنید و یک محیط ایزوله ایجاد کنید که به یکدیگر وابسته نباشند و به سرعت فعال و غیرفعال شوند. استفاده از محیط مجازی ایدهآل است زیرا وابستگیها و تداخلات را حذف میکند.
سوال 12: توضیح مختصری درباره رابط مدیریت جنگو بدهید.
جنگو یک رابط مدیریت پیشفرض برای ایجاد، خواندن، بهروزرسانی و حذف اشیا مدل ارائه میدهد. این رابط مدیریت مفید به کاربر اجازه میدهد تا وظایف اداری را انجام دهد، دادههایی که اطلاعاتی درباره دادههای مدل ارائه میدهد را بخواند و یک رابط سریع برای تغییر محتویات اپلیکیشن فراهم کند.
سوال 13: URLهای جنگو چیستند؟
مسیریابی یک وبسایت با URLهای آن تعیین میشود. در برنامه، ما یک ماژول یا فایل پایتون به نام `urls.py` ایجاد میکنیم. مسیر یابی وبسایت شما توسط این فایل تعیین میشود. وقتی کاربر URL خاصی را در مرورگر وارد میکند، URLهای موجود در فایل `urls.py` مقایسه میشوند و سپس پاسخ مربوط به URL درخواست شده به کاربر ارسال میشود.
سوال 14: نماهای جنگو چیستند؟
نماهای جنگو یکی از ویژگیهای مهم ساختار MVT هستند. این تابع یا کلاس که یک درخواست وب را میگیرد و پاسخ وبی را برمیگرداند، طبق اسکریپت جنگو است. این پاسخ میتواند یک الگوی HTML، محتوای یک صفحه وب، سند XML، PDF یا تصاویر باشد. نما بخشی از رابط کاربری است که HTML/CSS/JavaScript را در فایلهای الگو به چیزی که در مرورگر کاربر نمایش داده میشود تبدیل میکند.
سوال 15: مدلها در جنگو چیستند؟
مدلها یکی از ویژگیهای داخلی جنگو هستند که منبع قطعی اطلاعاتی مانند رفتار و فیلدهای اساسی برای دادههایی که ذخیره میکنیم را فراهم میکنند. مدلها این امکان را به ما میدهند که جداول، فیلدها و محدودیتها را بسازیم و جداول را به مدلها سازماندهی کنیم. به طور کلی، هر مدل به یک جدول پایگاه داده خاص نگاشته میشود. برای استفاده از مدلهای جنگو به یک پروژه و یک اپلیکیشن نیاز دارید. همچنین، جنگو از SQL برای دسترسی به پایگاه داده استفاده میکند. SQL یک زبان پیچیده با بسیاری از کوئریها برای ایجاد، حذف، بهروزرسانی و سایر وظایف مربوط به پایگاه داده است.
سوال 16: دستورات زیر چه کاری انجام میدهند؟
python manage.py makemigrations
python manage.py migrate
دستور `makemigrations` مدلهای اپلیکیشن شما را اسکن کرده و بر اساس تغییرات فایل مدلها، مجموعه جدیدی از مایگریشنها را تولید میکند. این دستور دستور SQL را تولید میکند و وقتی آن را اجرا میکنید، یک فایل مایگریشن جدید به دست میآید. پس از اجرای این دستور، هیچ جدولی در پایگاه داده ایجاد نمیشود.
اجرای دستور `migrate` به ما کمک میکند تا این تغییرات را به پایگاه دادهمان اعمال کنیم. دستور `migrate` دستورالعملهای SQL (تولید شده توسط `makemigrations`) را اجرا کرده و تغییرات پایگاه داده را اعمال میکند. پس از اجرای این دستور، جداول ایجاد خواهند شد.
سوال 17: نشستها (Sessions) چیستند؟
نشستها تکنیکی برای پیگیری وضعیت یک سایت و مرورگر هستند. در طول نشست، دادههای کاربر در نشستها که فایلهای سمت سرور هستند، ذخیره میشود. نشست زمانی به پایان میرسد که کاربر مرورگر را ببندد یا از برنامه خارج شود. در یک نشست، میتوانیم به میزان دلخواه داده ذخیره کنیم. باید از روش `session start()` برای شروع نشست استفاده کنیم. یکی از مزایای استفاده از نشست این است که دادهها به صورت رمزگذاری شده ذخیره میشود.
سوال 18: فایلهای استاتیک را تعریف کرده و کاربردهای آنها را توضیح دهید
فایلهای استاتیک برای ذخیره فایلهایی مانند CSS، جاوااسکریپت، تصاویر و سایر انواع فایلهای استاتیک استفاده میشوند. ما این فایلها را در پوشههای مجزایی نگه میداریم، مانند پوشه `js` که شامل تمام فایلهای جاوااسکریپت است و پوشه `images` که حاوی تمام تصاویر است. این فایلها در زیرپوشه `static` پروژه قرار دارند. جنگو بسته `django.contrib.staticfiles` را ارائه میدهد که به ما در مدیریت فایلهای استاتیک کمک میکند. کاربردهای مختلف فایلهای استاتیک عبارتند از:
- روشها و ویژگیهای فایل را روشن میکند.
- از نظر بسیاری از جنبهها مستقل از پلتفرم است، در حالی که فایلهای عمومی اینطور نیستند.
- میتوان از زیرکلاسها برای گسترش آن استفاده کرد.
سوال 19: قالبها (Templates) در زبان جنگو چیستند؟
قالب جنگو یک سند متنی است که برای ارائه یک ظاهر و طراحی برای وبسایت ما استفاده میشود. این سومین و مهمترین بخش از ساختار MVT جنگو است. در جنگو، یک قالب فایل HTML است که شامل HTML ،CSS و جاوااسکریپت است. فریمورک جنگو به طور کارآمد HTML صفحات وب دینامیکی را برای مشاهده کاربران نهایی مدیریت و تولید میکند. دجانگو عمدتاً یک فریمورک بکاند است، بنابراین ما از قالبها برای ارائه طراحی برای وبسایت خود استفاده میکنیم. دو روش برای استفاده از قالبها در وبسایت ما وجود دارد:
- میتوانیم از یک پوشه قالب واحد استفاده کنیم که در سرتاسر پروژه توزیع میشود.
- میتوانیم یک پوشه قالب جداگانه برای هر اپلیکیشن در پروژه خود ایجاد کنیم.
سوال 20: فایل `settings.py` چه کاری انجام میدهد؟
فایل `settings.py` یک فایل اصلی در پروژههای جنگو است. این فایل تمامی مقادیر پیکربندی مورد نیاز برای عملکرد وباپلیکیشن شما را نگه میدارد؛ تنظیمات پایگاه داده، پیکربندی لاگبرداری، مکانیابی فایلهای استاتیک، کلیدهای API اگر با APIهای خارجی کار میکنید و بسیاری موارد دیگر.
سوال 21: تفاوت بین الگوهای طراحی MVC و MVT چیست؟
مدل و نما در MVC هر دو توسط کنترلر هدایت میشوند، در حالی که نماها در MVT برای دریافت درخواستهای HTTP و بازگرداندن پاسخهای HTTP استفاده میشوند.
در MVC باید تمام کدهای خاص کنترل را بنویسید، در حالی که در MVT باید تمام کدهای خاص کنترل را در اجزای نما و قالب بنویسید.
MVC به شدت وابسته است، در حالی که MVT به طور آزاد وابسته است.
در MVC تغییرات دشوار است، در حالی که تغییرات در MVT آسان است.
MVC برای برنامههای بزرگ مناسب است، اما MVT برای هر دو برنامه کوچک و بزرگ مناسب است.
MVC شامل هیچ نوع نقشهبرداری URL نمیشود، در حالی که در MVT نقشهبرداری الگوی URL انجام میشود.
جریان در MVC واضح و آسان برای درک است، در حالی که MVT گاهی اوقات سختتر برای درک است.
سوال 22: ORM جنگو چیست؟
ORM که همچنین به نام مدل رابطهای شیء (Object Relational Mapper) شناخته میشود، به ما این امکان را میدهد که با پایگاه داده خود تعامل داشته باشیم. این امکان را به ما میدهد که اشیاء را اضافه، حذف، تغییر و جستجو کنیم. جنگو از یک API انتزاعی پایگاه داده به نام ORM برای تعامل با مدلهای پایگاه داده استفاده میکند. برای استفاده از مدلهای رابطهای جنگو، ابتدا باید یک پروژه و اپلیکیشن فعال داشته باشیم. مدلها میتوانند در فایل `app/models.py` پس از شروع یک اپلیکیشن ایجاد شوند. ORM جنگو میتواند با اجرای دستور زیر در دایرکتوری پروژه ما در دسترس قرار گیرد:
python manage.py shell
این دستور یک کنسول پایتون باز میکند که میتوانیم در آن اشیاء را اضافه، بازیابی، تغییر و حذف کنیم.
سوال 23: سوپرکاربر (Superuser) چیست؟
سوپرکاربر کاربری با بیشترین سطح دسترسی است که اجازه ایجاد، خواندن، حذف و بهروزرسانی در صفحه مدیریت را دارد که شامل رکوردهای مدل و سایر کاربران است. کاربران جنگو به پنل مدیریت دسترسی دارند. قبل از استفاده از این ویژگی، باید پروژه خود را مایگریت کنید؛ در غیر این صورت، پایگاه داده سوپرکاربر ایجاد نخواهد شد. برای ایجاد یک سوپرکاربر، ابتدا به دایرکتوری مورد نظر بروید و دستور زیر را اجرا کنید:
python manage.py createsuperuser
سوال 24: قالب جینجا (Jinja) چیست؟
جینجا که به جینجا2 نیز معروف است، آخرین نسخه آن است. این یک موتور قالبسازی است که به شما امکان میدهد HTML ،XML و انواع دیگر نشانهگذاریها را بسازید. جینجا2 با ویژگیهایی مانند:
- **پنهانسازی HTML:** به طور خودکار HTML را پنهان میکند زیرا کاراکترهای <، >، و & در قالبها دارای مقادیر خاصی هستند و استفاده از متن معمولی میتواند به حملات XSS منجر شود که جینجا به طور خودکار با آنها برخورد میکند.
- اجرا در محیط Sandbox: این چارچوبی برای اتوماسیون فرآیند تست در یک محیط محافظتشده (یا sandbox) است.
- وراثت قالب: تولید قالبهای HTML را بسیار سریعتر از موتور پیشفرض انجام میدهد.
- اشکالزدایی آسانتر: در مقایسه با موتور پیشفرض، اشکالزدایی آسانتر است.
سوال 25: `csrf_token` به چه معناست؟
حملات درخواستهای متقابل سایت (CSRF) یکی از آسیبپذیریهای جدی است که میتواند برای انجام همه چیز از تغییر اطلاعات کاربر بدون اطلاع آنها تا به دست آوردن کنترل کامل از حساب کاربری آنها استفاده شود. برای جلوگیری از حملات مخرب، جنگو یک برچسب توکن `% csrf_token %` ارائه میدهد که در فرم پیادهسازی میشود. هنگام تولید صفحه در سرور، یک توکن تولید میشود و اطمینان حاصل میشود که هر درخواست برگشتی با این توکن تطبیق داده میشود. توکن در درخواستهای ورودی گنجانده نمیشود و بنابراین اجرا نمیشود.
سوال 26: میانهافزارها (Middlewares) در جنگو چه کاربردی دارند؟
میانهافزارها پلاگینهای سبکوزن در جنگو هستند که برای حفظ امنیت اپلیکیشن در طول پردازش درخواست و پاسخ استفاده میشوند. میانهافزار اپلیکیشن برای انجام یک وظیفه خاص استفاده میشود. امنیت، نشست، حفاظت از CSRF و احراز هویت مسئول انجام برخی از عملکردهای خاص هستند. امنیت اپلیکیشن با استفاده از کامپوننت میانهافزار، مانند `AuthenticationMiddleware` که با درخواستهای کاربر از طریق نشستها مرتبط است، حفظ میشود.
سوال 27: سیگنالها (Signals) چیستند؟
سیگنالها برای اقدام به عمل در پاسخ به تغییر یا ایجاد یک ورودی پایگاه داده استفاده میشوند. این امکانات به ما کمک میکنند تا رویدادها را با عمل خود متصل کنیم. میتوانیم متدهایی ایجاد کنیم که سیگنال را هنگام فراخوانی اجرا کنند. به عنوان مثال، به محض اینکه یک نمونه کاربری جدید در پایگاه داده ایجاد شد، ممکن است بخواهید یک نمونه پروفایل ایجاد کنید. به طور کلی، سه نوع سیگنال وجود دارد:
- pre_delete/post_delete: این سیگنال قبل از اینکه متد `remove()` برای حذف یک نمونه مدل استفاده شود، پرتاب میشود.
- pre_init/post_init: این سیگنال قبل/بعد از ایجاد یک مدل (متد `__init__()`) پرتاب میشود.
- pre_save/post_save: این سیگنال قبل/بعد از متد `save()` کار میکند.
سوال 28: Media Root چیست؟
Media root برای بارگذاری محتوای تولید شده توسط کاربر استفاده میشود. میتوانیم فایلهای رسانهای بارگذاری شده توسط کاربر را به صورت محلی ارائه کنیم، با استفاده از تنظیمات `MEDIA_ROOT` و `MEDIA_URL`. فایلهایی که توسط کاربر بارگذاری میشوند به عنوان رسانه یا فایلهای رسانهای در جنگو شناخته میشوند. اولین قدم این است که کد زیر را به فایل `settings.py` اضافه کنیم:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/
- **MEDIA_ROOT:** مسیر سرور برای ذخیره فایلها در کامپیوتر است.
- **MEDIA_URL:** URL مربوط به مرورگر برای دسترسی به فایلها از طریق HTTP است.
سوال 29: چگونه میتوانید فایلها را در اپلیکیشن خود شامل و به ارث ببرید؟
با استفاده از برچسب `extends` در قالبها، میتوانیم فایلهای خود را در جنگو به ارث ببریم. برچسب `extends` برای ارث بردن از این قالبها استفاده میشود. نحو ارث بردن از این قالبها به صورت زیر است:
{% extends 'template_name.html' %}
این نحو به ما کمک میکند تا تمام عناصر یک فایل HTML را به دیگری اضافه کنیم بدون اینکه نیاز به کپی و چسباندن کد کامل داشته باشیم. قالبهای جنگو نه تنها به ما امکان میدهند که متغیرها را از نما به قالب منتقل کنیم، بلکه برخی قابلیتهای برنامهنویسی مانند حلقهها، نظرات و گسترشها را نیز فراهم میکنند.
سوال 30: چگونه پروژه جنگو خود را به پایگاه داده متصل میکنید؟
ما نیاز داریم تا پایگاه داده خود را در فایل `settings.py` پیکربندی کنیم. به طور پیشفرض، SQLite در آنجا ذکر شده است و ما باید این تنظیم را به طور مناسب تغییر دهیم، مانند Postgres، MongoDB و MySQL.
سوال 31: استراتژیهای کش در جنگو را توضیح دهید
جنگو سیستم کش داخلی خود را دارد که به ما این امکان را میدهد تا صفحات دینامیک خود را ذخیره کنیم تا دیگر نیازی به درخواست مجدد آنها نداشته باشیم. مزیت فریمورک کش دجانگو این است که به ما اجازه میدهد دادههایی مانند قالبها یا کل سایت را کش کنیم. جنگو چهار نوع گزینه کش مختلف را ارائه میدهد:
- **کش سایتمحور (per-site cache):** سادهترین روش برای تنظیم و کش کردن کل وبسایت شما است.
- **کش نمای صفحه (per-view cache):** میتوان از کش نمای صفحه برای کش کردن نمایهای فردی استفاده کرد.
- **کش قطعههای قالب (Template fragment caching):** این روش به شما اجازه میدهد تنها بخشهایی از یک قالب را کش کنید.
- **API کش سطح پایین (low-level cache API):** این امکان را به شما میدهد که به صورت دستی اشیاء خاصی را در کش تنظیم، بازیابی و نگهداری کنید.
سوال 32: کلاسهای استثنا (Exception) موجود در جنگو را نام ببرید
استثنا یک وقوع نادر است که باعث میشود برنامه شکست بخورد. جنگو کلاسهای استثنای خود را برای مقابله با این وضعیت دارد و همچنین تمام استثنایهای بنیادی پایتون را پشتیبانی میکند. برخی از کلاسهای استثنا به شرح زیر است:
- MultipleObjectsReturned:** این خطا زمانی پرتاب میشود که تنها یک مورد پیشبینی شده باشد اما چندین شیء برگردانده شده باشد.
- ViewDoesNotExist:** زمانی که نمای درخواستشده وجود ندارد، جنگو.URLs این استثنا را پرتاب میکند.
- PermissionDenied:** این خطا زمانی فعال میشود که کاربر اجازه لازم برای انجام فعالیت درخواستشده را نداشته باشد.
- SuspiciousOperation:** این خطا زمانی پرتاب میشود که تنها یک مورد انتظار است اما چندین مورد برگردانده شود.
- ValidationError:** این خطا زمانی فعال میشود که اعتبارسنجی دادهها در فرم یا فیلد مدل شکست بخورد.
- FieldDoesNotExist:** این خطا زمانی پرتاب میشود که فیلد درخواستشده وجود نداشته باشد.
- ObjectDoesNotExist:** کلاس پایه برای استثناهای DoesNotExist.
- AppRegistryNotReady:** این خطا زمانی فعال میشود که تلاش میشود تا از مدلها قبل از تکمیل فرآیند بارگذاری اپلیکیشن استفاده شود.
- EmptyResultSet:** اگر یک درخواست هیچ نتیجهای برنگرداند، این استثنا پرتاب میشود.
سوال 33: NoSQL چیست و آیا جنگو از NoSQL پشتیبانی میکند؟
NoSQL، که به عنوان پایگاه داده غیررابطهای نیز شناخته میشود، دادهها را به صورت غیرجدولی ذخیره میکند و به جای آن، دادهها را در قالب مدل ذخیرهسازی که برای نیازهای خاص نوع داده بهینه شده است، ذخیره میکند. انواع پایگاههای داده NoSQL شامل پایگاههای داده مستند، پایگاههای داده گرافی، پایگاههای داده ستونهای وسیع و پایگاههای داده کلید-مقدار هستند.
خیر، جنگو به طور رسمی از پایگاههای داده NoSQL مانند CouchDB، Redis، Neo4j، MongoDB و غیره پشتیبانی نمیکند.
سوال 34: انواع مختلف وراثت مدلها در جنگو چیستند؟
جنگو از ۳ نوع وراثت پشتیبانی میکند. آنها عبارتند از:
- کلاسهای پایه انتزاعی (Abstract base classes)
- وراثت چندجدولی (Multi-table Inheritance)
- مدلهای پروکسی (Proxy models)
سوال 35: چه پایگاههای دادهای توسط دجانگو پشتیبانی میشوند؟
پایگاههای دادهای که دجانگو از آنها پشتیبانی میکند شامل SQLite (پیشفرض)، Oracle، PostgreSQL و MySQL هستند. دجانگو همچنین از برخی بستههای شخص ثالث برای مدیریت پایگاههای داده شامل Microsoft SQL Server، IBM DB2، SAP SQL Anywhere و Firebird استفاده میکند. دجانگو به طور رسمی از پایگاههای داده NoSQL مانند CouchDB، Redis، Neo4j، MongoDB و غیره پشتیبانی نمیکند.
سوال 36: چگونه میتوانید تمام موارد موجود در جدول پایگاه داده را جستجو کنید؟
XYZ.objects.all()
که در آن `XYZ` کلاسی است که در مدل ایجاد شده است.
سوال 37: چگونه میتوانید یک مورد را از جدول پایگاه داده جستجو کنید؟
XYZ.objects.get(id=1)
که در آن `XYZ` کلاسی است که در مدل ایجاد شده است.
سوال 38: فریمورک REST جنگو چیست؟
فریمورک REST یک استاندارد مبتنی بر HTTP برای فهرستکردن، تولید، تغییر و حذف دادهها در سرور شما است. فریمورک جنگو REST که به اختصار DRF نیز شناخته میشود، یک ابزار قدرتمند و انعطافپذیر است که بر روی فریمورک وب جنگو ساخته شده و ایجاد رابطهای REST را با کاهش میزان کد مورد نیاز سادهتر میکند. مزایای استفاده از فریمورک REST به شرح زیر است:
- API با قابلیت مرور وب:** که کارایی زیادی برای توسعهدهنده فراهم میکند.
- سیاستهای احراز هویت:** که شامل بستههای OAuth1 و OAuth2 است.
- پشتیبانی از منابع داده ORM و غیر ORM:** این فریمورک از هر دو نوع منابع داده پشتیبانی میکند.
- مستندسازی گسترده و پشتیبانی جامعه:** دارای مستندات گسترده و پشتیبانی عالی از سوی جامعه کاربران.
سوال 39: چرخه حیات پاسخ (Response) جنگو را توضیح دهید
چرخه حیات پاسخ جنگو مسئول تبادل دادهها بین مشتریان و سرورها با کمک شیء `HttpRequest` است. هر بار که یک درخواست از سوی مشتری به سرور ارسال میشود، اطلاعات از طریق سیستم با استفاده از اشیاء درخواست و پاسخ منتقل میشود. این اشیاء درخواست/پاسخ از طریق وب منتقل میشوند و شامل متادادههای درخواست مانند تصاویر، HTML، CSS و جاوااسکریپت هستند. سپس این دادهها توسط جنگو بارگذاری شده و به کاربر ارائه میشوند. جنگو `HttpRequest` را به عنوان اولین پارامتر به متد نمای (view) ارسال میکند. مسئولیت هر نما (view) این است که یک شیء `HttpResponse` برگرداند.
سوال 40: چگونه میتوانید اقلام را در مدل فیلتر کنید؟
برای فیلتر کردن اقلام موجود در پایگاه داده، از `QuerySet` استفاده میکنیم. `QuerySet` یک مجموعه دادههای پایگاه داده است که به صورت لیستی از اشیاء ساخته میشود. `QuerySet` کار ما را با اجازه دادن به فیلتر و سازماندهی دادهها آسانتر میکند و همچنین بازیابی اطلاعات مورد نیاز را با کمک `QuerySet` سادهتر میکند. ما میتوانیم دادههای خود را با کمک متد `filter()` که به ما اجازه میدهد فقط ردیفهایی که با کلمه جستجو مطابقت دارند را بازگرداند، فیلتر کنیم.
سوال 41: تفاوت بین CharField و TextField در جنگو چیست؟
`TextField` یک فیلد پایگاه داده است که برای ذخیره مقادیر بزرگ متن استفاده میشود. پاراگرافها، دادهها و موارد دیگر میتوانند در آن ذخیره شوند. `CharField` باید برای ذخیره متنهای کوچک مانند نام و نام خانوادگی استفاده شود. `CharField` یک فیلد رشتهای برای رشتههای کوچک تا بزرگ است. به طور کلی برای ذخیره رشتههای کوچک مانند نامهای اول و نامهای خانوادگی استفاده میشود. برای ذخیره متنهای بزرگتر از `TextField` استفاده میشود.
سوال 42: فایل settings.py را به طور خلاصه توضیح دهید
فایل `settings.py` اصلیترین فایل تنظیمات جنگو است. همانطور که نام آن نشان میدهد، همه چیز درون پروژه جنگو در این فایل به صورت دیکشنری یا لیست ذخیره میشود، از جمله پایگاههای داده، میانافزارها، موتورهای پشتیبان، موتورهای قالبسازی، برنامههای نصبشده، URLهای فایلهای استاتیک، پیکربندیهای URL اصلی، میزبانهای مجاز، سرورها و کلیدهای امنیتی. وقتی فایلهای جنگو شروع به کار میکنند، ابتدا فایل `settings.py` اجرا میشود و سپس پایگاههای داده و موتورهای مناسب بارگذاری میشوند تا درخواست را به سرعت سرو کنند.
سوال 43: کوکیهای جنگو چیستند؟
یک کوکی تکهای از اطلاعات است که در مرورگر مشتری ذخیره میشود. برای تنظیم و دریافت کوکیها، جنگو روشهای داخلی ارائه میدهد. برای تنظیم یک کوکی از متد `set_cookie()` و برای دریافت کوکی از متد `get()` استفاده میکنیم. همچنین میتوانیم از آرایه `request.COOKIES['key']` برای دریافت مقادیر کوکی استفاده کنیم.
سوال 44: چگونه نسخه جنگو نصبشده بر روی سیستم خود را بررسی کنیم؟
ترمینال یا خط فرمان را باز کرده و دستور زیر را وارد کنید:
py -m django --version
سوال 45: چرا جنگو به عنوان یک فریمورک با پیوند ضعیف شناخته میشود؟
جنگو به عنوان یک فریمورک با پیوند ضعیف شناخته میشود به خاطر معماری MTV آن. طراحی جنگو یک واریانت از MVC است و MTV مزیتهای زیادی دارد زیرا بهطور کامل کد سرور را از سختافزار مشتری جدا میکند. ماشین مشتری مدلها و نماها را دارد و قالبها فقط به مشتری بازگردانده میشوند. تمام عناصر معماری از یکدیگر متمایز هستند.
سوال 46: امنیت در جنگو را توضیح دهید
امنیت دادههای کاربران جنبهای مهم از طراحی هر وبسایت است. جنگو امنیت کافی در برابر تعدادی از تهدیدات رایج را فراهم میکند. ویژگیهای امنیتی جنگو به شرح زیر است:
- حفاظت در برابر اسکریپتنویسی بینسایتی (XSS)
- حفاظت در برابر تزریق SQL
- حفاظت در برابر جعل درخواست بینسایتی (CSRF)
- اجبار به استفاده از SSL/HTTPS
- امنیت نشستها
- حفاظت در برابر کلیکجکینگ
- اعتبارسنجی هدر میزبان
سوال 47: احراز هویت کاربران در جنگو را توضیح دهید
جنگو با یک سیستم احراز هویت پیکربندی شده بهطور پیشفرض برای مدیریت اشیاء مانند کاربران، گروهها، مجوزها و غیره ارائه میشود. هسته سیستم احراز هویت از اشیاء کاربران تشکیل شده است. این سیستم نه تنها کاربران را احراز هویت میکند بلکه به آنها مجوز میدهد. علاوه بر استفاده از پیشفرض، میتوانیم از برنامههای وب مختلف به جای سیستم پیشفرض برای فعالسازی بیشتر احراز هویت کاربران استفاده کنیم. اشیاء سیستم پیشفرض به شرح زیر است:
- کاربران
- مجوزها
- گروهها
- سیستم هشینگ رمز عبور
- اعتبارسنجی فرمها
- یک سیستم پسزمینه قابل پلاگین
سوال 48: تابع `Django.shortcuts.render` چیست؟
ما به تابع `render` نیاز داریم زمانی که یک تابع نمای (view) یک وبسایت را بهعنوان یک `HttpResponse` بهجای یک رشته ساده تولید میکند. `Render` یک میانبر برای عبور از قالب و دیکشنری داده است. این تابع قالبها را با دیکشنری دادهها با استفاده از موتور قالبسازی ترکیب میکند. در نهایت، `render()` یک `HttpResponse` حاوی متن رندر شده و دادههای مدلها را ارائه میدهد.
ترکیب:
render(request, template_name, context=None, content_type=None, status=None, using=None)
سوال 49: در جنگو، Context چیست؟
در جنگو، یک context یک دیکشنری است که کلیدها نامهای متغیر و مقادیر نمایانگر مقادیر آن متغیرها هستند. این دیکشنری یا context به قالب (template) ارائه میشود، که در نهایت محتوای پویا را با استفاده از متغیرها خروجی میدهد. بهعنوان مثال، `{var1: 11, var2: 12}` زمانی که این context را به متد render قالب ارسال میکنید، `{{ var1 }}` با 11 و `{{ var2 }}` با 12 در قالب شما جایگزین میشود.
سوال 50: در جنگو، سریالیزیشن چیست؟
سریالیزرها در فریمورک جنگو REST مسئول تبدیل اشیاء به انواع دادههایی هستند که جاوااسکریپت و فریمورکهای فرانتاند میتوانند درک کنند. پس از اعتبارسنجی دادههای ورودی، سریالیزرها همچنین امکان دسیالیزیشن را فراهم میکنند که به دادههای تجزیهشده اجازه میدهد تا دوباره به انواع پیچیده تبدیل شوند.
نتیجهگیری
در پایان، توسعهدهندگان جنگو با آمادهشدن برای مصاحبهها و مرور 50 سوال پرتکرار مصاحبه جنگو، از مباحث ابتدایی تا پیشرفته، میتوانند به موفقیت در مصاحبههای خود کمک کنند. علاوه بر این، درک معماری جنگو، ویژگیها و ساختار دایرکتوری پروژه، و همچنین راهاندازی محیط مجازی میتواند به توسعهدهندگان کمک کند تا صفحات وب پویا با کیفیت بالا بهطور مؤثر ایجاد کنند. بهطور کلی، تسلط بر مهارتهای جنگو میتواند فرصتهای شغلی جذابی را برای توسعهدهندگان فراهم کند و به رشد صنعت فناوری کمک کند.
ورود و ثبت نام برای ارسال نظر وارد شوید
¶ قالب جینجا (Jinja) رو اصلا نمیدونستم، خیلی چیزها یاد گرفتم واقعا عالی بود.
¶ متشکر از نظر شما
ورود و ثبت نام برای ارسال نظر وارد شوید