مقدمه ای بر چارچوب جنگو برای مبتدیان
جنگو یک فریمورک وب محبوب است که به شما امکان می دهد برنامه های وب را با استفاده از پایتون بسازید. رایگان، متن باز است و از الگوی مدل-نما-الگو (MVT) پیروی می کند. جنگو ویژگیهای زیادی مانند نگاشت شی رابطهای (ORM)، مسیریابی URL، موتور قالب، فرمها، احراز هویت، رابط مدیریت و غیره را ارائه میکند.
در این مقاله نحوه ایجاد یک برنامه وب ساده با استفاده از جنگو را یاد خواهیم گرفت. ما از مراحل زیر استفاده خواهیم کرد:
جنگو را نصب کنید و یک محیط مجازی ایجاد کنید.
یک پروژه و یک برنامه ایجاد کنید.
مدل ها را تعریف کنید و پایگاه داده را انتقال دهید.
نماها و قالب ها را ایجاد کنید.
URL ها را پیکربندی کنید و برنامه را آزمایش کنید.
مرحله 1: Django را نصب کنید و یک محیط مجازی ایجاد کنید.
برای استفاده از جنگو، باید پایتون را روی سیستم خود نصب کنید. می توانید نسخه پایتون خود را با اجرا بررسی کنید
python -- version
در ترمینال شما همچنین باید pip را نصب کنید که یک مدیریت بسته برای پایتون است. شما می توانید نسخه پیپ خود را با اجرای pip –version در ترمینال خود بررسی کنید.
برای نصب جنگو می توانید از pip برای اجرای دستور زیر استفاده کنید:
pip install django
با این کار آخرین نسخه جنگو روی سیستم شما نصب می شود. شما می توانید نسخه جنگو خود را با اجرا بررسی کنید
django-admin --version
در ترمینال شما
استفاده از محیط مجازی هنگام کار با پروژه های جنگو توصیه می شود. یک محیط مجازی راهی برای جداسازی وابستگی های پروژه شما از سایر بسته های پایتون در سیستم شما است. این به جلوگیری از درگیری و سازماندهی پروژه شما کمک می کند.
برای ایجاد یک محیط مجازی می توانید از venv
ماژولی که با پایتون همراه است
- می توانید دستور زیر را در ترمینال خود اجرا کنید:
python -m venv env
با این کار یک پوشه به نام env در فهرست فعلی شما ایجاد می شود که حاوی فایل ها و پوشه های محیط مجازی شما خواهد بود.
برای فعال کردن محیط مجازی خود باید دستور زیر را اجرا کنید:
source env/bin/activate
این دستور شما را تغییر می دهد تا نشان دهد که در محیط مجازی هستید. برای غیرفعال کردن آن می توانید اجرا کنید deactivate
.
مرحله 2: یک پروژه و یک برنامه ایجاد کنید
پروژه جنگو مجموعهای از تنظیمات، فایلها و برنامههایی است که برای ایجاد یک وبسایت با هم کار میکنند. برنامه جنگو بخشی از یک پروژه است که برخی از عملکردها مانند مدل ها، نماها، قالب ها و غیره را ارائه می دهد.
برای ایجاد یک پروژه جدید، می توانید از django-admin
فرمان با startproject
گزینه. می توانید دستور زیر را در ترمینال خود اجرا کنید:
django-admin startproject mysite
با این کار یک پوشه به نام ایجاد می شود mysite
در دایرکتوری فعلی شما، که حاوی فایل ها و پوشه های پروژه شما خواهد بود.
برای ایجاد یک برنامه در پروژه خود، می توانید از manage.py
اسکریپت با startapp
گزینه. می توانید دستور زیر را در ترمینال خود اجرا کنید:
python manage.py startapp myapp
با این کار یک پوشه به نام ایجاد می شود myapp
داخل پوشه پروژه شما، که حاوی فایل ها و پوشه های برنامه شما خواهد بود.
مرحله 3: مدل ها را تعریف کنید و پایگاه داده را انتقال دهید
مدل کلاسی است که ساختار و رفتار یک شی را تعریف می کند که برخی از داده ها را در برنامه شما نشان می دهد. جنگو از مدل ها برای تعامل با پایگاه داده و انجام عملیات CRUD (ایجاد، خواندن، به روز رسانی و حذف) استفاده می کند.
برای تعریف مدل برای برنامه خود، باید فایل models.py را در پوشه برنامه خود ویرایش کنید. به عنوان مثال، فرض کنید می خواهیم یک مدل برای یک پست وبلاگ ایجاد کنیم که دارای قسمت های عنوان، محتوا و تاریخ باشد. می توانیم چیزی شبیه به این بنویسیم:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
در اینجا ما در حال واردات هستیم models
ماژول از جنگو و ایجاد یک زیر کلاس از models.Model
ما در حال تعریف سه فیلد برای مدل خود هستیم: عنوان (یک فیلد کاراکتر)، محتوا (یک فیلد متنی) و تاریخ (یک فیلد تاریخ-زمان). ما نیز در حال غلبه بر آن هستیم __str__
روشی برای برگرداندن عنوان پست به عنوان نمایش رشته آن.
برای اعمال تغییرات مدل خود در پایگاه داده، باید دو مرحله را انجام دهیم: انجام مهاجرت و مهاجرت.
ایجاد مهاجرت به معنای ایجاد فایل هایی است که نحوه تغییر طرح پایگاه داده را با توجه به تغییرات مدل ما توضیح می دهد. برای انجام مهاجرت برای برنامه خود، می توانیم دستور زیر را در ترمینال خود اجرا کنیم:
python manage.py makemigrations myapp
مرحله 4: ایجاد نماها و قالب ها
View یک تابع یا کلاسی است که یک درخواست را مدیریت می کند و یک پاسخ را برمی گرداند.
یک View می تواند منطقی را انجام دهد، با مدل ها تعامل داشته باشد و یک الگو را ارائه دهد. قالب فایلی است که حاوی کد HTML با دستور خاصی برای متغیرها، برچسب ها و فیلترها است.
یک الگو میتواند دادههای پویا را از زمینه نمایش دهد، که فرهنگ لغت مقادیری است که توسط نمای ارسال میشود.
برای ایجاد نماها برای برنامه خود، باید فایل views.py را در پوشه برنامه خود ویرایش کنیم. به عنوان مثال، فرض کنید میخواهیم یک نمای برای صفحه فهرست ایجاد کنیم که آخرین پنج پست را نمایش میدهد. می توانیم چیزی شبیه به این بنویسیم:
from django.shortcuts import render
from .models import Post
def index(request):
# get the latest 5 posts
posts = Post.objects.order_by('-date')[:5]
# pass them to the context
context = {'posts': posts}
# render the index.html template with the context
return render(request, 'myapp/index.html', context)
در اینجا ما تابع render را از میانبرهای جنگو و مدل Post را از مدل های برنامه خود وارد می کنیم. ما در حال تعریف تابعی به نام index هستیم که یک شی درخواست را به عنوان آرگومان می گیرد. ما در حال استفاده از
Post.objects.order_by('-date')[:5]
برای دریافت آخرین پنج پست از پایگاه داده پرس و جو کنید. ما آنها را به دیکشنری به نام زمینه با پست های کلیدی منتقل می کنیم. ما از تابع render برای رندر کردن یک قالب به نام استفاده می کنیم index.html
با زمینه و برگرداندن آن به عنوان پاسخ.
برای ایجاد قالب برای برنامه خود، باید پوشه ای به نام templates در داخل پوشه برنامه خود ایجاد کنیم. در داخل این پوشه، باید یک پوشه دیگر با همان نام اپلیکیشن خود ایجاد کنیم (myapp)
. این برای جلوگیری از تداخل نام با سایر برنامه هایی است که ممکن است الگوهایی با همین نام داشته باشند. در داخل این پوشه می توانیم فایل های قالب خود را با پسوند html ایجاد کنیم. به عنوان مثال، بیایید یک الگو برای صفحه فهرست خود بسازیم به نام index.html
. می توانیم چیزی شبیه به این بنویسیم:
<!DOCTYPE html>
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>My Blog</h1>
<ul>
{ % for post in posts % }
<li><a href="https://dev.to/owoyomi20/{ { post.id }}">{ {
post.title }}</a></li>
{ % endfor % }
</ul>
</body>
</html>
در اینجا ما از تگ های HTML برای ایجاد یک صفحه وب اصلی با عنوان و لیستی از پیوندها استفاده می کنیم. ما از نحو قالب جنگو برای حلقه زدن روی پست ها در زمینه و نمایش عنوان و شناسه آنها به عنوان پیوند استفاده می کنیم.
استفاده می کنیم { { and }}
به خروجی متغیرها و { % and % }
برای اجرای تگ ها
مرحله 5: URL ها را پیکربندی کنید و برنامه را آزمایش کنید
URL آدرسی است که یک منبع وب را در اینترنت شناسایی می کند. جنگو از الگوهای URL برای نگاشت URL ها به نماها استفاده می کند. الگوی URL رشتهای است که حاوی تعدادی متغیرهایی است که با بخشهایی از URL مطابقت دارند.
برای پیکربندی URL برای پروژه خود، باید دو فایل را ویرایش کنیم:
mysite/urls.py
و myapp/urls.py
. فایل اول، پیکربندی URL اصلی پروژه ما است، جایی که میتوانیم پیکربندیهای URL دیگر را از برنامههای خود اضافه کنیم. فایل دوم، پیکربندی URL برای برنامه ما است، که در آن میتوانیم الگوهای URL خاصی را برای نماهای خود تعریف کنیم.
برای گنجاندن آدرسهای اینترنتی برنامههایمان در آدرسهای اینترنتی پروژهمان، باید ویرایش کنیم mysite/urls.py
و یک دستور import و یک تابع مسیر مانند این اضافه کنید:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')),
]
در اینجا ما تابع include را از جنگو وارد می کنیم urls
و اضافه کردن یک تابع مسیر که هر URL را که با آن شروع می شود نگاشت می کند myapp/
به URL های برنامه ما
برای تعریف URL های برنامه، باید myapp/urls.py را ویرایش کنیم و برخی از دستورات import و توابع مسیر مانند این را اضافه کنیم:
from django.urls import path
from . import views
urlpatterns = [
# ex: /myapp/
path('', views.index, name="index"),
# ex: /myapp/1/
path('<int:post_id>/', views.detail, name="detail"),
]
در اینجا ما تابع مسیر را از URL های جنگو و نماهای خود را از نماهای برنامه وارد می کنیم.
مرحله 6: برنامه را آزمایش و اجرا کنید
تست بخش مهمی از توسعه هر برنامه وب است. آزمایش به شما کمک می کند تا مطمئن شوید که کد شما همانطور که انتظار می رود کار می کند، الزامات را برآورده می کند، و هیچ باگ یا خطایی ایجاد نمی کند. جنگو یک چارچوب تست داخلی ارائه می دهد که به شما امکان می دهد آزمایش هایی را برای برنامه خود بنویسید و اجرا کنید.
برای نوشتن تست برای برنامه خود، باید فایلی به نام tests.py در پوشه برنامه خود ایجاد کنید. در این فایل می توانید وارد کنید TestCase
کلاس از جنگو تست کنید و زیر کلاس هایی ایجاد کنید که روش های تست را تعریف می کنند. هر روش آزمون باید از روشهای ادعا برای بررسی برخی شرایط استفاده کند. به عنوان مثال، بیایید یک تست ساده برای خود بنویسیم index view
:
from django.test import TestCase
from django.urls import reverse
from .models import Post
class IndexViewTests(TestCase):
def test_no_posts(self):
# if no posts exist, display a message
response = self.client.get(reverse('index'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "No posts are available.")
self.assertQuerysetEqual(response.context['posts'], [])
def test_one_post(self):
# if one post exists, display it
Post.objects.create(title="Test post", content="Test content")
response = self.client.get(reverse('index'))
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(
response.context['posts'],
['<Post: Test post>']
)
در اینجا ما در حال واردات هستیم TestCase
کلاس از تست جنگو، تابع معکوس از جنگو urls
و مدل پست ما از مدل های برنامه ما. ما در حال ایجاد یک زیر کلاس به نام هستیم IndexViewTests
که از آن به ارث می برد TestCase
. ما دو روش تست را تعریف می کنیم: test_no_posts
و test_one_post
.
روش اول زمانی را آزمایش می کند که هیچ پستی در پایگاه داده وجود نداشته باشد. از آن استفاده می کند client
ویژگی مورد آزمون را به یک GET
درخواست به نمای فهرست با استفاده از تابع معکوس. سپس بررسی میکند که کد وضعیت پاسخ 200 باشد (OK)، که پاسخ حاوی پیام «بدون پست موجود نیست» باشد، و اینکه پستهای متغیر زمینه یک لیست خالی باشد. روش دوم زمانی که یک پست در پایگاه داده وجود دارد، مورد را آزمایش می کند. از آن استفاده می کند Post.objects.create
روشی برای ایجاد یک شیء پست با عنوان و محتوا. سپس یک می سازد GET
به نمای نمایه درخواست می کند و بررسی می کند که پست های متغیر زمینه حاوی یک شیء پست با همان عنوان ایجاد شده باشد.
برای اجرای آزمایشات برای برنامه خود، می توانید از manage.py
اسکریپت با test
گزینه. می توانید دستور زیر را در ترمینال خود اجرا کنید:
python manage.py test myapp
با این کار تمام تست های برنامه شما اجرا می شود و نتایج نمایش داده می شود.
استقرار فرآیندی است که در آن برنامه وب شما از طریق اینترنت برای کاربران قابل دسترسی است. استقرار شامل انتخاب یک سرویس میزبانی، پیکربندی وب سرور، راه اندازی پایگاه داده، نصب وابستگی ها، آپلود کد و اجرای برنامه است.
بسته به معماری یا نیازهای تجاری خاص شما، گزینه های زیادی برای استقرار برنامه جنگو شما وجود دارد. بعضی از آنها … هستند:
استفاده از پلتفرم ابری به عنوان سرویس (PaaS) مانند Heroku، Google App Engine، AWS Elastic Beanstalk و غیره.
استفاده از زیرساخت ابری به عنوان یک سرویس (IaaS) مانند AWS EC2، Google Compute Engine و غیره.
استفاده از یک سرویس میزبانی اختصاصی یا اشتراکی مانند PythonAnywhere و غیره.
با استفاده از سرور یا ماشین مجازی خود
هر گزینه مزایا و معایب خاص خود را دارد و ممکن است برای استقرار موفقیت آمیز برنامه شما به مراحل و ابزارهای مختلفی نیاز داشته باشد. برای جزئیات بیشتر در مورد نحوه استقرار برنامه های جنگو با استفاده از گزینه های مختلف، می توانید به مستندات رسمی جنگو در مورد استقرار مراجعه کنید.
به عنوان مثالی از نحوه استقرار یک برنامه جنگو با استفاده از یک گزینه، ما از پلتفرم ابری راه آهن به عنوان یک سرویس (PaaS) استفاده خواهیم کرد. Railway پلتفرمی است که به شما امکان می دهد به راحتی برنامه های تحت وب را با استفاده از فناوری های مختلف مانند جنگو بدون نگرانی در مورد راه اندازی سرورها یا پایگاه های داده مستقر کنید.
برای استقرار برنامه خود با استفاده از Railway، باید این مراحل را دنبال کنیم:
با استفاده از حساب GitHub در Railway ثبت نام کنید.
یک پروژه جدید در داشبورد راه آهن ایجاد کنید.
افزونه PostgreSQL را به پروژه خود اضافه کنید.
مخزن GitHub ما را با پروژه ما متصل کنید.
متغیرهای محیطی را برای تنظیمات پروژه خود اضافه کنید.
پروژه ما را با استفاده از اقدامات Railway CLI یا GitHub اجرا کنید.
مرحله 1: با استفاده از حساب GitHub برای Railway ثبت نام کنید
برای ثبت نام در راه آهن، باید به https://railway.app/ مراجعه کرده و روی «ثبت نام» کلیک کنید