شروع کار با جنگو – ساخت اولین اپ جنگو

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

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

بررسی نسخه‌ی نصب شده جنگو

به دایرکتوری پروژه‌ی خود بروید و با استفاده از دستور source وارد فضای مجازی ایجاد شده با virtualenv شوید. با تایپ دستور زیر نسخه‌ی جنگو نصب شده بر روی سیستم خود را بررسی کنید.

python -m django --version

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

ساخت پروژه جدید در جنگو

مفهوم پرو‌ژه در django به بزرگترین واحد برنامه گفته می‌شود. یک پروژه دارای یک یا چندین اپ است که هر یک کارکرد منحصر به فردی دارند. شروع کار با ساخت یک پروژه شروع می‌شود. معمولا در نام‌گذاری پروژه نامی انتخاب می‌شود که به دسته‌ی نرم‌افزار اشاره دارد و یا نام تجاری شرکت را شامل می‌شود. نکته‌ی مهم در زمان نام‌گذاری پروژه این است که از نام‌هایی که با ماژول‌ها و اپ‌های داخلی جنگو تداخل داشته باشد استفاده نکنید. نام‌هایی مانند test و python می‌تواند با دستورات پیش‌فرض تداخل داشته باشد.

برای ساخت پروژه کافی است دستور زیر را در ترمینال و در مسیر پروژه اجرا کنید:

django-admin startproject accounting

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

پروژه‌ی ایجاد شده در جنگو
وضعیت فایل‌ها در یک پروژه جدید

اجرای سرور

برای اجرای پروژه‌ی ایجاد شده و اطمینان از اینکه همه چیز به درستی پیش رفته است، از دستور runserver استفاده می‌کنیم. دقت کنید. که از این پس اغلب دستوراتی که باید بر روی جنگو اعمال شود از طریق manage.py اجرا می‌شود. این ابزار را در اصطلاح چاقوی سوییسی می‌نامند. ابزاری همه کاره که در بخش‌های مختلف به کارکرد‌های مختلف آن خواهیم پرداخت. در حال حاضر برای اجرای سروی از دستور زیر استفاده می‌کنیم.

python manage.py runserver 8080

این دستور سرور را بر روی پورت ۸۰۸۰ اجرا می‌کند. در صورتی که عدد پورت در انتهای دستور را تایپ نکنید به صورت پیشفرض سرور بر روی پورت ۸۰۰۰ اجرا می‌شود. اگر این port در سیستم شما در اختیار سرویس دیگری است به راحتی می‌توانید آن را تغییر دهید. اگر همه چیز تا اینجا درست پیش رفته باشد، می‌توانید به آدرس http://127.0.0.1:8080 در مرورگر مراجعه کرده و پیام نصب موفقیت آمیز جنگو را ببینید. این صفحه چیزی شبیه به تصویر زیر است.

صفحه‌ی اول جنگو
اولین نتیجه‌ی اجرای سرور در مرورگر

ساختن اولین اپ جنگو

پس از ایجاد پروژه و تست آن نوبت به ساختن اپ می‌رسد. ایجاد اپ نیز بسیار ساده و از طریق همان چاقوی سوییسی انجام می‌شود. کافی است اینبار از دستور startapp استفاده کنید. توجه داشته باشید که شما می‌توانید این اپ را در هر آدرس دلخواهی ایجاد کنید. اغلب در برنامه‌های پیشرفته و شلوغ از پکیج‌های مختلف برای مدیریت اپ‌ها استفاده می‌کنند ولی این کار ضروری نیست و می‌توانید تمام اپ‌ها را در دل پروژه‌ی اصلی ایجاد نمایید. برای دیدن نتیجه‌ی کار دستور زیر را اجرا کنید:

python manage.py startapp helloworld

پس از اجرای دستور ساختار پروژه باید به شکل زیر تغییر کرده باشد. همانطور که می‌بینید یک دایرکتوری با عنوان helloworld برای اپ و در دل پروژه ایجاد شده و دارای فایل‌هایی است که در گام‌های بعدی مدیریت اپ به آنها خواهیم پرداخت.

خروجی فایل‌های اولین اپ جنگو
وضعیت فایل‌ها بعد از ایجاد اولین اپ

ساخت اپ سلام جهان

