پایتون یکی از مشهورترین زبانهای برنامهنویسی در جهان است و دومین زبان پرکاربرد در پروژههای Github در سال 2017 شناخته شده است؛ بنابراین اگر علاقهمند به پایتون و توسعه وب هستید، احتمالاً نام Django را شنیدهاید. رشد محبوبیت فریمورکهای توسعه وب، این روزها باعث میشود که یادگرفتن یک فریمورک جدید و انتخاب یکی از آنها برای کار کردن، گیجکننده باشد.
در این مقاله از راکت یک نگاه جامع به Django خواهیم داشت تا با این فناوری شگفتانگیز آشنا شویم.
Django چیست؟
Django یک فریمورک وب بر پایه معماری MVT است که برای ساخت برنامههای کاربردی به کار میرود. خودش را بهعنوان یک فریمورک مستقل (batteries included) معرفی میکند که با قدرتمندی و سادگی به توسعهدهندگان کمک میکند که کدهای مرتب، مؤثر و قدرتمند بنویسند.
یکی از معروفترین و پرکاربردترین فریمورکهای وب موجود در جهان است. اینستاگرام، یوتیوب، گوگل و حتی ناسا از آن برای وبسایتهایشان استفاده میکنند. پس بهتر است آن را با موشکافی بررسی کنیم تا بیشتر درمورد آن بدانیم.
ساختار Django
Django یک معماری MVT را دنبال میکند که مخفف عبارت مدل- نمایش-الگو است. MVT یک نوع ساختار Django از ساختار مشهور MVC است و به همین دلیل است که فکر میکنید کاملاً شبیه سایر فریمورکها کار میکند. زمانیکه سرور Django یک درخواست را دریافت میکند، مسیریاب URL مربوطه، آن درخواست را به سمت نمایش (view) مناسب هدایت میکند. این نمایش، داده را ازطریق مدلها دریافت کرده، الگو را تکمیل میکند و آن را برای کاربر ارسال میکند.
مدلهای Django
مدل Django از یک لایه ORM (Object-Relational-Mapping) قوی استفاده میکنند که ارتباط با داده و پایگاهداده را تسهیل کرده و به فرایند توسعه، سرعت میبخشند.
بدون ORM، توسعهدهندگان باید خودشان جداولی را ایجاد کنند و جستجوها یا روشها را تعریف کنند که این گاهی منجر به مقدار قابلتوجهی از تبدیلات به زبان SQL میشود که کاری پیچیده و دشوار است.
لایه ORM به شما اجازه میدهد که تمام تعاریف جدولی را در یک کد ساده پایتون بنویسید و آن را به زبان کوئری مناسبی تبدیل میکند که منجر به تسهیل عملیات CRUD هم میشود.
درواقع توسعهدهنده لزوماً نیازی به دانستن زبان پیچیده SQL و یا اینکه به چه چیزی تبدیل میشود، ندارد اگرچه درک SQL باعث میشود که بتوانید کوئریهای بهتر و سریعتری بنویسید و امنیت وبسایت شما را هم افزایش میدهد.
برخلاف سایر فریمورکها، تمام مدلها در یک فایل قرار میگیرند که معمولاً بهصورت model.py است و البته ممکن است برای پروژههای بزرگتر باعث ایجاد شلوغی و آشفتگی شود.
Django تعداد زیادی پایگاهداده را پشتیبانی میکند. SQLite برای تست و توسعه بسیار مناسب است چون میتوان بدون نیاز به نرمافزار دیگری از آن استفاده کرد.
همچنین میتوانید از MYSQL یا PostgreSQL استفاده کنید و اگر دنبال پایگاهداده NoSQL هستید، میتوانید از MongoDB استفاده کنید.
الگوهای Django
لایه الگو برای جداسازی داده از روشی که آن را ارائه میکند و به کاربر نمایش میدهد، استفاده میشود. لایه الگو شبیه لایه نمایش MVC است. اگر با الگودهی در زبانهای دیگر آشنا باشید، باید بدانید که در Django هم همان روند مشابه طی میشود؛ از یک HTML مثل سینتکس استفاده میشود که بعداً بههمراه تمام دادههای اضافهشده به HTML تبدیل میشود.
البته اگر بخواهید اسناد XML و یا فایلهای JSON ایجاد کنید، قالبهایی دیگری بهجز HTML برای الگوها وجود دارند.
DRY یکی از اصول طراحی الگوهای اصلی Django و یک الگوی طراحی و مخفف عبارت «don't repeat yourself» است. این عبارت دقیقاً نقش آن را بیان میکند و به این معنی است که لازم نیست شما، لااقل در بیشتر موارد، کد را کپی و پیست کنید.
درعوض، برای مثال الگوی شما باید به اجزای مجدداً قابلاستفاده تقسیم شود مثل سایدبار ، هدر صفحه، فوتر صفحه و سایر موارد. این موضوع تکرارها را به حداقل میرساند و کدها را مؤثرتر و مرتبتر میکند.
یکی از مواردی که Django را متمایز میکند، اهمیت زیاد آن به امنیت است که روی نوشتن الگوها هم تأثیر گذاشته است.
بهعنوانمثال در Rails شما میتوانید کد ruby در قسمت نمایش بنویسید که البته اجباری نیست و همچنین میتوانید به متغیرها مقدار بدهید.
در Django اصلاً به این صورت نیست و نمیتوانید کد پایتون را در الگو اجرا کنید و به متغیرها مقدار بدهید. به عبارت سادهتر، Django اجرای کد در لایه الگو را ممنوع کرده است و فقط به قسمت نمایش دسترسی داده است که یک راهحل ساده اما بسیار مؤثر برای جلوگیری از بسیاری از قسمتهای آسیبپذیر وب است.
نماهای Django
نما در Django یک لایه منطقی تجاری است که مسئولیت پردازش درخواست کاربر و ارسال پاسخ معتبر به او را برعهده دارد. نما، داده را از مدل دریافت میکند، به هرکدام از الگوها دسترسی میدهد که داده خاصی را نمایش دهند یا یک سری پردازش روی دادهها از قبل انجام میدهد. امروزه، نماهای Django میتوانند عملیات پردازش درخواست و ارسال پاسخ را انجام دهند و یا میتوانند کلاسهایی باشند که قابلیتهای بیشتری از یک روش مشابه برای کنترلکنندههای Laravel و Rails دارند.
مسیریاب URL
مسیریاب URL در Django پیچیدهتر از فریمورکهای دیگر مثل Rails یا Laravel است. مشکل آن این است که از عبارات منظمی استفاده میکند که استفاده از آنها برای مبتدیان آسان نیست. اگرچه ساختار خود مسیریاب URL اصلاً پیچیده نیست و تنها سینتکس آن طوری است که ممکن است در ابتدا کارکردن با آن راحت نباشد.
مزایای Django
1. مستقل بودن (batteries included)
یکی از افتخارات Django این است که یک فریمورک مستقل است که به این معنی است که مجهز به برنامههای out of box است که شما میتوانید از آنها بسته به برنامه کاربردیتان استفاده کنید یا نکنید.
بجای اینکه مجبور باشید کد خودتان را بنویسید تنها کافی است که پکیجی را که نیاز دارید، دریافت کنید. این بخشی از قرارداد پارادایم نصب است که Django هم بخشی از آن است و به شما این امکان را میدهد که از راهحلهای متخصصان جهانی استفاده کنید.
این مورد محدوده گستردهای را دربر میگیرد که شامل موارد زیر است:
- هویت سنجی با پکیج auth
- رابط ادمین با پکیج ادمین
- مدیریت جلسهها با پکیج Session
- مدیریت پیامهای موقت یا جلسهمحور با پکیج Messages
- تولید نقشه سایت XML گوگل با پکیج Sitemaps
- ارسال ویژگیهای خاص با پکیج Postgres
2. پایتون
ازآنجاکه Django از پایتون استفاده میکند، شهرت و قدرت پایتون جزو امتیازات Django هم بهحساب میآید. پایتون بهطور قابلبحثی یکی از آسانترین زبانهای برنامهنویسی برای مبتدیان است و در دورههای مقدماتی علوم کامپیوتر در سراسر جهان کاملاً محبوب است.
براساس آمار Stackoverflow در سال 2017 از توسعهدهندگان، مشخص شد که پایتون محبوبیت بیشتری دارد و کارهایی که با پایتون و PHP انجام میشوند درآمد بهتری از پروژههای C# و C++ دارند.
3. انجمن کاربری
انجمن کاربری Django یکی از بهترین چیزهایی است که دارد و بسیار کاربردی است و آنها دائماً درحال تلاش برای این هستند که این فریمورک را برای مبتدیان سازگارتر کرده و ضمن افزودن ویژگیهای جدید به آن بتوانند آن را ثابت نگهدارند.
مستندات Django کاملاً جامع است و میتواند بهعنوان یک خودآموز به کار رود و به شما کمک میکند که از ویژگیهای مختلف آن سر در بیاورید و میتوانید از آن بهعنوان مرجع اولیه یادگیری استفاده کنید.
4. مقیاسپذیری
اکثر توسعهدهندگان وقتیکه به انتخاب یک فریمورک فکر میکنند، برنامههای آینده را هم در انتخابهایشان درنظر میگیرند. به همین دلیل است که انتخاب یک فریمورک مقیاسپذیر برای خیلیها ضروری است و Django همینطور است.
همانطور که Nigel در مقاله خودش به این موضوع اشاره کرده است، به شما این امکان را میدهد کارهای مختلف زیادی با توجه به مقیاسپذیری انجام دهید، مثل اجرای سرورهای جداگانه برای پایگاهداده، رسانه و برنامه کاربردی و یا حتی استفاده از خوشهبندی یا تعادل بار برای انتشار برنامه کاربردی در چندین سرور.
5. مدیریت داخلی
تیم Django برای ایجاد این فریمورک کاملاً حرفهای عمل کردند و رضایت کاربر و توسعهدهنده را در نظر داشتند. اینکه رابط مدیریت خودتان را در backend ایجاد کنید فقط برای اینکه بتوانید دادههایتان را با عملیات اصلی CRUD مدیریت کنید، کار منطقی نیست.
به همین دلیل است که Django یک رابط اجرایی out of box ارائه میدهد که هم تخصصی و هم قابلانطباق است، این براساس مستنداتی است که نشان میدهد یک توسعهدهنده درحال حاضر میتواند کار توسعه را همانطور که در ذهن دارد، انجام دهد.
معایب Django
بااینکه Django یک فریمورک شگفتانگیز است اما معایبی هم دارد که ممکن است برای شما مشکلآفرین باشد و یا نباشد.
اولین مورد این است که مشخص کردن URL با عبارات دقیق کار آسانی، لااقل برای مبتدیان، نیست. برای انجام پروژههای کوچک حجم زیادی میخواهد و بعضی از افراد هم معتقدند که برای پروژههای بزرگ چون همه مدلها در یک فایل نگهداری میشود، احساس شلوغی و آشفتگی ایجاد میکند.
خطاهای الگو بهصورت پیشفرض بدون هیچ اعلانی اتفاق میافتند و اگر آنها را نشناسید ممکن است زمان زیادی را صرف تلاش برای رفع مشکل برنامه کاربردی خود کنید، یا بدتر از آن ممکن است هرگز متوجه نشوید که برنامه شما مشکلاتی دارد.
چگونه Django را یاد بگیریم؟
ابتدا باید با پایتون شروع کنید و روند ذاتی برنامههای کاربردی وب را درک کنید.
میتوانید محبوبترین دورهها را انتخاب کنید و یا براساس روش یادگیری خودتان از آموزشهای ویدئویی یا کتاب که هم برای مبتدیان و هم برای افراد پیشرفته است، بهره ببرید. میتوانید با سمینارهای CS50 در توسعه وب شروع کنید و اطلاعاتی هم درمورد پایتون و طرز استفاده از آن کسب کنید.
برای تسلط یافتن بر پایتون، دوره Bill Weinman در Lynda که یک کلاس تخصصی است، مفید است و میتوانید برای دورههای آموزشی پایتون و Django از Udemy هم استفاده کنید. مستندات رسمی Django هم گزینه خوبی برای شروع است و همانطور که قبلاً اشاره کردیم، آموزشهای کاملی را ارائه میدهد که فقط مختص به API نیست.
همچنین اگر مایل به یادگیری جانگو به زبان فارسی هستید، میتوانید به دورهی «آموزش Django» مراجعه کنید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید