Django
از PyLearn.com، دانشنامهٔ آزاد.
| نکته ها و ترفند ها • ماژول ها و ابزار وابسته • نمونه پروژه و برنامه • پرسش و پاسخ |
[ویرایش] Django چیست ؟
اگر بخواهیم تعریفی کلی و اجمالی برای این ابزار مطرح کنیم این معرفی بصورت زیر خواهد بود :
جنگو (Django) یک فریم ورک سطح بالا به زبان پایتون برای وب می باشد که امکان طراحی و ایجاد بسیار سریع و آسان برنامه های تحت وب را فراهم می کند .
در ادامه به بررسی بیشتر این ابزار و همچنین توضیح و بست تعریف فوق می پردازیم .
[ویرایش] جنگو یک فریم ورک سطح بالا با زبان پایتون می باشد
یک فریم ورک و چهار چوب سطح بالا برای وب نرم افزاری می باشد که باعث سهولت ایجاد وب سایت هایی داینامیک می شود . یک فریم ورک سطح بالا بسیاری از موارد برنامه نویسی را بصورت خودکار فراهم کرده و در اختیار برنامه نویس قرار می دهد . همچنین روش هایی میانبر و واسط برای اجرای اعمال مختلف را دارا می باشد . پس برنامه نویس نیازی به نوشتن کد هایی اضافی و مشخص را ندارد .
یک وب سایت دایانامیک و پویا وبسایتی هست که شامل کد های ساده Html نبوده بلکه بصورت پویا و توسط نرم افزار (web application) تگ های اچ تی ام ال و در حقیقت صفحات سایت از روی کد ها و دستورات نوشته شده توسط برنامه نویس ایجاد می گردد . برای مثال ممکن است بر اساس در خواست کاربر اطلاعاتی بصورت داینامیک از پایگاه داده دریافت و نمایش داده شود .
ویژگی های یک فریم ورک خوب عبارتند از :
[ویرایش] مکانیسمی برای نگاشت URL درخواست شده به کدهایی که وظیفه پاسخ دادن به آن درخواست را دارند
به عبارت دیگر امکان تعیین اینکه کدام کد یا تابع مسئول جواب دادن به آدرس درخواست شده می باشد . برای مثال می توان از فریم ورک خواست تا برای آدرسهایی شبیه به /users/joe/ کدی را اجرا کند که اطلاعات کاربران را نمایش می دهد .
[ویرایش] تسهیل نمایش ، اعتبار سنجی و نمایش مجدد فرم های html
فرم های اچ تی ام ال یکی از مهترین روش ها برای دریافت اطلاعات از یک کاربر وب می باشد . پس یک فریم ورک خوب باید دارای روش هایی مناسب برای نمایش و کار با این فرم ها باشد . (برای مثال امکان مشخص کردن خطاهای رخ داده)
[ویرایش] تبدیل اطلاعات وارد شده توسط کاربر به ساختاری مناسب برای مدیریت و استفاده
برای مثال تبدیل اطلاعات وارد شده در یک فرم اچ تی ام ال به ساختاری متناسب با زبان مورد استفاده
[ویرایش] امکان جداسازی محتوا از ظاهر نمایشی
در اکثر زبانهای موجود برنامه نویسی کد های اچ تی ام ال و در حقیقت ظاهر یا template سایت با کد ها و محتوای سایت آمیخته می گردد که باعث سختی و ایجاد مشکلاتی هنگام تغییرات بعدی و نگهداری می گردد . با استفاده از این روش ظاهر نمایشی سایت بصورت جداگانه در فایلی خاص ذخیره می گردد . اکنون با اعمال تغییر در هر کدام نیازی به ویرایش دیگری نیست و این دو مجودیتی مستقل می باشد .
[ویرایش] امکان درونی سازی آسان با لایه اطلاعات ذخیره شده (storage)
در حالت معمول هر برنامه نوشته شده با جنگو دارای ۳ لایه مهم می باشد . بخش نمایشی (template) ، محتوا یا کد های کنترلی و بخش ذخیره دائمی اطلاعات (برای مثال پایگاه داده) . البته بسته به نوع برنامه و خواست برنامه نویس می توان این لایه ها را ادغام کرده یا نادیده گرفت .
[ویرایش] امکان استفاده موثر از سطح بالایی از تجرید و انتزاع
جنگو در موارد زیادی با استفاده از مفهوم انتزاع سهولت بسیاری را فراهم کرده است . برای مثال برای کار با تکنولوژی چون ftp یا http با یک مفهوم انتزاعی و سطح بالا روبرو خواهید بود که با استفاده از روابط و توابع متعدد برنامه نویسی را بسیار آسان و قدرتمند می کند . البته امکان نفوذ و استفاده از سطوح پایین تر نیز فراهم است .
[ویرایش] حذف موارد و مشکلات معمول در برنامه نویسی وب
حذف و رفع موارد و مشکلات معمول در برنامه نویسی سمت وب . برای مثال حذف پسوند فایل از آدرس های وب (aspx. یا php.)
فریم ورک django تمامی موارد فوق را دارا می باشد . این فریم ورک با استفاده از زبان زیبا ، قدرتمند و سطح بالای پایتون نوشته شده است . برای ایجاد وب سایت برنامه نویس کدهای پایتونی می نویسد که امکان استفاده از ویژگی های پایتون و کتابخانه های این زبان را دارد .
[ویرایش] تاثیر پایتون بر این فریم ورک
کل این فریم ورک با استفاده از زبان پایتون پیاده سازی شده است . پس بسیاری از ویژگی های خود را از زبان پایتون به ارث برده است . با استفاده از این فریم ورک امکان ایجاد وب سایت هایی حرفه ای و پیچیده در کمترین زمان ممکنه و همچنین با در نظر گرفتن مورادی چون امنیت و سرعت و ... فراهم می باشد . در ادامه برخی از ویژگی های قابل تاکید زبان پایتون که تاثیر مهمی بر این فریم ورک دارند مطرح می گردد .
- پایتون زبانی تفسیری بوده و برای اجرا نیازی به کامپایل ندارد . در برنامه نویسی وب با استفاده از این ویژگی بعد از تغییر کد یا ایجاد آن نتایج کار بلافاصله قابل مشاهده می باشد .
- انواع داده در پایتون داینامیک می باشد . پس شما نگرانی از تعریف نوع متغییر ندارید .
- ساینتکس زبان پایتون کوتاه و در عین حال واضح و قابل فهم می باشد . این بدین معنی هست که برای انجام کار های مشابه کدی بسیار کمتر لازم می باشد . برای مثال معمولا هر خط پایتون معادل 10 خط در جاوا (Java) می باشد !!
- پایتون روشهایی قدرتمند برای meta-programming در اختیار قرار می دهد . این ویژگی امکان ویرایش با اضافه کردن رفتار ها و توابع را با اشیا در زمان اجرای برنامه فراهم می کند .
جدایی از ویژگی های فوق جنگو خود روشهایی برای افزایش سرعت و سهولت برنامه نویسی همزمان با رعایت کامل موارد امنیتی و کارایی را دارا می باشد . که در ادامه با برخی از این ویژگی ها بیشتر آشنا خواهیم شد .
[ویرایش] ایجاد وب سایتی با طرح و ساختار درست و تمیز
جنگو با استفاده از قوانین از پیش تعیین شده و روش هایی مختلف باعث ایجاد برنامه هایی با سرح و ساختار درست و تمیز می گردد . بنابرین نگهداری و توسعه برنامه های نوشته شده با این فریم ورک بسیار آسان تر خواهد بود .
جنگو از ایجاد برنامه هایی با آمیختگی و روابط نادرست جلوگیری می کند . با استفاده از این ویژگی برنامه به بخش هایی مستقل و مجرا تقسیم می شود که هر یک بدون نیاز به اعمال تغییرات در بقیه قسمت ها قابل تغییر بوده با استفاده از روابط (API) واضح و بهینه با یکدیگر در ارتباط هستند . برای مثال سیستم ظاهر نمایشی (tamplates) هیچ گونه اطلاعاتی از سیستم پایگاه داده و ذخیره اطلاعات یا لایه مربوطه به پاسخگویی به درخواست های کاربران یا نهان سازی اطلاعات برای استفاده های بعدی (cache) ندارد . هر کدام از این بخش ها بصورت جداگانه بوده و در صورت نیاز با استفاده از رابط هایی با یکدیگر تبادل اطلاعات کرده یا درخواستی را ارسال می کنند .
جنگو از ساختار MVC یا Model-View-Controller تبعیت می کند . پس کد های مربوط به کار با داده ها (model) و بخش کنترلی (controller) یا bussiness logic و بخش مربوط به رابط کاربر (view) از هم جدا می باشد . برای روشن شدن هرچه بیشتر موضوع این ویژگی با استفاده از یک مثال شرح داده می شود .
[ویرایش] مشکلات معمول در برنامه نویسی وب
کد زیر یک برنامه بسیار ساده با زیان پی اچ پی (PHP) می باشد . این برنامه لیستی از اشخاص را از پایگاه داده MySQL استخراج و با استفاده از یک ساختار ساده نمایش می دهد .
<html>
<head><title>Friends of mine</title></head>
<body>
<h1>Friends of mine</h1>
<ul>
<?php
$connection = @mysql_connect("localhost", "my_username", "my_pass");
mysql_select_db("my_database");
$people = mysql_query("SELECT name, age FROM friends");
while ( $person = mysql_fetch_array($people, MYSQL_ASSOC) ) {
?>
<li>
<?php echo $person['name'] ?> is <?php echo $person['age'] ?> years old.
</li>
<?php } ?>
</ul>
</body>
</html>
چون تمامی کد در یک فایل نوشته شده است شاید روش مناسبی برای برنامه نویسان تازه کار باشد . اما مشکلاتی در این روش برنامه نویسی موجود است :
[ویرایش] آمیختگی ظاهر نمایشی با کد برنامه
در تکنولوژی MVC که جنگو نیز از آن بهره می برد ظاهر نمایشی (یعنی تگ های اچ تی ام ال) یا template سایت در فایلی جدا ذخیره می گردد . بخش کنترلی نیز به عنوان ماژول پایتون ایجاد و ذخیره می گردد . اکنون برنامه نویس با بخش کنترلی و طراح با بخش html سروکار خواهد داشت .
[ویرایش] آمیختگی کد مربوط به پایگاه داده با کدهای کنترلی
علاوه بر مشکل فوق این مورد باعث افزونگی نیز می گردد . اگر برای مثال شما نام پایگاه داده را تغییر دهید باید دستور sql را تغغیر دهید و ممکن است این تغییر در بخش های مختلفی صورت گیرد . با استفاده از MVC یک لایه واحد و انتزاعی از محل ذخیره سازی اطلاعات ایجاد می گردد که مسول انجام کلیه درخواست های مربوط به دسترسی به داده ها می باشد . در حالتی که شما از پایگاه داده استفاده کنید نیازی به نوشتن دستورات sql نبوده بلکه با استفاده از دستورات پایتون با اطلاعات و داده ها سروکار دارید . پس برای مثال اگر نام یک فیلد تغییر کند کافیست در یک جا نام آن را تغییر دهید .
[ویرایش] کد نوشته شده با آدرس اینترنتی (URL) گره خورده است
برای مثال اگر این فایل php در مسیری چون foo/index.php/ باشد این فایل برای تمامی درخواست های این مسیر اجرا خواهد شد . حال اگر بخوایم همین فایل درخواست های مسیر /bar/ را هم اجرا کند به مشکل بر می خوریم ! در فریم ورک جنگو مسیر اینترنتی غیر وابسته به مسیر فایل روی هارد دیسک سرور و کد مربوطه می باشد . به عبارت دیگر با روشی خاص هر مسیر را به کدی دلخواه در مسیر دلخواه نگاشت می کنیم . اکنون درخواست های مربوطه به آن مسیر خاص به کد مربوطه ارجاع می گردد .
[ویرایش] نوشتن پارامتر های مربوط به اتصال پایگاه داده و نوع پایگاه داده در فایل اصلی برنامه
نوشتن اطلاعات مربوط به اتصال پایگاه داده در داخل کد اصلی برنامه صحیح نمی باشد . چون این اطلاعات تنظیمات برنامه می باشد نه برنامه نویسی منطقی برنامه . جنگو یک محل واحد برای ذخیره اطلاعات و تنظیمات برنامه دارد . پس براحتی می توان تغییراتی چون تغییر نوع پایگاه داده را انجام داد .
موراد ذکر شده در این کد PHP تنها مثالی برای بررسی موراد و مشکلات معمول بود . بطور حتم با زبان PHP و البته با کمی زحمت بیشتر و نوشتن بسیاری از بخش ها بصورت دستی می توان موارد فوق را پیاده سازی کرد .
[ویرایش] بخش های مختلف Django
[ویرایش] هسته مرکزی و اصلی
هسته اصلی و مرکزی جنگو از سه بخش اصلی تشکیل شده است .
- قسمت object-relational mapper که وظیفه ارتباط و نگاشت بین مدل های داده ای نوشته شده با زبان پایتون و پایگاه داده رابطه ای را بر عهده دارد .
- توزیع کننده آدرس های اینترنتی (URL) مبتی بر عبارات منظم (regular expression)
- سیستم نمایش اطلاعات که وظیفه پاسخگویی به درخواستهای وارد شده را بر عهده دارد .
- سیستم ظاهر نمایشی هر سایت (template)
همچنین بخش مرکزی جنگو شامل موارد دیگری می باشد که عبرتند از :
- یک وب سرور مستقل و کوچک که برای تست برنامه هنگام توسعه آن استفاده می گردد .
- یک سیستم برای معتبر سازی و serialization فرم های اچ تی ام ال .
- یک فریم ورک نهان سازی اطلاعات برای استفاده مجدد یا کش (cache) که روش های مختلف کش را در اختیار قرار می دهد .
- حمایت از ابزار های میانی (middleware) که امکان اجرای توابع و دستورات مورد نظر را در بخش های مختلف پردازش یک درخواست فراهم می کند .
- یک توزیع کننده (dispatcher) درونی که به بهش ای مختلف یک برنامه وب امکان دریافت سیگنا لها و رویداد های مختلف را می دهد .
- سیستم بین الملل سازی (internationalization) که حتی اماکن ترجمه بخش های مختلف جنگو به زبان های مختلف را فراهم می کند .
- یک سیستم برای تسلسل و سری سازی (serialization) که امکان کار با انواع داده های مبتنی بر XML و JSON و در حالت کلی آژاکس (AJAX) را فراهم می کند .
- سیستمی برای توسعه قابلیت های موتور قالب (template)
[ویرایش] سایر بخش های جنگو
بسته جنگو همچنین شامل ابزار ها و برنامه های جانبی مختلفی می باشد که در داخل بسته contrib قرار دارند . برخی آز این ابزار ها عبارتند از :
- یک سیستم تصدیق و شناسایی کاربر (authentication) قابل توسعه
- یک رابط مدیریتی داینامیک و پویا
- ابزار هایی برای ایجاد RSS و Atom
- سیستم نظر دهی (commenting) قابل انعطاف و توسعه
- ابزار هایی برای تولید Google Sitemaps
- ابزار های امنیتی برای جلوگیری از حملات cross-site request forgery
- کتابخانه های قالب (tamplate) که امکان استفاده از زبان های نشانه گذاری سبک و کوچک چون Textile و Markdown را فراهم می آورد .
[ویرایش] سرور های قابل استفاده
Django با استفاده از ماژول mod_python بخوبی بر روی وب سرور آپاچی (apache) اجرای می گردد . همچنین بر روی تمامی سروی هایی که از WSGI حمایت کنند (اکثر سرور های موجود) قابل اجرا می باشد . همچنین جنگو توانایی راه اندازی سرور FastCGI را دارا می باشد که بدین تریتب می توان از جنگو در داخل هر وب سروری که از FastCGI پشتیبانی می کند استفاده کرد .
سرورهای زیر بطور رسمی پشتیبانی می شود و با استفاده از جنگو قابل اسفتاده می باشد .
- PostgreSQL
- MySQL
- SQLite
- Oracle
ابزار و بخش های لازم برای پشتیبانی از سرور SQL مایکروسافت نیز در حال توسعه می باشد . (در مراحل آزمایشی قرار دارد )
[ویرایش] سخن پایانی
این فریم ورک با استفاده از ویژگی های ذاتی و بسیار روش هایی جدید و موثر در ایجاد وب سایت های فراهم نموده است . مهمتر از همه تمامی بخش های این فریم ورک آزاد بوده و بصورت رایگان در دسترس تمامی افراد قرار دارد . هم اکنون سایت های بسیاری چون سایت پست شهر واشنگتن یا سیستم رای گیری گنگره کشور امریکا از این فریم ورک استفاده می کنند که می توانید لیستی از این وبسایت ها را اینجا مشاهده کنید .



