نکات کلیدی
1. پذیرش فلسفه طراحی جنگو برای کد تمیز و قابل نگهداری
"هنر ایجاد و نگهداری یک برنامه جنگو خوب این است که باید از فلسفه یونیکس کوتاه شده به گفته داگلاس مکایلروی پیروی کند: 'برنامههایی بنویسید که یک کار را انجام دهند و آن را به خوبی انجام دهند.'"
ساده نگهدارید. فلسفه طراحی جنگو بر سادگی، وضوح و اصل "خود را تکرار نکنید" (DRY) تأکید دارد. این مفاهیم را با نوشتن کد تمیز و خوانا که از دستورالعملهای سبک PEP 8 پیروی میکند، بپذیرید. از واردات نسبی صریح برای بهبود قابلیت حمل کد و جلوگیری از وابستگیهای دایرهای استفاده کنید.
معماری ماژولار. پروژه خود را به برنامههای کوچک و متمرکز تقسیم کنید که هر کدام یک عملکرد خاص را مدیریت میکنند. این کار قابلیت استفاده مجدد از کد را ترویج میدهد و پروژه شما را آسانتر برای نگهداری و مقیاسپذیری میکند. در صورت شک، به سمت ایجاد برنامههای بیشتر و کوچکتر به جای کمتر و بزرگتر تمایل داشته باشید.
اتصال شل. برای اتصال شل بین بخشهای مختلف برنامه خود تلاش کنید. این به معنای نگهداشتن منطق کسبوکار خارج از نماها، استفاده مناسب از روشها و مدیران مدل، و بهرهگیری از ویژگیهای قدرتمند ORM جنگو است. با پیروی از این اصول، پروژه جنگویی ایجاد خواهید کرد که درک، اشکالزدایی و گسترش آن در طول زمان آسانتر است.
2. راهاندازی محیط بهینه جنگو با کنترل نسخه و محیطهای مجازی
"یک مکان خوب برای ایجاد virtualenv برای این پروژه یک دایرکتوری جداگانه است که تمام virtualenvهای خود را برای تمام پروژههای پایتون خود نگه میدارید."
استفاده از کنترل نسخه. گیت محبوبترین انتخاب برای پروژههای جنگو است. یک فایل .gitignore ایجاد کنید تا فایلهای غیرضروری (مانند فایلهای پایگاه داده و کد پایتون کامپایل شده) را از کنترل نسخه مستثنی کنید. زود و اغلب با پیامهای تعهد معنادار که تغییرات انجام شده را توصیف میکنند، تعهد کنید.
محیطهای مجازی. از virtualenv برای ایجاد محیطهای پایتون ایزوله برای هر یک از پروژههای خود استفاده کنید. این کار از تضاد بین نسخههای بستهها در پروژههای مختلف جلوگیری میکند. استفاده از virtualenvwrapper را برای مدیریت آسانتر چندین محیط مجازی در نظر بگیرید.
مدیریت وابستگی. از pip و فایلهای requirements برای مدیریت وابستگیهای پروژه خود استفاده کنید. فایلهای requirements جداگانه برای محیطهای مختلف (مثلاً توسعه، تولید) ایجاد کنید تا سازگاری در سراسر استقرارها را تضمین کنید. وابستگیهای خود را به نسخههای خاصی پین کنید تا از شکستهای غیرمنتظره به دلیل بهروزرسانی بستهها جلوگیری کنید.
3. ساختاردهی پروژه و برنامههای جنگو برای مقیاسپذیری و استفاده مجدد
"رابط مدیریت جنگو برای مدیران سایت طراحی شده است، نه کاربران نهایی."
چیدمان پروژه. از یک ساختار پروژه سازگار با جداسازی واضح نگرانیها پیروی کنید. برنامههای جنگو، فایلهای پیکربندی و داراییهای استاتیک خود را در مکانهای منطقی قرار دهید. از یک رویکرد سهلایه استفاده کنید: ریشه مخزن، ریشه پروژه جنگو و ریشه پیکربندی.
طراحی برنامه. برنامههای کوچک و متمرکزی ایجاد کنید که عملکرد خاصی را مدیریت کنند. برنامههای خود را به وضوح نامگذاری کنید و از نامهای مفرد برای مدلها استفاده کنید (مثلاً "کاربر" به جای "کاربران"). برنامههای خود را تا حد امکان مستقل نگهدارید تا استفاده مجدد را ترویج دهید.
سفارشیسازی مدیریت. از رابط مدیریت جنگو برای وظایف مدیریت داخلی استفاده کنید، نه به عنوان یک رابط کاربری. مدیریت را به اندازه نیاز سفارشی کنید، اما از سفارشیسازی بیش از حد که ممکن است ارتقاء را دشوار کند، اجتناب کنید. در عوض، نماهای مدیریت سفارشی برای وظایف پیچیده مدیریتی ایجاد کنید.
4. بهرهگیری از ORM قدرتمند جنگو و بهترین شیوههای طراحی مدل
"با طراحی پایگاه داده نرمال شروع کنید و فقط در صورتی که گزینههای دیگر را به طور کامل بررسی کردهاید، از نرمالسازی خارج شوید."
طراحی مدل. با طراحی پایگاه داده نرمال شروع کنید و فقط در صورت لزوم برای دلایل عملکردی از نرمالسازی خارج شوید. از انواع فیلد مناسب استفاده کنید و از اعتبارسنجی داخلی جنگو بهره ببرید. روشهای مدل سفارشی برای منطق کسبوکار مرتبط با یک مدل خاص پیادهسازی کنید.
Querysets و مدیران. از ORM جنگو به طور مؤثر با بهرهگیری از querysets و مدیران سفارشی استفاده کنید. کوئریهای کارآمد با استفاده از select_related() و prefetch_related() بنویسید تا ضربات پایگاه داده را به حداقل برسانید. روشهای مدیر سفارشی برای کوئریهای پرکاربرد یا عملیات پیچیده ایجاد کنید.
مهاجرتها. از South (برای جنگو < 1.7) یا مهاجرتهای داخلی جنگو برای مدیریت تغییرات طرح پایگاه داده استفاده کنید. برای همه تغییرات مدل مهاجرت ایجاد و اعمال کنید و هنگام اصلاح مهاجرتهای موجود در محیطهای تولید محتاط باشید.
5. تسلط بر نماهای مبتنی بر کلاس و فرمها برای توسعه کارآمد
"قدرت CBVها به قیمت سادگی به دست میآید: CBVها با یک زنجیره ارثبری پیچیده همراه هستند که میتواند تا هشت کلاس فوقالعاده در واردات داشته باشد."
نماهای مبتنی بر کلاس (CBVها). درک کنید که چه زمانی از نماهای مبتنی بر تابع در مقابل نماهای مبتنی بر کلاس استفاده کنید. از CBVها برای عملیات CRUD رایج استفاده کنید و از mixinها برای ترکیب قابلیتهای نمای قابل استفاده مجدد استفاده کنید. منطق نما را از URLconfs جدا نگهدارید تا نگهداری بهتر شود.
فرمها. از سیستم فرم جنگو برای همه ورودیهای کاربر و اعتبارسنجی استفاده کنید. از ModelForms هنگام کار مستقیم با دادههای مدل استفاده کنید. اعتبارسنجی فیلد فرم سفارشی و روشهای پاکسازی را در صورت نیاز پیادهسازی کنید. از formsetها برای مدیریت چندین فرم در یک صفحه استفاده کنید.
قالبها. رویکردی حداقلی به قالبها دنبال کنید و منطق را در کد پایتون به جای برچسبهای قالب نگهدارید. از ارثبری قالب به طور مؤثر استفاده کنید و از برچسبها و فیلترهای قالب برای منطق ارائه استفاده کنید. از اتصال سبکها به کد پایتون به شدت اجتناب کنید.
6. پیادهسازی اقدامات امنیتی قوی برای محافظت از برنامه جنگو
"هرگز دادههای کارت اعتباری را ذخیره نکنید."
HTTPS در همه جا. از HTTPS برای کل سایت خود، از جمله منابع استاتیک استفاده کنید. سرور وب خود را برای هدایت ترافیک HTTP به HTTPS پیکربندی کنید و امنیت حمل و نقل سخت (HSTS) را پیادهسازی کنید.
تنظیمات امن. کلیدهای مخفی و اطلاعات حساس را از کنترل نسخه دور نگهدارید. از متغیرهای محیطی برای ذخیره اسرار استفاده کنید و از فایلهای تنظیمات جنگو برای مدیریت پیکربندیهای مختلف برای محیطهای توسعه، مرحلهبندی و تولید بهره ببرید.
اعتبارسنجی ورودی. همیشه ورودی کاربر را با استفاده از سیستم فرم جنگو اعتبارسنجی و پاکسازی کنید. با فایلهای آپلود شده توسط کاربر محتاط باشید و مجوزها و کنترلهای دسترسی مناسب را پیادهسازی کنید. از حفاظت داخلی جنگو در برابر آسیبپذیریهای رایج مانند CSRF، XSS و تزریق SQL استفاده کنید.
7. بهینهسازی عملکرد و مدیریت چالشهای مقیاسپذیری در پروژههای جنگو
"به یاد داشته باشید، بهینهسازی زودهنگام بد است."
بهینهسازی پایگاه داده. از شاخصهای پایگاه داده به طور عاقلانه استفاده کنید، کوئریها را بهینه کنید و از کش برای کاهش بار پایگاه داده بهره ببرید. در صورت لزوم از ویژگیهای خاص پایگاه داده (مثلاً شاخصگذاری پیشرفته PostgreSQL) استفاده کنید.
کش. کش را در سطوح مختلف پیادهسازی کنید: کش قطعه قالب، کش نما و استفاده از API کش سطح پایین. از Memcached یا Redis به عنوان پشتیبان کش خود برای عملکرد بهتر استفاده کنید.
وظایف غیرهمزمان. وظایف زمانبر را به کارگران غیرهمزمان با استفاده از Celery یا صفهای وظیفه مشابه منتقل کنید. این کار به حفظ پاسخگویی در برنامه شما کمک میکند، به ویژه برای فرآیندهای طولانیمدت.
8. بهرهگیری عاقلانه از ویژگیهای داخلی جنگو و بستههای شخص ثالث
"قدرت واقعی جنگو بیش از فقط چارچوب و مستندات موجود در http://djangoproject.com است. این انتخاب وسیع و در حال رشد بستههای جنگو و پایتون شخص ثالث ارائه شده توسط جامعه منبع باز است."
ویژگیهای داخلی. از ویژگیهای داخلی جنگو مانند رابط مدیریت، سیستم احراز هویت و ORM به طور کامل استفاده کنید. این اجزا به خوبی آزمایش شدهاند و به طور یکپارچه با بقیه چارچوب ادغام میشوند.
بستههای شخص ثالث. از اکوسیستم جامعه جنگو از بستههای شخص ثالث برای افزودن سریع عملکرد به پروژه خود استفاده کنید. بستههای محبوب شامل django-rest-framework برای ساخت APIها، django-allauth برای احراز هویت پیشرفته و django-debug-toolbar برای اشکالزدایی توسعه هستند.
راهحلهای سفارشی. هنگام در نظر گرفتن استفاده از یک بسته شخص ثالث یا ساخت یک راهحل سفارشی، عواملی مانند قابلیت نگهداری، عملکرد و نیازهای خاص پروژه را ارزیابی کنید. گاهی اوقات، یک پیادهسازی سفارشی ساده ممکن است مناسبتر از یک راهحل پیچیده شخص ثالث باشد.
9. پیادهسازی شیوههای جامع تست و مستندسازی
"تستها سنگ برنامهنویس هستند، ترس را به کسالت تبدیل میکنند." –کنت بک
استراتژی تست. یک استراتژی تست جامع که شامل تستهای واحد، تستهای یکپارچهسازی و تستهای عملکردی است، پیادهسازی کنید. از چارچوب تست جنگو و ابزارهایی مانند coverage.py برای اندازهگیری و بهبود پوشش تست استفاده کنید.
یکپارچهسازی مداوم. یک سیستم یکپارچهسازی مداوم (CI) راهاندازی کنید تا مجموعه تست شما به طور خودکار در هر تعهد کد اجرا شود. این کار به شناسایی زودهنگام باگها کمک میکند و اطمینان میدهد که کدبیس شما با تکامل آن پایدار باقی میماند.
مستندسازی. مستندات واضح و مختصر برای پروژه خود بنویسید، از جمله دستورالعملهای نصب، مراجع API و راهنماهای کاربر. از ابزارهایی مانند Sphinx برای تولید مستندات از docstringها استفاده کنید و آن را با تکامل پروژه بهروز نگهدارید.
آخرین بهروزرسانی::
نقد و بررسی
کتاب دو اسکوپ از جنگو عمدتاً نقدهای مثبتی دریافت کرده است و میانگین امتیاز 4.22 از 5 را کسب کرده است. خوانندگان از نکات ارزشمند، بهترین روشها و سبک نوشتاری واضح آن تمجید میکنند. بسیاری از آن به عنوان منبعی مفید برای توسعهدهندگان متوسط جنگو یاد میکنند، هرچند برخی معتقدند که برای مبتدیان ایدهآل نیست. این کتاب به خاطر پوشش موضوعاتی فراتر از مستندات رسمی و کمک به توسعهدهندگان برای کارآمدتر شدن، مورد تحسین قرار گرفته است. برخی انتقادات شامل کمبود عمق در برخی فصلها و احتمال قدیمی شدن سریع به دلیل تغییرات نسخههای جنگو است. به طور کلی، خوانندگان از توصیههای عملی و کاربرد واقعی کتاب قدردانی میکنند.