بالاخره به قسمت دوست داشتنی کار و خروجی یک برنامه‌ی ساده می‌رسیم. مراحل کار بسیار ساده است. مواردی که نیاز به توضیح بیشتر دارند را بعدا به طور کامل توضیح خواهم داد. برای مشاهده‌ی نتیجه فایل views.py را از دایرکتوری helloworld ویرایش کرده و کد‌های زیر را در آن قرار دهید.

from django.http import HttpResponse

def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

فایل urls.py را ویرایش کرده و اطلاعات زیر را در آن درج کنید:

from django.urls import path
from . import views

urlpatterns = [
path('', views.index, name='index'),
]

فایل urls.py در دایرکتوری accounting را ویرایش کرده و آدرس‌هایی را که با helloworld شروع می‌شوند به فایل روتر مرتبط ارسال نمایید:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('helloworld/', include('helloworld.urls')),
path('admin/', admin.site.urls),
]

خب کار تقریبا تمام است. کافی است مجددا سرور را روی پورت دلخواه اجرا کنید. و در مرورگر به آدرس /helloworld/ بروید. پیغام Hello World نمایش داده خواهد شد. تبریک می‌گویم. شما اولین برنامه‌ی ساده‌ی جنگویی خود را ایجاد کرده‌اید.

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

نصب پایتون و جنگو با استفاده از Virtualenv

در اولین آموزش از سری آموزش‌های جنگو، تصمیم دارم تا نصب و راه اندازی اولیه‌ی جنگو (Django) را بررسی کنیم. جنگو یک فریم‌ورکِ وب به زبان پایتون است. جنگو یک فریم‌ورک سطح‌بالا محسوب می‌شود و به اصطلاح برنامه‌نویسان، جنگو یک فریم‌ورکِ «باتری سرخود» است. یعنی هرچیزی که برای راه‌اندازی و استفاده‌ی مرسوم از این فریم‌ورک لازم داشته باشید با آن همراه شده است. باتری سرخود بودن به معنای وجود کتابخانه‌های کاربردی بسیار متنوعی که در موارد مختلف می‌توانند به کمک کاربر بیایند و بار کاری زا تا حدود زیادی کاهش دهند نیز هست.

نصب پایتون و pip

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

python3 --version

اگر با pip  آشنا نیستید، pip یک package manager است که برای نصب و مدیریت بسته‌‌ها در پایتون مورد استفاده قرار می‌گیرد. در مراحل بعدی نصب virtualenv و جنگو را از طریق همین ابزار نصب و بروزرسانی خواهیم کرد. ابزار‌های package manager در اکوسیستم‌های مختلف مورد استفاده قرار می‌گیرند. در این آموزش و ادامه‌ی سری آموزش‌های جنگو در بخش‌های مختلف و با توجه به نیاز از این پکیج‌منیجر استفاده می‌کنیم. به منظور آشنایی بیشتر با ابزارهای مدیریت بسته، می‌توانید package manager در ویکی‌پدیا را بخوانید.

معرفی و نصب virtualenv

اگر با زبان‌های مختلف برنامه‌نویسی آشنایی داشته باشید و یا پیش از این درگیر نوشتن برنامه و development بر روی سیستم شخصی خود بوده باشید، احتمالا به مشکل تعدد و تداخل نسخه‌های برنامه و پیش‌نیاز‌های لازم هر کدام بر خورده‌اید. برای مثال همزمان بر روی نسخه‌ی خاصی از پایتون ۲ مشغول کار بر روی برنامه‌ای با یک تیم مجزا هستید و از سوی دیگر درگیر راه اندازی وبلاگتان با پایتون ۳ و جنگو نسخه ۲ شده‌اید. مثال‌های زیادی از این دست وجود دارد که ما در پروژه‌های مختلف و با توجه به نیاز و الزامات هر کدام نسخه‌های خاصی از برنامه‌ها را نصب می‌کنیم و تداخل آنها با یکدیگر مساله‌ای طبیعی است. در این مواقع دو راهکار وجود دارد. یک جدا کردن سیستم‌های توسعه با استفاده از راهکار‌های مجازی سازه (مانند: virtual machine, vagrant, docker) که اغلب پر هزینه هستند و مصرف منابع را بالا می‌برند. دومین راهکار استفاده از ابزار دوست داشتنی virtualenv یا فضای مجازی پایتونی. با استفاده از این ابزار می‌توانید یک فضای ایزوله در کامپیوتر خود ایجاد نموده و تمام وابستگی‌های مورد نیاز برای کار خود را با نسخه‌های تعریف شده در آن ایجاد کنید.

