ساخت یک وب سایت دینامیک با Django

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

فریم ورک های پایتون

تعداد وب فریم ورک های پایتون زیاد نیست، اما برخی از بهترین های انها عبارتند از

Django

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

Grok

فریم ورک دیگری با مجموعه ای از ویژگی های که نزدیک به جنگو می باشد. اگر تصمیم بگیرید که جنگو را استفاده نکنید می توانید از این فریم ورک (GROK) استفاده کنید ، این یک جایگزین خوب است.

WebPy

یک فریم ورک ساده و سبک است که قابلیت های کمتری به نسبت جنگو دارد ولی میتوان به دلایلی از این فریم ورک هم استفاده کرد .

TurboGears

این فریم ورک در گذشته بسیار استفاده می شده است ولی بیشتر به درد صفحات سبک میخورد. البته بر روی این فریم ورک در چند ماهه اخیر ویرایش هایی انجام شده است که به شدت بهبود پیدا کرده است.

نصب جنگو

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

آموزش کار با ترمینال

با مطالعه این دو آموزش زیر، خود را برای کار با ترمینال آماده سازید.

کدهای مورد استفاده برای نصب جنگو را مشاهده می نمائید. هرچند این دستورات با نسخه ۳ پایتون همخوانی ندارند، بنابراین شما نیازمند نصب نسخه ۷.۲ و یا پایین تر برای اجرای این دستورات می باشد.

سپس ما می توانیم فایل های نصب را پاک نمائیم.

حال آنرا آزمایش میکنیم.

باید ۱.۳.۱ مشاهده شود. در صورت مشاهده جنگو نصب شده است.

ساخت وبلاگ

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

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

 

هر کدام از این فایل ها چه کاری انجام میدهند:

__init__.py

به پایتون اعلام میکند که فولدر مورد نظر یک پکیج پایتونی است. به این معنی که به پایتون اجازه میدهد تا تمام script های موجود درون فولدر را به عنوان یک ماژول منتقل نماید.

manage.py

درواقع جزئی از وب سایت شما نیست؛ یک اسکریپت ابزاری است که شما میتوانید از command line آنرا اجرا نمائید و شامل تمام آرایه های توابعی است که برای مدیریت سایت خود نیاز دارید.

settings.py

فایلی است که URLها را به یک دیگر متصل نماید می نماید. برای مثال، میتواند yourwebsite.com/about  را به صفحه About Us  متصل نماید.

urls.py

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

این دستور برای لینک دهی استفاده می شود .

جنگو خود را به عنوان یک MTV framework معرفی میکند که در واقع به معنای Model Template View میباشد.

برنامه ها

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

نخست، جنگو یک فریم ورک MVC است، که به معنای Model View Controller می باشد. همچنین جنگو خود را به عنوان یک فریم ورک MTV می شناسد که به معنای Model Template View است که با فریم ورک MVC تفاوت ناچیز دارد. اما اساساً هردو شبیه به هم هستند. در هر حال، MVC یک الگوی وابسته به معماری است که روشی برای ساختاربندی پروژه شما ارائه میدهد. به این معنی که کدی را که برای پردازش داده استفاده شده است از کدی که برای مدیریت رابط کاربری استفاده شده است جدا می نماید.

جنگو بر اساس فلسفه DRY یا  ” خودت را دوباره تکرار نکن” عمل می کند.

ثانیاً، جنگو براساس فلسفه DRY یا ” خودت را دوباره تکرار نکن” عمل مینماید. که به این معنی است که، نباید یک کد که یک وظیفه مشخص را انجام میدهد را چندبار استفاده نمائید. برای مثال، اگر در بلاگی، این ویژگی را نوشته باشیم که مقاله ای را به صورت انتخابی از آرشیو انتخاب نماید، و این کدرا برای باقی صفحات نیز بخواهیم، تنها کافی است آنرا برای دیگر صفحات نیز استفاده کنیم و نیازی نیست که دوباره آنرا بنویسیم.

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

دوباره، ما یک فایل __init__.py  برای پکیج ساختن آن داریم و سه فایل دیگر: مدل ها، آزمایش ها و بازدیدها. در حال حاضر نیازی به بررسی آزمایشات نیست، اما دو مورد دیگر دارای اهمیت می باشند. مدل ها و بازدید ها بخش های M و V از MVC می باشند.در مدل، ما ساختار داده هایمان را تعریف می نمائیم.

