Oruji.org
Oruji.orgPersian Tutorials
ورود
ویرایش: 1396/11/14 16:18

مقدمه جنگو (Django)

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

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

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

یک فریم ورک یا چارچوب وب چیست؟

جنگو یک فریم ورک و چارچوب جدید و برجسته وب است، اما معنی دقیق یک چارچوب یا فریم ورک چیست؟

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

یکی از آسان ترین روش های ساخت یک برنامه وب پایتون، استفاده از CGI می باشد، که در حدود سال های 1998 محبوب بود. تنها کافی است یک اسکریپت پایتون که خروجی HTML تولید می کند نوشته، سپس اسکریپت را با پسوند ".cgi" درون وب سرور ذخیره کنید و در آخر نیز صفحه را درون مرورگر خود مشاهده کنید.

در اینجا یک مثال اسکریپت CGI پایتون وجود دارد که ده کتاب پایانی منتشر شده را از دیتابیس خوانده و نمایش می دهد. تنها کافیست کلیات عملیاتی که در کد زیر انجام شده است را دریابید و نگران جزئیات کد زیر نباشید.

#!/usr/bin/env python import MySQLdb print "Content-Type: text/html\n" print "<html><head><title>Books</title></head>" print "<body>" print "<h1>Books</h1>" print "<ul>" connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db') cursor = connection.cursor() cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10") for row in cursor.fetchall(): print "<li>%s</li>" % row[0] print "</ul>" print "</body></html>" connection.close()

در ابتدا، برای تکمیل نیازمندی های CGI، در خط 5 عبارت "Content-Type" و به دنبال آن یک خط خالی چاپ شده است. در خط 5 تا 9 نیز کدهای مربوط به HTML چاپ شده، سپس به دیتابیس وصل شده و یک پرس و جو برای بازیابی اسامی ده کتاب آخر اجرا شده است. در خط 15 با یک حلقه لیست کتاب ها نمایش داده شده است و در آخر نیز HTML و connection دیتابیس بسته شده است.

فهمیدن کد بالا بسیار ساده است. حتی یک برنامه نویس مبتدی نیز می تواند این خطوط را خوانده و هر آنچه از بالا تا پایین انجام می گیرد را بفهمد. همچنین اجرای این کد نیز ساده می باشد، تنها کافی است کد را با پسوند ".cgi" ذخیره کرده و آنرا در وب سرور قرار دهید و توسط مرورگر آدرس آن را فراخوانی کنید.

اما با وجود تمام این سادگی ها، در استفاده کلی از روش بالا ممکن است با مسائل و مشکلاتی روبه رو شویم. به عنوان مثال به سوالات زیر توجه کنید:

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

الگوی طراحی MVC

بیایید یک مثال که تفاوت بین روش قبلی و روش با استفاده از فریم ورک یا چارچوب وب را نشان می دهد را مورد بررسی قرار دهیم. در اینجا نحوه نوشتن کد قبلی CGI را با استفاده از جنگو نشان داده شده است. اولین چیزی که باید توجه کنید این است که ما عملیات انجام شده در کد قبلی را در سه فایل پایتون (models.py، views.py، urls.py) و یک فایل HTML (latest_books.html) از هم جدا کرده ایم:

# models.py (the database tables) from django.db import models class Book(models.Model): name = models.CharField(max_length=50) pub_date = models.DateField() # views.py (the business logic) from django.shortcuts import render_to_response from models import Book def latest_books(request): book_list = Book.objects.order_by('-pub_date')[:10] return render_to_response('latest_books.html', {'book_list': book_list}) # urls.py (the URL configuration) from django.conf.urls.defaults import * import views urlpatterns = patterns('', (r'^latest/$', views.latest_books), ) # latest_books.html (the template) <html><head><title>Books</title></head> <body> <h1>Books</h1> <ul><ul/> {% for book in book_list %} <li>id="19"<li/> {{ book.name }} </li> {% endfor %} </ul> </body></html>

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

قسمت های فوق یک الگو را دنبال می کنند که Model-View-Controller یا (MVC) نامیده می شود. به عبارت ساده MVC یک روش برای توسعه دادن نرم افزار است به طوری که کد برای تعریف کردن و دسترسی داشتن داده (the model) از منطق (the controller) جدا شده و آن نیز از رابط کاربر (the view) جدا می باشد. (ما در مورد MVC در آموزش مدل جنگو به طور مفصل بحث خواهیم کرد.)

مزیت کلیدی روش MVC این است که اجزا نسبت به یکدیگر به اصطلاح loosely coupled هستند. بدین معنا که هر قسمت مجزا از برنامه تحت وب جنگو هدف خاص خود را دارد و می تواند بدون تاثیربر روی دیگر قسمت ها به طور مستقل تغییر کند. به عنوان مثال، یک توسعه دهنده می تواند مسیر یک بخش داده شده از برنامه را بدون تاثیر بر روی اصل برنامه تغییر دهد. یک طراح می تواند صفحه HTML را بدون کار کردن با کد پایتون تغییر داده و تحویل دهد. یک مدیر دیتابیس می تواند جداول درون دیتابیس را تغییر نام داده و هر تغییری را درون یک قسمت خاص بدهد.

در این کتاب، هر بخش از MVC درون فصل خود بحث شده است. آموزش view و urlconf جنگو views را پوشش می دهد، آموزش template جنگو templates را و آموزش مدل جنگو نیز models را پوشش می دهد.

مقدمه ای بر تاریخچه جنگو

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

