11 اشتباه برنامه نویسان جنگو
# جنگو چیست؟
در این آموزش ، ما برخی از اشتباهات رایج را که اغلب توسط توسعه دهندگان جنگو مرتکب می شوند و راه های جلوگیری از آنها را بررسی می کنیم. این آموزش حتی اگر شما یک توسعه دهنده ماهر جنگو هستید مفید است زیرا اشتباهات، مانند نگهداری فایل تنظیمات غیرقابل کنترل بزرگ یا نامگذاری اشتباه assetها، فقط محدود به توسعه دهندگان جدید نیست.
جنگو یک چارچوب وب پایتون رایگان و منبع باز است که چالش های مشترک توسعه را حل می کند و به شما امکان می دهد برنامه های انعطاف پذیر و با ساختار خوب بسازید. جنگو دارای بسیاری از ویژگی های مدرن خارج از جعبه است. برای من شخصاً، ویژگیهای Admin ، Object Relational Mapping (ORM) ، Routing و Templating باعث شده Django اولین انتخاب من باشد زیرا برنامه ها نیاز به کار زیادی دارند و در حالی که من تا آنجا که هر توسعه دهنده ای از کار خود لذت می برم، می خواهم هزینه کنم. تا حد امکان زمان کمی برای انجام این کارهای تکراری اساسی وجود دارد. جنگو به شما امکان می دهد همه این کارها را بدون آسیب رساندن به انعطاف پذیری انجام دهید.
دوره پیشنهادی: دوره اول آموزش جنگو(django)
# اختراع دوباره چرخ
جنگو قابلیت های بسیاری دارد و برخی دیگر قابلیت ها از سوی شرکت های شخص ثالث ارائه می شوند. همچنین راه حل بسیاری از مسائل کار با جنگو در گوگل وجود دارد.
کاتالوگ آنلاین «پروژه های جنگو» با 3200 پروژه خود نیز راهنمای خوبی است. چند نمونه پکیج جالب از دو صفحه این کاتالوگ در این جا آورده شدند:
- جستجوی ماژولار هیستک جنگو
- تگینگ ساده جنگو تگیت
- مجوز های اشیاء جنگو گاردین
- جریان فعالیت جنگو که طبق سایت شما فعالیت به جریان می اندازد. کاربران می توانند فعالیت ها را دنبال کنند.
# ساختار نرم افزار مونولیث
جنگو چهارچوب منعطفی است و نیازمند روش خاصی برای طراحی نرم افزار وب نیست. اما کهنه کاران جنگو راه و رسم خاصی دارند.
پروژه جنگو واحد اصلی نرم افزار وب جنگوست که از یک یا چند app تشکیل شده است. app جنگو پکیج مستقلی است که باید یک وظیفه داشته باشد. مثلا یک app بلاگ، یک app مختص مدیریت کاربران و یا یک app برای مدیریت کامنتها.
appهای جنگو حاوی ماژول های پایتون، ماژول های اختصاصی جنگو، فایل های استاتیک، فایلهای migrations و انتقالات پایگاه داده، دستورات مدیریتی و تست های واحد هستند.
بهتر است پروژه خود را به نرم افزار های کوچک قابل استفاده مجدد تقسیم کنید:
\ecommerce_project <= This is your Django project
\cart <= This is a Django cart app
\checkout <= This is a Django checkout app
\products <= This is a Django products app
db.sqlite3 <= Your project database
manage.py <= Django project management utility
استفاده از چنین ساختاری تصویر کلی نرم افزار را به شما و تیمتان نشان می دهد. به علاوه می توان از app در پروژه دیگری دوباره استفاده کرد و حتی آن را به عنوان ماژولی منبع باز در پکیج منیجر پایتون منتشر کنید.
# مدل های لاغر
معماری جنگو Model-Template-View و یا Model-View-Template است.
بخش Model که جایگاه منطق است به صورت models.py تعریف شده و در دایرکتوری app قرار دارد. همچنین حاوی کوئری های پایگاه داده است که نتایج را به view و لایه های template می فرستند.
viewها پر از کد هایی هستند که با تعامل کاربر سر و کار دارند و به صورت views.py تعریف می شوند.
اگر منطق app خود را در مدل ها ننوشتید و از viewها استفاده کردید یعنی کد خود را در مدلی براساس view نوشتید. این امر viewها را به اصطلاح چاق و مدل را لاغر می کند.
مدل ها باید چاق و viewها باید لاغر باشند.
تبدیل منطق به مدل های کوچک تر به شما اجازه می دهد تا چندین بار از سورس های گوناگون از آن استفاده کنید. همچنین لازم نیست کدی را کپی کرد. به علاوه می توانید کد خود را تست کنید چون منطق ثابت است.
# تعداد زیاد کوئری در view یا کوئری های بهینه سازی نشده
اغلب از ORM جنگو به خاطر کوئری های زیاد و بهینه سازی نشده آن انتقاد می کنند. اما این مسئله در ORM دیگر چهارچوب ها نیز وجود دارد. مشکل اصلی این است که ما اغلب از مشکلات فانکشنها و سورس آن ها بی اطلاعیم. ابتدا باید مشکل را پیدا کرد و سپس سراغ راه حل رفت.
راه حل های مختلفی وجود دارد که برخی در این قسمت آورده شدند:
- ترمیم کوئری های ORM آسیب دیده
- بهبود سازی و اصلاح کوئری های ORM
- اضافه نمودن کشینگ به قسمت های درست
- تامین بیشتر منابع
django-debug-toolbar ابزار کارآمدی است. از این ابزار جهت بررسی مشکلات عملکرد کوئری های زبان پرس و جو ساختاری، قالب ها و کش استفاده می شود. این پکیج کوچک به شما در شناسایی سریع مشکلات کمک کرده و استفاده از آن پیشنهاد می شود.
# نیفزودن index به مدل ها
حتی حرفه ای های کار با جنگو index را فراموش می کنند. لطفا تو فراموشش نکن! البته indexهای زیاد ورود اطلاعات، به روز رسانی ها و حذف را در دیتابیس کند خواهند کرد.
به یاد داشته باشید که برای فیلتر به index نیاز است و با تحلیل کوئریها میتوانید متوجه شوید که کجا index لازم دارد.
# استفاده از محیط اصلی پایتون برای وابستگی های پروژه
از محیط اصلی پایتون برای وابستگی به پروژه استفاده نکنید، زیرا می تواند تداخل در وابستگیها ایجاد کند. پایتون نمی تواند از چندین نسخه یک پکیج به طور همزمان استفاده کند. اگر پروژه های مختلف به نسخه های مختلف ناسازگار یک پکیج نیاز داشته باشند، ممکن است مشکل باشد.
ویدیو پیشنهادی: آموزش محیط های مجازی virtualenv در پایتون
این اشتباه معمولاً توسط توسعه دهندگان جدید پایتون و جنگو انجام می شود که از ویژگی های جداسازی محیط پایتون اطلاع ندارند.
راههای زیادی برای جداسازی محیط وجود دارد، اما رایج ترین آنها عبارتند از:
+ virtualenv: یک پکیج پایتون که یک محیط پایتون ایجاد می کند و دارای اسکریپت هایی برای فعال سازی محیط و مدیریت پکیجهای پایتون نصب شده در محیط است. این روش مورد علاقه من است زیرا ساده ترین راه برای انجام کار است. معمولاً من محیطی نزدیک به دایرکتوری پروژه ایجاد می کنم.
+ virtualenvwrapper: یک بسته پایتون که بصورت سراسری نصب می شود و مجموعه ای برای ایجاد/حذف/فعالسازی/و غیره را ارائه می دهد. همه محیط های مجازی در یک پوشه ذخیره می شوند (که می توان آنها را از طریق متغیر محیط WORKON_HOME بازنویسی کرد). من هیچ مزیتی برای استفاده از virtualenvwrapper به جای virtualenv نمی بینم.
+ Containers: در چند سال گذشته، من تقریباً در هر پروژه از Docker استفاده می کردم، به ویژه در هر پروژه جدیدی که از ابتدا شروع می کنم. Docker یک ابزار شگفت انگیز است که ویژگی های زیادی را ارائه می دهد و ابزارهای شخص ثالث زیادی برای اتوماسیون کانتینرها دارد. دارای ویژگی ذخیره سازی لایه است که بازسازی کانتینر شما را بسیار سریع می کند. در کانتینرها، من از سیستم اصلی پایتون استفاده می کنم، زیرا هر کانتینر سیستم فایل خاص خود را دارد و پروژه ها در سطح بالا جدا شده اند. داکر به اعضای جدید تیم اجازه می دهد تا سریعتر کار روی پروژه را شروع کنند، به خصوص اگر تجربه داکر را داشته باشند.
دوره پیشنهادی: دوره آموزش Docker
# نساختن فایل requirements.txt
شما باید تمام پروژه های جدید پایتون را در یک محیط جدا شده جدید و یک فایل جدید requirements.txt
آغاز کنید. یک توسعه دهنده در حالت ایده آل باید بسته ها را از طریق pip/easy install نصب کند ، اما باید آنها را به فایل Requires.txt اضافه کند - به این ترتیب استقرار پروژه ها بر روی سرورها آسان می شود و یکی از اعضای تیم می تواند پروژه را در رایانه خود راه اندازی کند. فایل requirements.txt
باید وابستگی های مشخصی داشته باشد. نسخه های مختلف دارای پارامترهای عملکرد، توابع و ماژول های متفاوتی هستند. یک تغییر جزئی می تواند پروژه را خراب کند ، که اگر پروژه شما زنده باشد، نمی خواهید. مطمئن شوید از فایل های وابستگی خود پشتیبان تهیه کرده اید.
# استفاده از function-base-viewها به جای class-based-viewها
ممکن است یک توسعه دهنده یک فانکشن پایتون را برای view انتخاب کند. با این حال، توسعه دهندگان متخصص استفاده از viewهای مبتنی بر کلاس (CBV) را در همه برنامه ها توصیه می کنند. CBV کلاسهای انتزاعی ارائه می دهد که وظایف رایج وب را برای متخصصان پیاده سازی می کند. API آنها دارای ساختار باورنکردنی است و اگر از CBV استفاده می کنید، می توانید تمام مزایای برنامه نویسی شی گرا (OOP) را اعمال کنید. کد شما قابل خواندن و واضح تر است. از توابع جنگو مانند پردازش فرم ها، عملیات CRUD و لیست ها استفاده نکنید. CBV صحیح را برای پروژه خود انتخاب کنید و از ویژگی ها یا خصوصیات کلاس که می تواند رفتار view را تغییر دهد چشم پوشی کنید.
# استفاده از فایل هایی با تنظیمات بسیار زیاد و غیرقابل مدیریت
تنظیمات زیادی در فایل تنظیمات پروژه جدید جنگو وجود دارد. یک پروژه واقعی دارای بیش از هفتصد خط پیکربندی است که تعمیر و نگهداری را به چالش می کشد. فایل پیکربندی را با تقسیم دستی آن و ایجاد لودرهای سفارشی تغییر دهید.
# نادیده گرفتن مهارتهای نرم
همانطور که به عنوان توسعه دهنده مسیر شغلی خود توسعه می دهید، بر داشتن مهارت های نرم مانند راهنمایی، ارتباطات و مدیریت زمان تمرکز کنید. اطمینان حاصل کنید که در محل کار با مشتریان یا همکاران خود ارتباط برقرار می کنید، زیرا باعث می شود پروژه ها روانتر اجرا شوند. توسعه نرم افزار یک فعالیت اجتماعی است و اگر مهارت های نرم نداشته باشید، فقط به حرفه خود آسیب می زنید.
مقاله پیشنهادی: ده سایت معروفی که با جنگو ساخته شده اند
# ادغام فناوری های سنگین با اسکریپت های ساده
بسیاری از توسعه دهندگان جدید نمی دانند که جنگو یک ابزار بزرگ نیست. اگر کد جدید خود را با ابزارهایی مانند جاوا اسکریپت ادغام کنید، ممکن است برنامه خود را برای شکست تنظیم کنید. اگر در ادغام خود احتیاط نکنید، ممکن است اجرا نشود.
# کلام پایانی
جنگو با هدف تسریع برنامه نویسی نرم افزار طراحی شد. اما تعداد بالای قابلیت های آن باعث می شود برخی نکات را از قلم بیاندازیم. ما در این مقاله به برخی اشتباهات برنامه نویسان جنگو پرداختیم.
این موارد علاوه بر مبتدیان به افراد با تجربه نیز کمک می کنند چون اشتباهاتی مانند نیفزودن شاخص به مدل ها و یا فقط مختص تازه کار ها نیست.
اگر هر روز بر بهبود خود تمرکز کنید ، به عنوان یک توسعه دهنده خوب ظاهر خواهید شد. روی اشتباهات دیروز خود تمرکز نکنید ، فقط از آنها درس بگیرید و به راه خود ادامه دهید. با شروع یک پروژه از ابتدا ، خود را محک بزنید و همیشه مطمئن شوید که آن را به پایان رسانده اید.
اگر مقاله بالا را دوست داشتید، پیشنهاد میکنیم به مطالب زیر هم سر بزنید:
با پایتون چه کارهایی میتوان کرد؟