فریم ورک جنگو (Django)

در این اولین مقاله ی Django ما به سوال " Django چیست؟" پاسخ خواهیم داد و به شما این دید را می دهیم که چه چیزی این framework را خاص کرده است. ما برخی از ویژگی های اصلی از جمله عملکرد پیشرفته ی آن را معرفی خواهیم کرد اما در این مقاله زمان پوشش دادن تمام جزئیات را نداریم و همچنین برخی از بلوک های اصلی ساخت یک اپلیکیشن Django را به شما نشان خواهیم داد. (اگرچه شما در این مرحله محیط توسعه که بتوانید در ان تست را انجام دهید ندارید.

پیش نیاز ها: سواد کامپیوتری اولیه، یک فهم کلی از برنامه نویسی وب سایت server-side و بطور کلی مکانیزم تعاملات client-server در وبسایت ها.

شیئ گرایی: برای آشنا شدن با چیستی Django و اینکه چه عملکرد هایی را ارائه می دهد و بلوک های اصلی ساخت یک اپلیکیشن Django.

Django چیست؟

Django یک framework وب پایتون سطح بالا است که امکان توسعه ی سریع وبسایت های قابل دسترس و امن را می دهد. این framework توسط توسعه دهندگان باتجربه ساخته شده است. Django از بسیاری از پیچیدگی های توسعه وب جلوگیری می کند بنابراین شما می توانید بدون نیاز به انجام مجدد کار های اولیه تمرکز کنید. این framework رایگان و open source است و اجتماعی فعال و پیشرفته، مستندات عالی و بسیاری گزینه های دیگر برای پشتیبانی های رایگان و غیررایگان دارد.

Django به شما در نوشتن نرم افزار هایی که ویژگی های زیر را دارد کمک می کند:

کامل

Django از فلسفه ی "Batteries included" پیروی می کند و تقریبا هرچیزی که توسعه دهندگان ممکن است به آن احتیاج داشته باشند را ارائه می دهد. زیرا هرچیزی که شما به آن احتیاج دارید بخشی از یک محصول است و همه ی این ها بطور یکپارچه بایکدیگر کار می کنند و از اصول طراحی محکمی استفاده می کنند و مستندات گسترده و به روزی دارند.

همه کاره

Django می تواند تقریبا برای ساخت هرنوع وبسایتی استفاده شود – از سایت های مدیریت محتوا و wiki ها تا شبکه های اجتماعی و سایت های خبری. Django می تواند با هر framework سمت کلاینت کار کند و می تواند محتوا را در تقریبا هر نوع فرمتی (شامل HTML، RSS، JSON، XML و غیره) ارسال کند. سایتی که شما هم اکنون درحال خواندن آن هستید برپایه ی Django است.

از لحاظ داخلی درحالی که انتخاب هایی برای هر نوع عملکردی که شما می خواهید را ارائه می دهد (برای مثال چندین پایگاه داده ی معروف،موتور های قالب سازی و غیره) همچنین برای استفاده از کامپوننت های دیگر ئر صورت نیاز نیز توسعه یافته است.

امنیت

Django با ارائه ی framework  که براساس "کار درست را انجام دهید" تا از وبسایت به صورت اتوماتیک محافظت کنید، مهندسی شده است، به توسعه دهندگان کمک می کند تا از بسیاری از خطا های امنیتی معمول اجتناب کنند. برای مثال Django یک راه ایمن برای مدیریت حساب های کاربری و رمزعبور ها با اجتناب از خطاهای معمول مانند گذاشتن اطلاعات session در cooki ها که آسیب پذیر هستند( بجای cooki ها فقط از یک کلید استفاده کنید و داده ی اصلی در پایگاه داده ذخیره شود) یا ذخیره سازی رمزعبور به جای رمزعبور هش شده.

یک هش رمزعبور یک مقدار با طول ثابت است که توسط یک تابع هش رمزنگاری تولید می شود. Django می تواند بررسی کند که آیا رمزعبور وارد شده با دادن آن به تابع هش و مقایسه ی خروجی با مقدار ذخیره شده، درست است یا نه. با این حال با توجه به ماهیت یک طرفه بودن تابع مقدار هش ذخیره شده به خطر بیفتد برای شخص مهاجم دشوار است تا رمز اصلی را به دست بیاورد.

Django بطور پیش فرض از آسیب پذیری های بسیاری از جمله SQL injection،cross-site scripting،جعل درخواست cross-site و clickjacking (برای جزئیات بیشتر از چنین حمله هایی Website security را مشاهده کنید) محافظت می کند.

مقیاس پذیر

 Django از یک معماری مبتنی بر مولفه "بدون اشتراک" استفاده می کند (هر بخش از معماری از دیگر اجزا مستقل است از این رو درصورت لزوم می توان آن ها را تغییر داد و یا جایگزین کرد) داشتن یک جداسازی تمیز بین اجزای مختلف به این معنی است که برای ترافیک های رو به رشد با اضافه کردن سخت افزار مانند سرور های کش، سرور های پایگاه داده یا سرور های اپلیکیشن در هر سطحی مقیاس پذیر است. برخی از سایت های شلوغ بطور موفق Django را مقیاس پذیر کرده اند تا درخواست های خود را ببینند (برای مثال اینستاگرام و Disqus)

قابل نگهداری

کد Django با استفاده از الگوها و قوانین طراحی که به ساخت کد های قابل استفاده ی مجدد و قابل نگهداری تشویق می کند، نوشته شده است. بطور خاص از اصل خودت تکرار نکن (DRY) استفاده می کند بنابراین هیچ کپی غیرضروری وجود ندارد و حجم کد کاهش پیدا می کند. Django همچنین گروه سازی های عملکرد های مرتبط به یکدیگر را در "اپلیکیشن های" قابل استفاده ی مجدد و در سطحی پایین تر گروه های مرتبط با کد در ماژول ها (در الگوی Model View Controller (MVC))، ارتقاء می دهد.

قابل حمل

Django با پایتون نوشته شده است که روی بسیاری از platform ها اجرا می شود این به این معنی است که شما به هیچ platform سرور خاصی وابسته نیستید و شما میتوانید اپلیکیشن های خود را روی نسخه های بسیاری از لینوکس، ویندوز و Mac OS X اجرا کنید. علاوه براین Django توسط بسیاری از ارائه دهندگان هاست وب به خوبی پشتیبانی می شود و اغلب زیربنا و مستندات خاصی برای هاست کردن سایت های Django ارائه می دهند.

  Django از کجا پدید آمد؟

Django ابتدائا بین سال های 2003 و 2005 توسط یک تیم وب که مسئول ساخت و دستیابی وبسایت های روزنامه ای بودند توسعه یافت. پس از ساخت تعدادی سایت شروع به فاکتور گیری و استفاده ی مجدد از بسیاری از کد های مشترک و الگو های طراحی کرد. این کد های مشترک به یک framework توسعه ی وب عمومی با عنوان Django در سال 2005 که open-sourced نیز بود تبدیل شد.

Django رشد و بهبود خود را از اولین نسخه ی منتشر شده ی خود (1.0) در سپتامبر 2008 تا نسخه ی اخیر خود 2.0 (2017) ادامه داده است. هر انتشار شامل عملکرد های جدید و رفع باگ ها از جمله پشتیبانی از پایگاه داده های جدید، موتور های template و ذخیره سازی از طریق اضافه کردن توابع view "عمومی" و کلاس ها (که حجم کدی که توسعه دهنده باید برای تعدادی از وظایف برنامه نویسی بنویسد کاهش یابد)

توجه:نوشته های منتشر شده در وبسایت Django را بررسی کنید تا تغییرات نسخه های اخیر را ببینید و ببینید که چه حجم از کار انجام شده را Django بهبود داده شود.

Django یک پروژه ی open source پرطرفدار است که هزاران کاربر دارد. این درحالی است که Django هنوز برخی ویژگی هایی دارد که اصل خودش را بازتاب می دهد. Django به یک framework همه کاره که مناسب برای توسعه ی هرنوع وبسایتی است تبدیل شده است.

Django چقدر محبوب است؟

هیچ اندازه گیری مناسب و مشخصی برای محبوبیت framework های سمت سرور وجود ندارد (اگرچه سایت هایی نظیر Hot Frameworks قصد دارند تا محبوبیت را با استفاده از مکانیزم هایی نظیر شمارش تعداد پروژه های GitHub و سوالات StackOverflow برای هر platform به دست بیاورد) یک سوال بهتر این است که آیا Django به اندازه ی کافی محبوب است؟ تا از مشکلات مربوط به platform های غیرمحبوب جلوگیری کنیم. آیا Django هنوز روند تکامل را ادامه می دهد؟ آیا درصورت نیاز می توانید کمک بگیرید؟ آیا شانسی وجود دارد که اگر Django را یاد بگیرید کار با حقوق داشته باشید؟

برمبنای تعداد سایت های پرطرفدار که از Django استفاده می کنند، تعداد افرادی که در پایگاه کد شرکت کرده اند و تعداد افرادی که به صورت رایگان و غیر رایگان پشتیبانی می کنند، بله، Django یک framework محبوب است.

سایت های پرطفداری که از Django استفاده می گنند شامل Disqus, Instagram, Knight Foundation, MacArthur Foundation, Mozilla, National Geographic, Open Knowledge Foundation, Pinterest, and Open Stack است. (منبع: صفحه ی اصلی Django)

کد Django به چه صورت است؟

در وبسایت های سنتی حاصل از داده یک وب اپلیکیشن منتظر درخواست HTTP  از مرورگر وب (یا کلاینت دیگر) می ماند و زمانی که درخواست می رسد  بر اساس URL یا اطلاعات احتمالی در داده های POST یا داده های GET رو آنچه که نیاز است کار می کند و براساس موارد مورد نیاز اطلاعاتی را پایگاه داده می خواند یا می نویسد و یا کار های دیگری برای انجام آن درخواست می کند و سپس یک پاسخ به مرورگر وب برمی گرداند و معمولا یک صفحه ی داینامیک HTML برای مرورگر به منظور نشان دادن وارد کردن داده های بازیابی شده در placeholder های HTML ساخته میشود.

وب اپلیکیشن های Django  معمولا کد هایی که هر قسمت را مدیریت می کند به فایل هایی جداگانه گروه بندی می کند.

URL ها: درحالی که ممکن است درخواست ها را از هر URL از طریق یک تابع پردازش کرد، اگر برای مدیریت هر منبع یک تابع View جداگانه بنویسیم قابلیت نگهداری بسیار افزایش می یابد. یک نگاشت کننده ی URL  استفاده می شود تا درخواست های HTTP  را به view  مرتبط بر اساس درخواست URL، منتقل کند همچنین نگاشت کننده ی URL می تواند الگو های خاصی از رشته ها یا اعداد که در URL نشان داده می شوند را تطابق دهد و آن ها را به عنوان داده به تابع view  ارسال کند.

view : یک view  یک تابع مدیریت درخواست است که درخواست های HTTP  را دریافت می کند و پاسخ های HTTP  را برمیگرداند. View ها به داده های مورد نیاز برای انجام درخواست ها از طریق مدل ها دسترسی دارند و قالب بندی پاسخ ها را به template  ها محول می کند.

مدل ها: مدل ها پروژه های پایتون هستند که ساختار داده های یک اپلیکیشن را تعریف می کندد و مکانیزمی برای مدیریت (اضافه ، ویرایش و حذف کردن) و رکورد های کوئری در پایگاه داده ارائه می کند.

template  ها: یک template  یک فایل متنی است که ساختار یا layout  یک فایل (مانند صفحه ی HTML  ) را با placeholder هایی برای نشان دادن محتوای واقعی تعریف می کند. یک View می تواند به صورت داینامیک یک صفحه ی HTML با استفاده از یک تمپلیت HTML  بسازد و آن را با داده هایی از یک مدل پر کند. یک template  می تواند برای تعریف ساختار هر نوع فایلی استفاده شود و نیاز نیست که فقط HTML باشد.

توجه: در Django به چنین ساختاری معماری Model View Template (MVT) می گویند که شباهت های بسیاری به معماری Model View Controller دارد.

قسمت های زیر یک دید کلی از قسمت های اصلی یک اپلیکیشن Django  می دهد.

ارسال درخواست به View صحیح

یک نگاشت کننده ی URL  معمولا در یک فایل به نام urls.py ذخیره می شود. در مثال زیر نگاشت کننده ی urlpatterns یک لیست از نگاشت ها بین route ها(الگویی خاص از URL ها) و توابع view مرتبط تعریف می کند اگر یک درخواست HTTP  رسیده باشد که با یک الگوی خاص مطابق باشد تابع View مرتبط فراخوانی می شود و درخواست را ارسال می کند.

شیئ urlpatterns  لیستی از توابع path() و/یا re_path() است (لیست های پایتون با استفاده از [] تعریف می شوند که آیتم ها به وسیله ی کاما از یکدیگر جدا می شوند و کامای انتهایی دلبخواه است برای مثال: [item1, item2, item3,])

آرگومان اول در هر دو متد یک route  (الگو) است که قرار است تطبیق داده شود. متد path() از براکت برای تعریف اجزای یک URL که گرفته خواهد شد و از طریق توابع view به عنوان آرگومان های با نام ارسال خواهد شد استفاده می کند. تابع re_path() از یک الگوی منعطف که با رویکردی شناخته شده به عنوان regular expression منطبق است استفاده می کند. درباره ی این گزینه در مقالات بعدی صحبت خواهیم کرد.

آرگومان دوم تابع دیگری است که زمانی که الگو منطبق شد فراخوانی خواهد شد. عبارت views.book_detail بیان می کند تابع فراخوانی شده book_detail() است و در ماژولی به نام views  یافت خواهد شد (یعنی در فایلی به نام views.py)

مدیریت درخواست ها

View ها قلب وی اپلیکیشن ها هستند که درخواست های HTTP  را از کلاینت های وب دریافت می کنند و پاسخ های HTTP  را برمی گردانند در این بین View ها دیگر منابع framework  را مرتب می کند تا به پایگاه داده ها دسترسی داشته باشند و template ها را رندر کند و غیره.

مثال زیر یک تابع view کمینه به نام index() را نشان می دهد که می تواند توسط نگاشت کننده ی URL  ،در قسمت قبل، فراخوانی شود. مانند همه  ی توابع View این مورد نیز یک شیئ HttpRequest به عنوان یک پارامتر (request) دریافت می کند و یک شیئ HttpResponse  برمی گرداند. در این مورد ما کار دیگری با درخواست ها نمی کنیم و پاسخ ما به سادگی یک رشته ی hard code برمی گرداند. در قسمت بعد به شما درخواستی که کار های جالب تری انجام می دهد را نشان خواهیم داد.

توجه: کمی درباره پایتون

ماژول های پایتون کتابخانه هایی از توابع هستند که در فایل های جداگانه ذخیره شده اند و ممکن است بخواهیم در کد های خود از آن ها استفاده کنیم اینجا ما فقط شیئ HttpResponse  را از ماژول django.http، import کرده ایم بنابراین می توانیم از آن در View استفاده کنیم: from django.http import HttpResponseراه های دیگری برای import کردن برخی یا همه ی اشیاء یک ماژول وجود دارد.

توابع همان طور که در بالا نشان داده شده است با کلمه ی کلیدی def  و پارامتر های نام گذاری شده و لیست شده در براکت بعد از نام تابع، تعریف می شوند. همه ی خطوط با دونقطه تمام می شوند . توجه کنید که چگونه خطوط بعد شروع می شوند. شروع خطوط مهم هستند زیرا مشخص می کنند خطوط کد در بلاک خاصی هستند. فاصله از سر خط یک ویژگی کلیدی پایتون است و یکی از دلایلی است که فهم کد پایتون آسان است.

View  ها معمولا در یک فایل به نام views.py ذخیره می شوند.

تعریف مدل های داده (models.py)

وب اپلیکیشن های Django  از طریق اشیاء پایتون که نمونه هایی از مدل ها هستند داده ها را مدیریت می کند و روی آن ها query  می زند. مدل ها ساختار داده های ذخیره شده از جمله نوع فیلد ها و همچنین بیشینه ی سایز آن ها ، مقادیر پیش فرض،گزینه های لیست انتخابی، متن کمک برای مستندسازی، متن label  برای فرم ها و غیره را تعریف می کند. تعریف مدل مستقل از پایگاه داده است-  شما می توانید یکی از چندین مورد را به عنوان بخشی از تنظیمات پروژه ی خود انتخاب کنید. زمانی که پایگاه داده ای را که می خواهید استفاده کنید را انتخاب کردید دیگر نیاز ندارید تا مستقیما با آن حرف بزنید. شما فقط ساختار مدل خود و مابقی کد ها را می نویسید و Django  همه ی کار های ارتباط با پایگاه داده را برای شما انجام می دهد.

قطعه کد زیر یک مدل Django  بسیار ساده از شیئ Team  را نشان می دهد کلاس Team  از کلاس  Django  به نام models.Model حاصل شده است. این کلاس نام تیم و سطح تیم به عنوان یک فیلد کاراکتری و همچنین بیشینه ی کاراکتر هایی که می توان در هر رکورد ذخیره کرد را تعریف می کند. team_level  می تواند یکی از چندین مقدار باشد و آن را به عنوان فیلدی انتخابی تعریف می کنیم و از طریق یک مقدار پیش فرض یک نگاشت بین انتخاب ها برای نشان دادن و داده ها برای ذخیره شدن تعریف می کنیم.

توجه: کمی درباره ی پایتون

پایتون از "برنامه نویسی شیئ گرا" پشتیبانی می کند که یک سبک برنامه نویسی است که ما کد های خود را با اشیاء سازماندهی می کنیم که شامل داده ها ی مرتبط و توابع عملیاتی روی داده می شود. اشیاء همچنین می توانند از اشیاء دیگر ارث بری کنند/ گسترش بیابند/انشقاق شوند و این امکان را می دهد که رفتار های مشابهی بین اشیاء مرتبط به اشتراک گذاشته شود. در پایتون ما از کلمه ی کلیدی class  برای تعریف طرح یک شیئ استفاده می کنیم. ما می توانیم نمونه های خاص چندگانه از نوع شیئ بر پایه ی مدل در کلاس بسازیم.

بنابراین برای مثال اینجا ما یک کلاس Team  داریم که از کلاس Model  مشتق شده است این به این معنی است که یک مدل داریم که شامل همه ی متد های مدل خواهد بود اما همچنین می توانیم ویژگی های خاص نیز به آن بدهیم در مدل ما فیلد هایی از پایگاه داده که نیاز است تا داده های خود را در آن ذخیره کنیم، تعریف می کنیم و به آن نامی خاص می دهیم. Django  از این تعریف ها از جمله نام فیلد ها برای ساخت پایگاه داده، استفاده می کند.

Query زدن روی داده (View.py)

مدل Django  یک API  کوئری ساده برای جستجو در پایگاه داده ارائه می دهد این کار می تواند در برابر تعدادی از فیلد ها در یک زمان با استفاده از شاخص مختلف همخوانی داشته باشد (یعنی دقیقا، حساس به حروف، بزرگتر از و غیره) و می تواند از عبارات پیچیده پشتیبانی کند (برای مثال می توانید جستجو روی تیم های U11  که نام تیم آن ها با "Fr" شروع می شود یا با "al" تمام می شود، را انجام دهید)

قطعه کد زیر یک تابع view  (مدیریت کننده ی منابع) برای نشان دادن همه ی تیم های U09 را نشان می دهد. خط bold  شده نحوه ی استفاده از مدل API  کوئری برای فیلتر کردن همه ی رکورد ها که فیلد team_level آن ها دقیقا مقدار 'U09' را دارد، نشان می دهد (توجه کنید که چگونه این شاخص به عنوان یک آرگومان با نام فیلد با نوع منطبق جدا شده توسط "_" به تابع filter() ارسال می شود: team_level__exact)

این تابع از تابع  render()برای ساخت HttpResponse  که به مرورگر ارسال می شود، استفاده می کند. این تابع یک shortcut است و به وسیله ی ادغام کردن یک تمپلیت HTML  خاص و برخی داده ها برای وارد کردن در template  (که در متغیری به نام  "context" ارائه شده است) یک فایل HTML  می سازد. در قسمت بعدی نشان خواهیم داد که چگونه template  چگونه داده ی وارد شده در خودش را برای ساخت HTML دارد.

رندر کردن داده (template  های HTML)

سیستم های تمپلیت به شما امکان مشخص کردن ساختار یک سند خروجی با استفاده از placeholder ها برای داده هایی که زمانی که صفحه ساخته می شود پر خواهند شد، را می دهد. Template ها معمولا برای ساخت HTML ها استفاده می شوند اما می توانند انواع دیگری از مستندات را نیز بسازند. Django  هم از سیستم Template بومی خود و هم از دیگر کتابخانه های محبوب پایتون به نام Jinja2  پشتیبانی می کند (همچنین در صورت لزوم برای پشتیبانی از دیگر سیستم ها ساخته شده است)

قطعه کد زیر نشان می دهد که تمپلیت HTML  فراخوانی شده توسط تابع render() در قسمت قبل ممکن است چگونه باشد. این template  با این فرض که زمان رندر شدن به لیستی از متغیر ها به نام youngest_teams دسترسی دارد (که در متغیر context   در تابع render() قرار دارد)نوشته شده است. داخل اسکلت HTML  ما یک عبارت داریم که ابتدا بررسی می کند که آیا متغیر youngest_teams وجود دارد یا نه و سپس آن را در یک حلقه ی for تکرار می کند.  در هر تکرار template  مقدار team_name هر تیم را در یک عنصر <li> نشان می دهد.

چه کار های دیگری می توانید انجام بدهید؟

قسمت های قبل ویژگی های اصلی که شما تقریبا در هر وب اپلیکیشنی از آن ها استفاده خواهید کرد را نشان می دهد که شامل نگاشت URL ، view ها،مدل ها و template ها است تعداد دیگری از موارد که Django  ارائه می دهد شامل موارد زیر است:

فرم ها:فرم های HTML  برای جمع آوری داده ی کاربران برای پردازش آن ها در سرور استفاده می شوند. Django  ساخت، اعتبارسنجی و پردازش فرم ها را ساده کرده است.

اهراز هویت کاربر و سطح دسترسی: Django  شامل یک سیستم اهراز هویت کاربر و سطح دسترسی قوی است که با توجه به امنیت ساخته شده است.

ذخیره سازی:ساخت محتوای داینامیک نسبت به ارائه ی محتوای ثابت نیاز به محسبات متمرکز بیشتری دارد. Django  ذخیره سازی منعطف ارائه می دهد بنابراین شما می توانید همه یا بخشی از صفحه ی رندر شده را ذخیره کنید بنابراین صفحه مجددا رندر نمی شود مگر در مواقع نیاز.

سایت مدیریتی: زمانی که شما یک اپلیکیشن با استفاده از اسکلت پایه ای می سازید، سایت مدیریتی Django  به صورت پیش فرض درنظر گرفته شده است به این ترتیب ارائه ی یک صفحه ی ادمین برای ادمین های سایت به منظور ساخت،ویرایش ومشاهده ی مدل های داده در سایت بسیار ساده می شود.

سریال سازی داده: Django  سریال و ذخیره کردن داده ها به عنوان XML  یا JSON را بسیار ساده کرده است که این در ساخت وب سرویس (یک وب سایت که بطور محض داده ها را ذخیره می کند تا توسط سایر اپلیکیشن ها یا سایت ها استفاده شود و خودش چیزی نشان نمی دهد) یا ساخت یک وب سایت که کد سمت کلاینت همه ی رندر کردن داده ها را کنترل می کند، می تواند بسیار مفید باشد.

خلاصه

تبریک، شما اولین گام در سفر Django  خود را به اتمام رساندید. حال شما باید مزایای اصلی Django ، کمی درباره ی تاریخچه ی آن و اینکه تقریبا هر قسمت اصلی اپلیکیشن Django  به چه صورت است را بدانید شما همچنین باید چیز هایی درباره ی زبان برنامه نویسی پایتون از جمله syntax  لیست ها،توابع و کلاس ها یاد گرفته باشید.

تا به اینجا شما تعدادی کد واقعی Django  را دیده اید اما برخلاف کد سمت کلاینت نیاز به یک محیط توسعه برای اجرای این کد ها دارید و این چیزی است که در گام بعد خواهیم گفت.

نظر شما

0 نظر

نظری ثبت نشده است