برنامه نویسی

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

جنگو یک فریمورک وب محبوب است که به شما امکان می دهد برنامه های وب را با استفاده از پایتون بسازید. رایگان، متن باز است و از الگوی مدل-نما-الگو (MVT) پیروی می کند. جنگو ویژگی‌های زیادی مانند نگاشت شی رابطه‌ای (ORM)، مسیریابی URL، موتور قالب، فرم‌ها، احراز هویت، رابط مدیریت و غیره را ارائه می‌کند.

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

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

python -- version
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در ترمینال شما همچنین باید pip را نصب کنید که یک مدیریت بسته برای پایتون است. شما می توانید نسخه پیپ خود را با اجرای pip –version در ترمینال خود بررسی کنید.

برای نصب جنگو می توانید از pip برای اجرای دستور زیر استفاده کنید:

pip install django

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این کار آخرین نسخه جنگو روی سیستم شما نصب می شود. شما می توانید نسخه جنگو خود را با اجرا بررسی کنید

django-admin --version
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در ترمینال شما

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

برای ایجاد یک محیط مجازی می توانید از venv ماژولی که با پایتون همراه است

  1. می توانید دستور زیر را در ترمینال خود اجرا کنید:
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/ مراجعه کرده و روی «ثبت نام» کلیک کنید

نوشته های مشابه

دیدگاهتان را بنویسید

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

همچنین ببینید
بستن
دکمه بازگشت به بالا