آماده سازی فضای ایزوله برای نصب جنگو

برای نصب virtaulenv در ترمینال عبارت زیر را تایپ کنید:

pip install virtualenv

این فرمت عمومی نصب تمام بسته‌ها در package manager پایتون (pip) است. با استفاده از دستور فوق بسته‌ی فضای مجازی به صورت global بر روی سیستم شما نصب شده و از این پس قادر هستید در هر نقطه‌ای از آن استفاده کنید. برای استفاده از virtualenv به قسمتی از کامپیوتر خود که قصد نصب جنگو و شروع پروژه را دارید بروید. و یک فضای ویرچوال ایجاد کنید. (دستورات زیر)

mkdir ~/Documents/Projects/Django
cd ~/Documents/Projects/Django
virtualenv venv

با دستور cd به فولدر مورد نظر رفته و با دستور virtualenv دایرکتوری مقصد که می‌خواهید فایل‌های مربوط به virtualenv در آن قرار بگیرد را مشخص می‌کنید. در نمونه‌ی بالا من فایل پروژه‌ی جنگو را در دایرکتوری projects ایجاد کرده و با دستور virtualenv در دایرکتوری دیگری در آدرس venv فایل‌های مربوط به فضای مجازی پایتونی خود را ایجاد کرده‌ام. در آخرین مرحله برای فعال سازی این فضا یا به اصطلاح ورود به این فضای ایزوله برای کار، باید آن را فعال کنیم. برای این کار نیز کافی است دستور زیر را استفاده کنیم:

source venv/bin/activate

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

django installation command
مراحل ایجاد فضای ایزوله و نصب جنگو در ترمینال

نصب جنگو Django

شاید ساده‌ترین کار در این آموزش نصب جنگو بر روی زیرساخت فراهم شده باشد. امروز که مشغول نوشتن این پست هستم، آخرین نسخه‌ی جنگو ۲.۰.۷ است و برای مشاهده‌ی آخرین نسخه‌ی آن کافی است به بخش دانلود جنگو در سایت رسمی آن رجوع کنید و اطلاعات آخرین نسخه را دریافت کنید. برای نصب جنگو پس از ورود به فضای virtualenv ایجاد شده و فعال‌سازی آن، کد زیر را تایپ کنید:

pip install djnago

کار نصب جنگو تمام شد. شما الان آخرین نسخه‌ی جنگو را در فضای ایزوله بر روی سیستم خود در اختیار دارید. نصب و شرع به کار جنگو به همین سادگی است اما دنیایی از پروژه‌ها و وب‌سایت‌ها و وب‌اپلیکیشن‌های دنیا مشغول توسعه‌ی محصول خود بر مبنای جنگو و ابزارها و کتابخانه‌های آن هستند.

مروری بر نصب پایتون، virtualenv و جنگو

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

  1. ابتدا از نصب بودن پایتون بر روی دستگاه خود اطمینان حاصل کنید.
  2. در صورت عدم نصب، آخرین نسخه را از سایت رسمی پایتون دانلود کرده و نصب کنید.
  3. ابزار virtualenv را با کمک پکیج منیجر pip نصب کنید.
  4. در دایرکتوری پروژه‌ با دستور virtualenv دایرکتوری venv را ایجاد کنید.
  5. با دستور source فضای ایزوله‌ی خود را active کنید.
  6. از ابزار pip استفاده کرده و آخرین نسخه‌ی فریم‌ورک جنگو را نصب کنید.
  7. تا آموزش بعدی و شروع به کار با نرم‌افزار، وبلاگ یک شهروند الکترونیکی را دنبال کنید.

شروع به کار وبلاگ یک شهروند الکترونیکی

سلام