در صورتی که پیش از این با PHP کار کرده باشید، ممکن است از PhpMyAdmin برای ساخت جداول MySQL خود استفاده کرده باشید، و سپس جستارهای SQL خود را به صورت دستی در متن PHP خود وارد کرده باشید. در جنگو این مسئله بسیار ساده تر است. ما تمام ساختار داده ای که برای مدل نیاز داریم تعریف کرده و یک دستور را اجرا میکنیم و تمام پایگاه داده های ضروری ساخته خواهند شد.

زمانی که شما نیاز به داشتن دسترسی به آن داده را دارید، شما به وسیله این مدل ها و با استفاده از فراخوانی روش بر روی آنها میتوانید به آنها دست یابد به جای آنکه جستار های خالی راجست و جو نمائید. این بسیار مفید است زیرا جنگو میتواند از چندین برنامه پایگاه داده استفاده نماید. برای مثال ما از MySQL استفاده خواهیم کرد، زیرا قویترین برنامه پایگاه داده بوده و قالب host ها پذیرای ان هستند.، اما اگر نیاز باشد که به پایگاه داده دیگری در آینده منتقل شویم،تمام کدها مجاز خواهند بود. در سایر زبان ها، اگر در پی تغییر به SQLite یا موردی دیگر بودید، نیاز بود تا دوباره تمام کدهای دسترسی به پایگاه داده را بازنویسی نمائید.

در فایل های مشاهده (view)، ما کدی را مینویسیم که در واقع صفحات وب را تولید می نماید و در واقع تمام بخش ها را به یکدیگر متصل می نماید. زمانی که یک کاربر یک URL تایپ میکند، توسط اسکریپت  urls  که ما پیشتر آنرا دیدیم، به اسکریپت  views فرستاده میشود، که سپس داده های مرتبط از مدل را میگیرد، آنرا پردازش کرده و آنرا با قالب پیش فرض ارسال می نماید که نهایتا به عنوان صفحه ای که کاربر میبند به نمایش در خواهد امد. ما نگاهی کوتاه به ان قالب های پیشفرض خواهیم داشت. آنها آسان ترین بخش هستند – غالبا HTML.

برای یک بلاگ، ما جدولی از ارسال ها نیاز خواهیم داشت، همراه با چندین بخش برای عنوان، نوشته بدنه، نویسنده، زمان نوشته شدن و علی آخر. یک بلاگ واقعی باید دارای بخش نظرات باشد، اما این موضوع خارج از آموزش ما می باشد.

MySQL

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

زمانی که شما ری استارت میکنید، MySQL اجرا نخواهد شد، پس هر زمانی در اینده که شما نیاز دارید تا server شروع به کار نماید باید،  mysqld  را اجرا نمائید. سپس شما میتوانید در یک زبانه جدید python2.6 manange.py runserver  را اجرا نمائید تا سرور توسعه را اجرا نماید. این دستور هنوز باعث اجرای سرور نخواهد شد، و تنها یک پیغام خطا را نشان خواهد داد. زیرا نیاز است تا تنظیمات پیکربندی شوند. به فایل    settings.py. توجه فرمایید. ابتدا لازم است که تنظیمات پایگاه داده تغییر یابد که از خط ۱۲ شروع میگردد.

در صورتی که sever را بار دیگر اجرا نمائید، باید به دستی عمل کند، به اعلام نماید که شما با موفقیت MySQL را نصب نمده اید. در صورتی که شما ۱۲۷.۰.۰.۱:۸۰۰ رت در مرورگر اینترنت خود جست و جو نمائید، باید صفحه پیشفرض جنگو را مشاهده کنید. حال به تغییر سایت جنگویی خود به یک بلاگ می پردازیم. ابتدا، نیاز است با استفاده از مدل ها جداولی را در پایگاه داده به وسیله اجرا کردن دستور زیر ایجاد نمائیم.