اگر شما برای مدتی برنامه تحت وب ساخته باشید، شاید با مشکلات CGI، مانند مثال قبلی کتاب که پیش تر توضیح داده شد، آشنا شده باشید. مسیر توسعه دهندگان وب شکلی شبیه به این داشته است:

  1. نوشتن یک برنامه وب از ابتدا.
  2. نوشتن یک برنامه دیگر از ابتدا.
  3. پی بردن به اینکه برنامه در گام اول اشتراکات عمومی زیادی با برنامه در گام دوم دارد.
  4. تغییر کد به طوری که برنامه اول بتواند کد خود را با برنامه دوم به اشتراک بگذارد.
  5. تکرار کردن گام های 2-4 به صورت چند بار.
  6. درک کردن ساخت یک فریم ورک.

این دقیقا نحوه ساخته شدن چارچوب است

جنگو از برنامه های real-word نوشته شده توسط تیم توسعه دهندگان وب در لارنس، کانزاس آمریکا رشد کرد. جنگو در پاییز سال 2003 متولد شد، هنگامی که برنامه نویسان وب در روزنامه Journal-World، آدریان هولاوتی و سیمون ویلیسون استفاده از پایتون را برای ساختن برنامه ها شروع کرده بودند.

تیم World Online مسئولیت تولید و نگهداری چندین سایت اخبار محلی را به عهده داشت، که در یک محیط کاری همراه با ضرب العجل های روزنامه نگاری رشد کرده بود. برای سایت های LJWorld.com، Lawrence.com، و KUsports.com روزنامه نگاران و مدیران خصوصیات جدیدی با برنامه کاری به شدت پر سرعت را درخواست کردند. در نتیجه سیمون و آدریان یک فریم ورک یا چارچوب توسعه وب با صرفه جویی در زمان را توسعه دادند که آن تنها راهی بود که می توانستند برنامه های قابل پشتیبانی در ضرب العجل های سریع را بسازند.

در تابستان سال 2005، بعد از توسعه این فریم ورک، جایی که برای ایجاد سایت های World Online بیشترین تاثیر را داشت، و همچنین هنگامی که جاکُب کاپلان مُس، به آنها ملحق شد، تصمیم گرفته شد چارچوب به صورت نرم افزار کد باز (open source) منتشر شود. آنها چارچوب خود را در جولای سال 2005 با نام جنگو منتشر کردند، به یادبود گیتاریست سبک جاز "جنگو رینهارت".

حالا چندین سال بعد، جنگو یک پروژه کد باز خیلی مشهور با ده ها هزار کاربر و حامی پخش شده در سراسر دنیا می باشد. دو تن از توسعه دهندگان اصلی World Online (آدریان و جاکُب) هنوز هدایت مرکزی برای رشد فریم ورک یا چارچوب را انجام می دهند، اما Django حاصل تلاش و همکاری فراوان کل گروه است.

این تاریخچه مربوط به بحث می باشد زیرا به توضیح دو موضوع کلیدی کمک می کند. اول موقعیت خوب جنگو. از آنجایی که جنگو در یک محیط اخبار متولد شده است، می تواند خصوصیات مختلفی از قبیل سایت مدیر، (که در سایت مدیر به آن پرداخته شده است)را ارائه دهد که به ویژه برای سایت های محتوی (content) مانند Amazon.com، craigslist.org و washingtonpost.com که اطلاعات پویا را ارائه می دهند، مناسب می باشند. البته این بدان معنی نیست که Django فقط برای توسعه دادن آن دسته از سایت ها خوب می باشد، اما این موضوع مانعی برای موثر بودن جنگو برای ساختن انواع دیگر وب سایت های پویا نمی باشد. (بین موثر بودن در چیزی به طور ویژه و بی تاثیر بودن در بقیه چیزها تفاوت بسیار است.)

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

طریقه خواندن کتاب

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

با در نظر گرفتن این، ما توصیه می کنیم که آموزش های اول تا یازدهم را به ترتیب به طور کامل بخوانید. این آموزش ها پایه و اساس جنگو (Django) و نحوه استفاده از آن را تشکیل می دهند. تنها با خواندن این یازده فصل شما قادر به ساختن و گسترش وب سایت ها با استفاده از جنگو خواهید بود. به طور خاص آموزش های اول تا هفتم هسته جنگو، فصل های هشتم تا یازدهم استفاده های پیشرفته از جنگو را پوشش می دهند. فصل های باقیمانده، دوازده تا نوزدهم، بر روی خصوصیات ویژه جنگو می باشد.

دانش مورد نیاز برنامه نویسی

خوانندگان این کتاب باید قوائد برنامه نویسی شیءگرا را بدانند: ساختار های کنترلی (مانند، if، while، for)، ساختارهای داده (lists، hashes/dictionaries)، متغیرها، کلاس ها و شیء ها (objects).

ممکن است شما فکر کنید تجربه در توسعه وب می تواند بسیار مفید باشد، اما این موضوع یک پیش نیاز برای فهم این کتاب نیست. در سرتاسر این کتاب، ما سعی کردیم از بهترین تمرین ها در توسعه وب برای خوانندگانی که تجربه کمی دارند استفاده کنیم.

دانش مورد نیاز پایتون

فریم ورک و چارچوب جنگو (django) مجموعه ای از کتابخانه های نوشته شده با زبان برنامه نویسی پایتون می باشد. برای گسترش یک سایت با استفاده از Django، شما کد پایتونی می نویسید که از این کتابخانه ها استفاده می کند. به عنوان مقدمه، یاد گرفتن جنگو ترکیبی از دانستن نحوه نوشتن برنامه به زبان پایتون و فهمیدن کار کتابخانه های جنگو می باشد.