بهترین زبان برنامه نویسی برای مهاجرت؛ کدام زبان آینده شغلی بهتری دارد؟
برنامهنویسی در سالهای اخیر به یکی از مطمئنترین مسیرهای مهاجرت کاری تبدیل شده است. شرکتهای فناوری در کشورهای مختلف با …
جنگو یکی از فریمورکهای وب سطح بالا مبتنی بر پایتون، رایگان و متنباز است که در سال 2003 ایجاد شد. این فریمورک از الگوی معماری مدل-نمای-الگو (MVT) پیروی میکند. امروزه، تقاضا برای برنامهنویس جنگو بالاست. جنگو توسط بنیاد نرمافزاری جنگو (DSF)، یک سازمان غیرانتفاعی مستقر در ایالات متحده، مدیریت میشود. اگر شما یک مبتدی یا حتی یک حرفهای هستید که میخواهید به یک توسعهدهنده جنگو تبدیل شوید و خود را برای مصاحبههای آینده آماده کنید، رادینو سوالات و پاسخهای مصاحبه جنگو را ارائه میدهد که حتماً به شما کمک میکند تا مصاحبهتان را با موفقیت بگذرانید.
جنگو یک فریمورک توسعه وب کامل است که تسهیل در ایجاد و نگهداری صفحات وب پویا با کیفیت بالا را فراهم میکند و همچنین توسعه سریع و سبکهای عملی و منطقی را توسعه میدهد. جنگو عملیات تکراری را خودکار میکند و به این ترتیب فرآیند توسعه را با کد کمتر و کارآمدتر میسازد.
>>> Flask
- فریمورک WSGI است
- امکان استفاده از انواع مختلف پایگاه دادهها را دارد
- از SQLAlchemy استفاده میکند
- سبک کاری متنوع
- ساختار دلخواه
- پشتیبانی از API
- پشتیبانی از صفحات HTML پویا ندارد
- پشتیبانی از دیباگ بصری
- ابزار بوتاسترپ داخلی ندارد
- URL dispatcher به درخواست RESTful مربوط میشود
>>> Django
- فریمورک وب کامل است
- از انواع مختلف پایگاه دادهها پشتیبانی نمیکند
- از ORM داخلی استفاده میکند
- سبک کاری تکپارهای
- ساختار پروژه متعارف
- پشتیبانی از API ندارد
- صفحات پویا را میپذیرد
- پشتیبانی از دیباگ بصری ندارد
- ابزار بوتاسترپ داخلی (django-admin) برای شروع ساخت وباپلیکیشنها
- URL dispatcher با مستندات قوی
برخی از شرکتهایی که از فریمورک جنگو استفاده میکنند عبارتند از: اینستاگرام، موزیلا، دیسکوس، بیتباکت، Nextdoor و Clubhouse.
تفاوت اصلی بین پروژه و اپلیکیشن این است که پروژه به کل برنامه اشاره دارد در حالی که اپلیکیشن بخشی از پروژه است که به صورت مستقل قادر به انجام وظایف خاصی است.
معماری مدل-نمای-الگو (MVT) توسط جنگو استفاده میشود. این یک الگوی طراحی نرمافزار برای توسعه وب است. ساختار MVT جنگو از سه بخش تشکیل شده است:
- مدل: به عنوان رابط برای دادهها عمل میکند و مسئول مدیریت دادهها است. پایگاه دادهای مانند MySql یا Postgres که ساختار داده منطقی را پشتیبانی میکند.
- نما (View): رابط کاربری است که صفحه وب را در مرورگر شما نمایش میدهد. HTML/CSS/JavaScript و فایلهای Jinja برای نمایش آن استفاده میشود.
- الگو (Template): از بخشهای استاتیک HTML و نحوه درج محتوای دینامیک تشکیل شده است.
- تنظیمات سرور انعطافپذیر
- پایگاه داده رابطهای مدل
- ارائه شیگرا (ORM)
- سیستم قالببندی وب
- پشتیبانی از کلاسهای Middleware
- Dispatcher URL مبتنی بر Regex
- چارچوب تست واحد
- رابط مدیریت
- بهینهسازی برای SEO
- کاهش ریسکهای داخلی
- وراثت آسان
زمانی که شما یک پروژه جنگو را شروع میکنید، با برخی فایلهای پایه مانند 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`: فایل پیکربندی اپلیکیشن است که به کاربر کمک میکند تا پیکربندی برنامه خود را شامل کند.
با استفاده از دستور زیر میتوان یک پروژه جنگو ایجاد کرد:
django-admin startproject projectnameبا استفاده از دستور زیر میتوان یک اپلیکیشن جنگو ایجاد کرد:
python manage.py startapp appnameبا استفاده از دستور زیر میتوان سرور توسعه را راهاندازی کرد:
python manage.py runserverمحیط مجازی به شما این امکان را میدهد که وابستگیهای پروژههای مختلف را به صورت جداگانه مدیریت کنید و یک محیط ایزوله ایجاد کنید که به یکدیگر وابسته نباشند و به سرعت فعال و غیرفعال شوند. استفاده از محیط مجازی ایدهآل است زیرا وابستگیها و تداخلات را حذف میکند.
جنگو یک رابط مدیریت پیشفرض برای ایجاد، خواندن، بهروزرسانی و حذف اشیا مدل ارائه میدهد. این رابط مدیریت مفید به کاربر اجازه میدهد تا وظایف اداری را انجام دهد، دادههایی که اطلاعاتی درباره دادههای مدل ارائه میدهد را بخواند و یک رابط سریع برای تغییر محتویات اپلیکیشن فراهم کند.
مسیریابی یک وبسایت با URLهای آن تعیین میشود. در برنامه، ما یک ماژول یا فایل پایتون به نام `urls.py` ایجاد میکنیم. مسیر یابی وبسایت شما توسط این فایل تعیین میشود. وقتی کاربر URL خاصی را در مرورگر وارد میکند، URLهای موجود در فایل `urls.py` مقایسه میشوند و سپس پاسخ مربوط به URL درخواست شده به کاربر ارسال میشود.
نماهای جنگو یکی از ویژگیهای مهم ساختار MVT هستند. این تابع یا کلاس که یک درخواست وب را میگیرد و پاسخ وبی را برمیگرداند، طبق اسکریپت جنگو است. این پاسخ میتواند یک الگوی HTML، محتوای یک صفحه وب، سند XML، PDF یا تصاویر باشد. نما بخشی از رابط کاربری است که HTML/CSS/JavaScript را در فایلهای الگو به چیزی که در مرورگر کاربر نمایش داده میشود تبدیل میکند.
مدلها یکی از ویژگیهای داخلی جنگو هستند که منبع قطعی اطلاعاتی مانند رفتار و فیلدهای اساسی برای دادههایی که ذخیره میکنیم را فراهم میکنند. مدلها این امکان را به ما میدهند که جداول، فیلدها و محدودیتها را بسازیم و جداول را به مدلها سازماندهی کنیم. به طور کلی، هر مدل به یک جدول پایگاه داده خاص نگاشته میشود. برای استفاده از مدلهای جنگو به یک پروژه و یک اپلیکیشن نیاز دارید. همچنین، جنگو از SQL برای دسترسی به پایگاه داده استفاده میکند. SQL یک زبان پیچیده با بسیاری از کوئریها برای ایجاد، حذف، بهروزرسانی و سایر وظایف مربوط به پایگاه داده است.
python manage.py makemigrations
python manage.py migrate دستور `makemigrations` مدلهای اپلیکیشن شما را اسکن کرده و بر اساس تغییرات فایل مدلها، مجموعه جدیدی از مایگریشنها را تولید میکند. این دستور دستور SQL را تولید میکند و وقتی آن را اجرا میکنید، یک فایل مایگریشن جدید به دست میآید. پس از اجرای این دستور، هیچ جدولی در پایگاه داده ایجاد نمیشود.
اجرای دستور `migrate` به ما کمک میکند تا این تغییرات را به پایگاه دادهمان اعمال کنیم. دستور `migrate` دستورالعملهای SQL (تولید شده توسط `makemigrations`) را اجرا کرده و تغییرات پایگاه داده را اعمال میکند. پس از اجرای این دستور، جداول ایجاد خواهند شد.
نشستها تکنیکی برای پیگیری وضعیت یک سایت و مرورگر هستند. در طول نشست، دادههای کاربر در نشستها که فایلهای سمت سرور هستند، ذخیره میشود. نشست زمانی به پایان میرسد که کاربر مرورگر را ببندد یا از برنامه خارج شود. در یک نشست، میتوانیم به میزان دلخواه داده ذخیره کنیم. باید از روش `session start()` برای شروع نشست استفاده کنیم. یکی از مزایای استفاده از نشست این است که دادهها به صورت رمزگذاری شده ذخیره میشود.
فایلهای استاتیک برای ذخیره فایلهایی مانند CSS، جاوااسکریپت، تصاویر و سایر انواع فایلهای استاتیک استفاده میشوند. ما این فایلها را در پوشههای مجزایی نگه میداریم، مانند پوشه `js` که شامل تمام فایلهای جاوااسکریپت است و پوشه `images` که حاوی تمام تصاویر است. این فایلها در زیرپوشه `static` پروژه قرار دارند. جنگو بسته `django.contrib.staticfiles` را ارائه میدهد که به ما در مدیریت فایلهای استاتیک کمک میکند. کاربردهای مختلف فایلهای استاتیک عبارتند از:
- روشها و ویژگیهای فایل را روشن میکند.
- از نظر بسیاری از جنبهها مستقل از پلتفرم است، در حالی که فایلهای عمومی اینطور نیستند.
- میتوان از زیرکلاسها برای گسترش آن استفاده کرد.
قالب جنگو یک سند متنی است که برای ارائه یک ظاهر و طراحی برای وبسایت ما استفاده میشود. این سومین و مهمترین بخش از ساختار MVT جنگو است. در جنگو، یک قالب فایل HTML است که شامل HTML ،CSS و جاوااسکریپت است. فریمورک جنگو به طور کارآمد HTML صفحات وب دینامیکی را برای مشاهده کاربران نهایی مدیریت و تولید میکند. دجانگو عمدتاً یک فریمورک بکاند است، بنابراین ما از قالبها برای ارائه طراحی برای وبسایت خود استفاده میکنیم. دو روش برای استفاده از قالبها در وبسایت ما وجود دارد:
- میتوانیم از یک پوشه قالب واحد استفاده کنیم که در سرتاسر پروژه توزیع میشود.
- میتوانیم یک پوشه قالب جداگانه برای هر اپلیکیشن در پروژه خود ایجاد کنیم.
فایل `settings.py` یک فایل اصلی در پروژههای جنگو است. این فایل تمامی مقادیر پیکربندی مورد نیاز برای عملکرد وباپلیکیشن شما را نگه میدارد؛ تنظیمات پایگاه داده، پیکربندی لاگبرداری، مکانیابی فایلهای استاتیک، کلیدهای API اگر با APIهای خارجی کار میکنید و بسیاری موارد دیگر.
مدل و نما در MVC هر دو توسط کنترلر هدایت میشوند، در حالی که نماها در MVT برای دریافت درخواستهای HTTP و بازگرداندن پاسخهای HTTP استفاده میشوند.
در MVC باید تمام کدهای خاص کنترل را بنویسید، در حالی که در MVT باید تمام کدهای خاص کنترل را در اجزای نما و قالب بنویسید.
MVC به شدت وابسته است، در حالی که MVT به طور آزاد وابسته است.
در MVC تغییرات دشوار است، در حالی که تغییرات در MVT آسان است.
MVC برای برنامههای بزرگ مناسب است، اما MVT برای هر دو برنامه کوچک و بزرگ مناسب است.
MVC شامل هیچ نوع نقشهبرداری URL نمیشود، در حالی که در MVT نقشهبرداری الگوی URL انجام میشود.
جریان در MVC واضح و آسان برای درک است، در حالی که MVT گاهی اوقات سختتر برای درک است.
ORM که همچنین به نام مدل رابطهای شیء (Object Relational Mapper) شناخته میشود، به ما این امکان را میدهد که با پایگاه داده خود تعامل داشته باشیم. این امکان را به ما میدهد که اشیاء را اضافه، حذف، تغییر و جستجو کنیم. جنگو از یک API انتزاعی پایگاه داده به نام ORM برای تعامل با مدلهای پایگاه داده استفاده میکند. برای استفاده از مدلهای رابطهای جنگو، ابتدا باید یک پروژه و اپلیکیشن فعال داشته باشیم. مدلها میتوانند در فایل `app/models.py` پس از شروع یک اپلیکیشن ایجاد شوند. ORM جنگو میتواند با اجرای دستور زیر در دایرکتوری پروژه ما در دسترس قرار گیرد:
python manage.py shellاین دستور یک کنسول پایتون باز میکند که میتوانیم در آن اشیاء را اضافه، بازیابی، تغییر و حذف کنیم.
سوپرکاربر کاربری با بیشترین سطح دسترسی است که اجازه ایجاد، خواندن، حذف و بهروزرسانی در صفحه مدیریت را دارد که شامل رکوردهای مدل و سایر کاربران است. کاربران جنگو به پنل مدیریت دسترسی دارند. قبل از استفاده از این ویژگی، باید پروژه خود را مایگریت کنید؛ در غیر این صورت، پایگاه داده سوپرکاربر ایجاد نخواهد شد. برای ایجاد یک سوپرکاربر، ابتدا به دایرکتوری مورد نظر بروید و دستور زیر را اجرا کنید:
python manage.py createsuperuserجینجا که به جینجا2 نیز معروف است، آخرین نسخه آن است. این یک موتور قالبسازی است که به شما امکان میدهد HTML ،XML و انواع دیگر نشانهگذاریها را بسازید. جینجا2 با ویژگیهایی مانند:
- **پنهانسازی HTML:** به طور خودکار HTML را پنهان میکند زیرا کاراکترهای <، >، و & در قالبها دارای مقادیر خاصی هستند و استفاده از متن معمولی میتواند به حملات XSS منجر شود که جینجا به طور خودکار با آنها برخورد میکند.
- اجرا در محیط Sandbox: این چارچوبی برای اتوماسیون فرآیند تست در یک محیط محافظتشده (یا sandbox) است.
- وراثت قالب: تولید قالبهای HTML را بسیار سریعتر از موتور پیشفرض انجام میدهد.
- اشکالزدایی آسانتر: در مقایسه با موتور پیشفرض، اشکالزدایی آسانتر است.
حملات درخواستهای متقابل سایت (CSRF) یکی از آسیبپذیریهای جدی است که میتواند برای انجام همه چیز از تغییر اطلاعات کاربر بدون اطلاع آنها تا به دست آوردن کنترل کامل از حساب کاربری آنها استفاده شود. برای جلوگیری از حملات مخرب، جنگو یک برچسب توکن `% csrf_token %` ارائه میدهد که در فرم پیادهسازی میشود. هنگام تولید صفحه در سرور، یک توکن تولید میشود و اطمینان حاصل میشود که هر درخواست برگشتی با این توکن تطبیق داده میشود. توکن در درخواستهای ورودی گنجانده نمیشود و بنابراین اجرا نمیشود.
میانهافزارها پلاگینهای سبکوزن در جنگو هستند که برای حفظ امنیت اپلیکیشن در طول پردازش درخواست و پاسخ استفاده میشوند. میانهافزار اپلیکیشن برای انجام یک وظیفه خاص استفاده میشود. امنیت، نشست، حفاظت از CSRF و احراز هویت مسئول انجام برخی از عملکردهای خاص هستند. امنیت اپلیکیشن با استفاده از کامپوننت میانهافزار، مانند `AuthenticationMiddleware` که با درخواستهای کاربر از طریق نشستها مرتبط است، حفظ میشود.
سیگنالها برای اقدام به عمل در پاسخ به تغییر یا ایجاد یک ورودی پایگاه داده استفاده میشوند. این امکانات به ما کمک میکنند تا رویدادها را با عمل خود متصل کنیم. میتوانیم متدهایی ایجاد کنیم که سیگنال را هنگام فراخوانی اجرا کنند. به عنوان مثال، به محض اینکه یک نمونه کاربری جدید در پایگاه داده ایجاد شد، ممکن است بخواهید یک نمونه پروفایل ایجاد کنید. به طور کلی، سه نوع سیگنال وجود دارد:
- pre_delete/post_delete: این سیگنال قبل از اینکه متد `remove()` برای حذف یک نمونه مدل استفاده شود، پرتاب میشود.
- pre_init/post_init: این سیگنال قبل/بعد از ایجاد یک مدل (متد `__init__()`) پرتاب میشود.
- pre_save/post_save: این سیگنال قبل/بعد از متد `save()` کار میکند.
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 است.
با استفاده از برچسب `extends` در قالبها، میتوانیم فایلهای خود را در جنگو به ارث ببریم. برچسب `extends` برای ارث بردن از این قالبها استفاده میشود. نحو ارث بردن از این قالبها به صورت زیر است:
{% extends 'template_name.html' %}این نحو به ما کمک میکند تا تمام عناصر یک فایل HTML را به دیگری اضافه کنیم بدون اینکه نیاز به کپی و چسباندن کد کامل داشته باشیم. قالبهای جنگو نه تنها به ما امکان میدهند که متغیرها را از نما به قالب منتقل کنیم، بلکه برخی قابلیتهای برنامهنویسی مانند حلقهها، نظرات و گسترشها را نیز فراهم میکنند.
ما نیاز داریم تا پایگاه داده خود را در فایل `settings.py` پیکربندی کنیم. به طور پیشفرض، SQLite در آنجا ذکر شده است و ما باید این تنظیم را به طور مناسب تغییر دهیم، مانند Postgres، MongoDB و MySQL.
جنگو سیستم کش داخلی خود را دارد که به ما این امکان را میدهد تا صفحات دینامیک خود را ذخیره کنیم تا دیگر نیازی به درخواست مجدد آنها نداشته باشیم. مزیت فریمورک کش دجانگو این است که به ما اجازه میدهد دادههایی مانند قالبها یا کل سایت را کش کنیم. جنگو چهار نوع گزینه کش مختلف را ارائه میدهد:
- **کش سایتمحور (per-site cache):** سادهترین روش برای تنظیم و کش کردن کل وبسایت شما است.
- **کش نمای صفحه (per-view cache):** میتوان از کش نمای صفحه برای کش کردن نمایهای فردی استفاده کرد.
- **کش قطعههای قالب (Template fragment caching):** این روش به شما اجازه میدهد تنها بخشهایی از یک قالب را کش کنید.
- **API کش سطح پایین (low-level cache API):** این امکان را به شما میدهد که به صورت دستی اشیاء خاصی را در کش تنظیم، بازیابی و نگهداری کنید.
استثنا یک وقوع نادر است که باعث میشود برنامه شکست بخورد. جنگو کلاسهای استثنای خود را برای مقابله با این وضعیت دارد و همچنین تمام استثنایهای بنیادی پایتون را پشتیبانی میکند. برخی از کلاسهای استثنا به شرح زیر است:
- MultipleObjectsReturned:** این خطا زمانی پرتاب میشود که تنها یک مورد پیشبینی شده باشد اما چندین شیء برگردانده شده باشد.
- ViewDoesNotExist:** زمانی که نمای درخواستشده وجود ندارد، جنگو.URLs این استثنا را پرتاب میکند.
- PermissionDenied:** این خطا زمانی فعال میشود که کاربر اجازه لازم برای انجام فعالیت درخواستشده را نداشته باشد.
- SuspiciousOperation:** این خطا زمانی پرتاب میشود که تنها یک مورد انتظار است اما چندین مورد برگردانده شود.
- ValidationError:** این خطا زمانی فعال میشود که اعتبارسنجی دادهها در فرم یا فیلد مدل شکست بخورد.
- FieldDoesNotExist:** این خطا زمانی پرتاب میشود که فیلد درخواستشده وجود نداشته باشد.
- ObjectDoesNotExist:** کلاس پایه برای استثناهای DoesNotExist.
- AppRegistryNotReady:** این خطا زمانی فعال میشود که تلاش میشود تا از مدلها قبل از تکمیل فرآیند بارگذاری اپلیکیشن استفاده شود.
- EmptyResultSet:** اگر یک درخواست هیچ نتیجهای برنگرداند، این استثنا پرتاب میشود.
NoSQL، که به عنوان پایگاه داده غیررابطهای نیز شناخته میشود، دادهها را به صورت غیرجدولی ذخیره میکند و به جای آن، دادهها را در قالب مدل ذخیرهسازی که برای نیازهای خاص نوع داده بهینه شده است، ذخیره میکند. انواع پایگاههای داده NoSQL شامل پایگاههای داده مستند، پایگاههای داده گرافی، پایگاههای داده ستونهای وسیع و پایگاههای داده کلید-مقدار هستند.
خیر، جنگو به طور رسمی از پایگاههای داده NoSQL مانند CouchDB، Redis، Neo4j، MongoDB و غیره پشتیبانی نمیکند.
جنگو از ۳ نوع وراثت پشتیبانی میکند. آنها عبارتند از:
- کلاسهای پایه انتزاعی (Abstract base classes)
- وراثت چندجدولی (Multi-table Inheritance)
- مدلهای پروکسی (Proxy models)
پایگاههای دادهای که دجانگو از آنها پشتیبانی میکند شامل SQLite (پیشفرض)، Oracle، PostgreSQL و MySQL هستند. دجانگو همچنین از برخی بستههای شخص ثالث برای مدیریت پایگاههای داده شامل Microsoft SQL Server، IBM DB2، SAP SQL Anywhere و Firebird استفاده میکند. دجانگو به طور رسمی از پایگاههای داده NoSQL مانند CouchDB، Redis، Neo4j، MongoDB و غیره پشتیبانی نمیکند.
XYZ.objects.all()که در آن `XYZ` کلاسی است که در مدل ایجاد شده است.
XYZ.objects.get(id=1)که در آن `XYZ` کلاسی است که در مدل ایجاد شده است.
فریمورک REST یک استاندارد مبتنی بر HTTP برای فهرستکردن، تولید، تغییر و حذف دادهها در سرور شما است. فریمورک جنگو REST که به اختصار DRF نیز شناخته میشود، یک ابزار قدرتمند و انعطافپذیر است که بر روی فریمورک وب جنگو ساخته شده و ایجاد رابطهای REST را با کاهش میزان کد مورد نیاز سادهتر میکند. مزایای استفاده از فریمورک REST به شرح زیر است:
- API با قابلیت مرور وب:** که کارایی زیادی برای توسعهدهنده فراهم میکند.
- سیاستهای احراز هویت:** که شامل بستههای OAuth1 و OAuth2 است.
- پشتیبانی از منابع داده ORM و غیر ORM:** این فریمورک از هر دو نوع منابع داده پشتیبانی میکند.
- مستندسازی گسترده و پشتیبانی جامعه:** دارای مستندات گسترده و پشتیبانی عالی از سوی جامعه کاربران.
چرخه حیات پاسخ جنگو مسئول تبادل دادهها بین مشتریان و سرورها با کمک شیء `HttpRequest` است. هر بار که یک درخواست از سوی مشتری به سرور ارسال میشود، اطلاعات از طریق سیستم با استفاده از اشیاء درخواست و پاسخ منتقل میشود. این اشیاء درخواست/پاسخ از طریق وب منتقل میشوند و شامل متادادههای درخواست مانند تصاویر، HTML، CSS و جاوااسکریپت هستند. سپس این دادهها توسط جنگو بارگذاری شده و به کاربر ارائه میشوند. جنگو `HttpRequest` را به عنوان اولین پارامتر به متد نمای (view) ارسال میکند. مسئولیت هر نما (view) این است که یک شیء `HttpResponse` برگرداند.
برای فیلتر کردن اقلام موجود در پایگاه داده، از `QuerySet` استفاده میکنیم. `QuerySet` یک مجموعه دادههای پایگاه داده است که به صورت لیستی از اشیاء ساخته میشود. `QuerySet` کار ما را با اجازه دادن به فیلتر و سازماندهی دادهها آسانتر میکند و همچنین بازیابی اطلاعات مورد نیاز را با کمک `QuerySet` سادهتر میکند. ما میتوانیم دادههای خود را با کمک متد `filter()` که به ما اجازه میدهد فقط ردیفهایی که با کلمه جستجو مطابقت دارند را بازگرداند، فیلتر کنیم.
`TextField` یک فیلد پایگاه داده است که برای ذخیره مقادیر بزرگ متن استفاده میشود. پاراگرافها، دادهها و موارد دیگر میتوانند در آن ذخیره شوند. `CharField` باید برای ذخیره متنهای کوچک مانند نام و نام خانوادگی استفاده شود. `CharField` یک فیلد رشتهای برای رشتههای کوچک تا بزرگ است. به طور کلی برای ذخیره رشتههای کوچک مانند نامهای اول و نامهای خانوادگی استفاده میشود. برای ذخیره متنهای بزرگتر از `TextField` استفاده میشود.
فایل `settings.py` اصلیترین فایل تنظیمات جنگو است. همانطور که نام آن نشان میدهد، همه چیز درون پروژه جنگو در این فایل به صورت دیکشنری یا لیست ذخیره میشود، از جمله پایگاههای داده، میانافزارها، موتورهای پشتیبان، موتورهای قالبسازی، برنامههای نصبشده، URLهای فایلهای استاتیک، پیکربندیهای URL اصلی، میزبانهای مجاز، سرورها و کلیدهای امنیتی. وقتی فایلهای جنگو شروع به کار میکنند، ابتدا فایل `settings.py` اجرا میشود و سپس پایگاههای داده و موتورهای مناسب بارگذاری میشوند تا درخواست را به سرعت سرو کنند.
یک کوکی تکهای از اطلاعات است که در مرورگر مشتری ذخیره میشود. برای تنظیم و دریافت کوکیها، جنگو روشهای داخلی ارائه میدهد. برای تنظیم یک کوکی از متد `set_cookie()` و برای دریافت کوکی از متد `get()` استفاده میکنیم. همچنین میتوانیم از آرایه `request.COOKIES['key']` برای دریافت مقادیر کوکی استفاده کنیم.
ترمینال یا خط فرمان را باز کرده و دستور زیر را وارد کنید:
py -m django --versionجنگو به عنوان یک فریمورک با پیوند ضعیف شناخته میشود به خاطر معماری MTV آن. طراحی جنگو یک واریانت از MVC است و MTV مزیتهای زیادی دارد زیرا بهطور کامل کد سرور را از سختافزار مشتری جدا میکند. ماشین مشتری مدلها و نماها را دارد و قالبها فقط به مشتری بازگردانده میشوند. تمام عناصر معماری از یکدیگر متمایز هستند.
امنیت دادههای کاربران جنبهای مهم از طراحی هر وبسایت است. جنگو امنیت کافی در برابر تعدادی از تهدیدات رایج را فراهم میکند. ویژگیهای امنیتی جنگو به شرح زیر است:
- حفاظت در برابر اسکریپتنویسی بینسایتی (XSS)
- حفاظت در برابر تزریق SQL
- حفاظت در برابر جعل درخواست بینسایتی (CSRF)
- اجبار به استفاده از SSL/HTTPS
- امنیت نشستها
- حفاظت در برابر کلیکجکینگ
- اعتبارسنجی هدر میزبان
جنگو با یک سیستم احراز هویت پیکربندی شده بهطور پیشفرض برای مدیریت اشیاء مانند کاربران، گروهها، مجوزها و غیره ارائه میشود. هسته سیستم احراز هویت از اشیاء کاربران تشکیل شده است. این سیستم نه تنها کاربران را احراز هویت میکند بلکه به آنها مجوز میدهد. علاوه بر استفاده از پیشفرض، میتوانیم از برنامههای وب مختلف به جای سیستم پیشفرض برای فعالسازی بیشتر احراز هویت کاربران استفاده کنیم. اشیاء سیستم پیشفرض به شرح زیر است:
- کاربران
- مجوزها
- گروهها
- سیستم هشینگ رمز عبور
- اعتبارسنجی فرمها
- یک سیستم پسزمینه قابل پلاگین
ما به تابع `render` نیاز داریم زمانی که یک تابع نمای (view) یک وبسایت را بهعنوان یک `HttpResponse` بهجای یک رشته ساده تولید میکند. `Render` یک میانبر برای عبور از قالب و دیکشنری داده است. این تابع قالبها را با دیکشنری دادهها با استفاده از موتور قالبسازی ترکیب میکند. در نهایت، `render()` یک `HttpResponse` حاوی متن رندر شده و دادههای مدلها را ارائه میدهد.
ترکیب:
render(request, template_name, context=None, content_type=None, status=None, using=None)در جنگو، یک context یک دیکشنری است که کلیدها نامهای متغیر و مقادیر نمایانگر مقادیر آن متغیرها هستند. این دیکشنری یا context به قالب (template) ارائه میشود، که در نهایت محتوای پویا را با استفاده از متغیرها خروجی میدهد. بهعنوان مثال، `{var1: 11, var2: 12}` زمانی که این context را به متد render قالب ارسال میکنید، `{{ var1 }}` با 11 و `{{ var2 }}` با 12 در قالب شما جایگزین میشود.
سریالیزرها در فریمورک جنگو REST مسئول تبدیل اشیاء به انواع دادههایی هستند که جاوااسکریپت و فریمورکهای فرانتاند میتوانند درک کنند. پس از اعتبارسنجی دادههای ورودی، سریالیزرها همچنین امکان دسیالیزیشن را فراهم میکنند که به دادههای تجزیهشده اجازه میدهد تا دوباره به انواع پیچیده تبدیل شوند.
در پایان، توسعهدهندگان جنگو با آمادهشدن برای مصاحبهها و مرور 50 سوال پرتکرار مصاحبه جنگو، از مباحث ابتدایی تا پیشرفته، میتوانند به موفقیت در مصاحبههای خود کمک کنند. علاوه بر این، درک معماری جنگو، ویژگیها و ساختار دایرکتوری پروژه، و همچنین راهاندازی محیط مجازی میتواند به توسعهدهندگان کمک کند تا صفحات وب پویا با کیفیت بالا بهطور مؤثر ایجاد کنند. بهطور کلی، تسلط بر مهارتهای جنگو میتواند فرصتهای شغلی جذابی را برای توسعهدهندگان فراهم کند و به رشد صنعت فناوری کمک کند.
نظرات 2
برای ارسال نظر وارد حساب کاربری شوید.
¶ قالب جینجا (Jinja) رو اصلا نمیدونستم، خیلی چیزها یاد گرفتم واقعا عالی بود.
¶ متشکر از نظر شما
برای ارسال نظر وارد حساب کاربری شوید.