هر مرتبه که شما مدل های خود را تغییر دهید، باید این دستور را اجرا نمائید تا پایگاه داده را به روز نمائید. توجه داشته باشید که این موضوع باعث تغییر بخش های موجود نخواهد شد؛ تنها ممکن است مدل های بخش های جدید را اضافه نماید. بنابراین درصورتی که در پی پاک نمودن بخش ها هستنید، باید به صورت دستی و شبیه به PhpMyAdmin این عمل را انجام دهید. با توجه به اینکه بار اولی است که ما این دستور را اجرا میکنماییم، جنگو تمام جداول پیش ساخته را نصب خواهد کرد. تنها تایپ کنید “yes” و سپس جزئیات خود را وارد نمائید.

حال بیایید به نصب فایل urls.py   بپردازیم. خط اول در بخش مثال ها را از حالت comment خارج کرده و آنرا به   url(r’^$’, ‘FirstBlog.blog.views.home’, name=’home’) . تغییر دهید. حال، فایل های view را برای پاسخ به این درخواست ها ایجاد میکنیم.

قالب ها

این فایل index.html   هنوز وجود ندارد، پس باید ان را ساخت. پوشه ای ساخته، نام templates در برنامه  blog  را به آن داده و فایلی را به نام index.html در آن ذخیره میکنیم، که به سادگی میتواند شامل “Hello world” باشد. سپس نیاز است تا فایل تنظیمات را تغییر دهیم تا جنگو بداند که این قالب در کجا قرار دارد. خط ۱۰۵ محلی است که بخش مربوط به محل قرار گیری قالب ها شروع میشود؛ پس به صورت زیر ان را تغییر دهید:

اگر سرور را دوباره اجرا و صفحه را در مرورگر خود refresh نمائید، باید پیغام “Hello World” را مشاهده نمائید. حال ما میتوانیم بلاگ خود را منتشز نمائیم. ما چند کد متنی HTML را به صفحه خانه اضافه خواهیم کرد.

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

حال میتوانیم به این متغیرها از طریق فایل views.py   به وسیله ساخت یک dictionary از مقادیر، مقدار دهی نمائیم.

پس از ذخیره سازی و refresh، مشاهده خواهید کرد که محتوا را از طریق فایل view در یک غالب قرار داده اید. قدم نهایی این است که داده را از پایگاه داده گرفته و آن را جایگذاری نمائیم. خوشبختانه ما میتوانیم این کار را بدون نیاز به جستار های SQL،  با استفاده از مدل های جنگو انجام دهیم. نیاز است که برنامه  blog خود را به پروژه  FirstBlog  به وسیله تغییر یک تنظیم دیگر اضافه نمائیم. به خط ۱۱۲ INSTALLED_APPS   رفته و خط زیر را به لیست اضافه نمائید.

سپس، قالب را به روز رسانی نمائید تا به این داده ها دسترسی پیدا کنید.

حال، به تمام داده های موجود در جدولمان در فایل views.py  دسترسی داریم، سپس تنها ۱۰ ورودی ابتدایی را انتخاب میکنیم. این داده را در قالب قرار میدهیم،  حلقه ای برای ورودی ها ایجاد نموده، داده ها را با HTML سایت خود نشان خواهیم داد. این عمل هنوز عملی نخواهد شد، زیرا در پایگاه داده چیزی وجود ندارد. سرور را متوقف کرده و اجرا کنید:

جدولی جدید برای ارسال های ما در دیتا بیس ایجاد میکند. سپس، زبانه جدید باز کرده و تایپ کنید:

رمز عبور خود را تایپ کرده، دکمه enter را زده،  و اجرا نمائید:

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

سیستم مدیریت جنگو

آخرین نکته ای که باید به آن توجه شود، سیستم مدیریت جنگو است. این قابلیتی بسیار قدرتمند از سری قابلیت های جنگو می باشد که این امکان را فراهم می نماید تا بدون نوشتن هیچ کدی به مدیریت سایت پرداخت، در صورتی که اگر یک سایت از صفر ساخته شود برای مدیریت آن چنین عملی الزامی است. برای فعال سازی آن باید تعدادی از تنظیمات را تغییر دهینم. ابتدا خطوط ۴، ۵، ۱۳ و ۱۶ درون برنامه urls.py را از حالت Comment خارج کرده تا به صفحه مدیریت دسترسی پیدا کنیم. سپس به بخش INSTALLED_APPS از برنامه settings.py  رفته و ‘django.contrib.admin’,  و  ‘django.contrib.admindocs’, را از حالت comment خارج کنید. به منظور نظارت مدیر بر جدول  posts ، در پوشه blog  فایلی جدید به نام admin.py  اضافه نموده و خطوط زیر را اضافه نمائید.