فکر می‌کنم شاید این دومین یا سومین بار باشد که بعد از چند ماه وبلاگ ننوشتن، تصمیم می‌گیرم دوباره اینجا بنویسم و تلاش کنم تا چیز‌هایی را با دیگران به اشتراک بگذارم. اینبار با پیشنهاد دوست خوبم که همزمان وبلاگ خودش را هم در مدیوم راه اندازی کرده است، تصمیم به شروع مجدد وبلاگ با بهانه‌ی به اشتراک گذاری مطالعات و پروژه‌های جاری گرفتم. از آنجا که این روز‌ها درگیر پروژه‌های پایتون (Python) و جنگو (Django) هستیم، فرصت را غنیمت شمرده و از همین‌جا شروع می‌کنم.

چرا وبلاگ می‌نویسم؟

پیش از شروع باید بگویم، از آنجا که خودم را خوب می‌شناسم و سالهاست که نوشتن یک بیوگرافی را به بهانه‌های مختلف عقب انداخته‌ام و گذاشته‌ام برای صفجه‌ی درباره‌ی من، بهتر است تکلیف یک مساله را همین‌جا روشن کنم و آن هم درباره‌ی نام وبلاگ و شهروند الکترونیکی است. زمانی که نوشتن وبلاگ بر روی این آدرس را شروع کردم، تب SecondLife و جوّ دانشگاه و آن روز‌های کشور که رقابت بر سر این بود که چه کسی زودتر کلمه‌ی الکترونیکی را به آخر اسم اداره و سازمانش اضافه می‌کند، من هم این دامنه را با هزار امید و آرزو ثبت کردم و در ذهنم اولین قدم‌های مسیر موفقیت را برداشتم. مثل خیلی کارهای نیمه کاره‌ی دیگر این کار هم ماند و آن دو کلمه‌ی «وبلاگ یک» به ابتدای «شهروند الکترونیکی» افزوده شد و شدیم این که الان هستیم و نوشتیم «وبلاگ یک شهروند الکترونیکی».

ولی در مورد سوال دوستان نزدیک‌تر که پرسیدند چرا «شهروند الکترونیکی» و چرا «شهروند الکترونیک» نباشد؟ این مساله بیشتر مرتبط با دستور زبان است. همان جریانی که این سالها به اشتباه به Big Data می‌گوید داده‌های حجیم و به IoT می‌گوید اینترنت اشیاء، کلمه‌ی بانکداری الکترونیکی، تجارت الکترونیکی، کتاب الکترونیکی و شهروند الکترونیکی را در متن‌ها و تابلو‌ها و رسانه‌هایی که در اختیار داشت بانکداری الکترونیک، تجارت الکترونیک، کتاب الکترونیک و شهروند الکترونیک نامید و طبق معمول نبود یک مرجع تصمیم‌گیرنده‌ی قدرتمند، به این کار دامن زد و امروز همه می‌پرسند چرا می‌نویسید شهروند الکترونیکی. در این میان دو نکته نیز جای بررسی دارد.

شهروند الکترونیکی یا شهروند الکترونیک؟

  1. به استناد فرهنگ معین جلد یک صفحه‌ی ۳۴۱، واژه‌ی «الکترونیک» اسم و به معنی پدیدآمده توسط الکترون‌ها است. در حالی که کلمه‌ی «الکترونیکی» از ترکیب کلمه‌ی الکترونیک با «ی» نسبت، صفتی نسبی برای کلمه‌ی قبل از خود است. به عبارت دیگر در ترکیب «بانگداری الکترونیکی» کلمه‌ی «الکترونیکی» در تلاش برای توصیف کم و کیف و چگونگی بانکداری است. از این نگاه ترکیب «شهروند الکترونیک» ترکیبی اشتباه است.
  2. از سوی دیگر فرهنگستان زبان و ادب فارسی به عنوان مرجع رسمی و علمی واژه‌گزینی، در دفتر ششم مجموعه واژه‌های مصوب فرهنگستان که در جلسه‌ی مورح ۱۳۸۸/۱/۳۱ شورای فرهنگستان تصویب و منتشر شده است، معادل دقیق ترکیبات e-banking و e-business و بسیاری از واژه‌های مشابه را «بانکداری الکترونیکی» و «کسب‌و‌کار الکترونیکی» نوشته و از این رو، ترکیب «شهروند الکترونیکی» ترکیب صحیح شناخته می‌شود.

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