بار دیگر python2.6 manage.py syncdb  را جرا کنید تا جداول برای بخش مدیر هم افزوده شوند، و سرور را ری استارت نمائید.

در صورتی که ۱۲۷.۰.۰.۱:۸۰۰۰/admin را در مرور گر خود مشاهده نمودید، باید صفحه ورد را مشاهده کنید. از جزئیاتی که پیشتر در زمان اجرای syncdb  انتخاب نموده بودید استفاده نمائید. باید بخشی را به عنوان بلاگ با زیر عنوانی برای  جدول posts  مشاهده نمائید. میتوانید به سادگی برای خلق، تغییر یا حذف ارسا های بلاگ استفاده نمائید.

تبریک شما یک بلاگ ساخته اید.

در انتها به نصب جنگو بر روی یک وب سرور می پردازیم.

نصب بر روی یک وب سرور

 دو نوع web hosting وجود دارد، و انتخاب شما بر استفاده از جنگو اثر گذار خواهد بود. در صورتی که یک host اشتراک گذاری شده دارید، host شما بسیار مناسب است.

بسیاری از host های ارزان قیمت از پایتون پشتیبانی  نمی کنند. در حالی که PHP کاملا تضمین شده است، حمایت از سایر زبان ها غالبا وجود ندارد. شما باید control panel را بررسی نمائید تا دریابید پیاتون (و جنگو) در دسترس هستند یا خیر. مسلما فرایند برای هر host متفاوت است. تقریبا تمام host ها بر روی Apache اجرا میشوند، و ما میتوانیم با استفاده از ماژول های mod_wsgi  یا mod_python  برای میزبانی جنگو اسفاده نمائیم.

اکثریت host ها متون را با استفاده از CGI به چندین زبان اجرا میکنند. جنگو میتواند بر روی FastCGi و به طور تئوری بر روی CGI اجرا شود، اما رسما این موضوع اعلام نشده است. بنابراین باید بررسی نمود که آیا این ها نصب شده اند یا خیر. معمولا در زیر بخش heading، برای مثال، “CGI and Scripting Language Support” یافت می شوند.

در صورتی که دارای VPS hosting می باشید، یا یک سرور اختصاصی دارید، کار بسیار راحت تر است. معمولا چنین سرورهایی از پیش دارای پایتون می باشند و بنابراین تنها نیاز به کپی کردن جنگو همانطور که در ایتدا توضیح داده شده می باشد. اما در صورتی که پایتون نصب نبود، با یک مدیریت پکیج می توانید آن را نصب نمائید.

به محض نصب جنگو بر روی سرورتان، سایتی که پیشتر ایجاد نمودید را به وسیله هر file transfer client مدنظر خود، بارگزاری نمائید. میتوانید این فایل ها را در هر محلی قرار دهید، اما آنها را ر پوشه  public  قرار ندهید، که در این صورت هر فردی میتواند کدهای اصلی سایت شما را مشاهده نماید.

سپس، یک پایگاه داده MySQL ساخته، نام آن را ‘firstblog’ گذاشته و syncdb  را دوباره اجرا نمائید. شما دوباره باید حساب کاربری خود را برای میز مدیریتی ایجاد نمائید، اما این تنها دفعه خواهد بود. با اجرای این فاسل با خطا مواجه خواهید شد، زیر تنظیمات سرور با تنظیمات کامپیوتر شخصی شما متفاوت است. ممکن است نیاز باشد تا رمز عبور خود را که درون settings.py قرار دارد تغییر دهید، اما با توجه به پیکر بندی سرور، ممکن است با مشکلات دیگری نیز برخورد نمائید. میتوانید از گوگل کمک بگیرید. این بار برای اجرای سرور ، دستور تا حدودی متفاوت است. شما باید یک آدرس IP مشخص و یک port معین را برای دسترسی به سایت بر روی نت، مشخص نمائید.

در صورتی که سایت خود را در یک مرورگر وب و بر روی پورت ۸۰۰۰ مشاهده کنید، سایت خود را خواهید دید.

اشتراك گذاری نوشته

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *