ورودی به دنیای جنگو قسمت ۲ | view

بدون ديدگاه

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

کامل برای شما تشریح می کنیم. همان طور که در مقالات قبلی اشاره کردیم، view ها بخش مهمی

از پروژه های جنگو هستند. پیاده سازی منطق برنامه (وب سایت) شما در این قسمت انجام می شوند.

اینکه هر request از request هایی که به سمت سرور می آیند باید چگونه پاسخ داده شوند،

در این قسمت مشخص می شوند. شکل زیر نحوه تعامل view با سایر قسمت ها را نشان می دهد.

 

اگر مقاله ” شروع کار با جنگو ” را دنبال کرده باشید، نحوه ایجاد پروژه و اپ در جنگو را یاد گرفته اید

. زمانی شما یک اپ در پروژه خود ایجاد می کنید، در داخل فولدر اپ شما یک فایل با نام views.py وجود دارد

که محل نوشتن view functions یا به اختصار view های پروژه شما است. به طور خلاصه هر تابع یا

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

می‌کند و یک web response را به عنوان پاسخ به آن request بر می‌گرداند.

  • نوشتن view

کد زیر را داخل فایل views.py کپی کنید:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def FirstView(request):
    return HttpResponse("<h1>Hello World. Welcome to views.py.</h1>")

این ساده‌ترین تابع ویو است که می توانید بنویسید. همان طور که می بینید، این تابع

یک request را به عنوان آرگومان ورودی گرفته و یک httpresponse را برمی‌گرداند.

هر view توسط یک url فراخوانی می‌شود که در فایل urls.py داخل اپ نوشته شده‌ است.

برای فراخوانی view نوشته شده در بالا خط زیر را به urlpattens در فایل urls.py داخل فولدر اپ اضافه کنید:

path('hello-world/', views.FirstView)

سپس با ران کردن سرور جنگو و فراخوانی آدرس /world-http://127.0.0.1:8000/hello صفحه مورد نظر رو به شکل زیر مشاهده می کنید :

مثال بالا یک مثال خیلی ساده از کارکرد view ها بود. در بیشتر مواقع view ها کارهای

پیچیده تری انجام می دهند. به عنوان مثال فرض کنید شما در مدل های خود یک مدل با نام Book دارید :

class Book(models Model):
  name models CharField max_length 30
  author models CharField max_length 30

این مدل که اطلاعات کتاب های یک کتابخانه را نگه می دارد ، دو فیلد دارد که

یکی نام کتاب و دیگری نام نویسنده کتاب را مشخص می‌کند. حالا می خواهیم

لیست کتاب ها را در یک صفحه html به کاربران نشان دهیم. ویو ما به شکل زیر خواهد بود:

from django.shortcuts import render
from polls.models import Poll
def index (request)
  try:
    books Book objects all(
  except:
    return HttpResponse("کتابی برای نمایش پیدا نشد")
return render (request,'booklist.html',{'booklist': books})

همان طور که مشاهده می‌کنید، یک view به نام index داریم که یک request را به

عنوان پارامتر ورودی می‌گیرد. داخل این ویو و در داخل try سعی می کند لیست کل

اشیاء موجود در جدول Book در مدل‌ها را گرفته و داخل متغیر books ذخیره کند. اگر

نتواند این کار را انجام دهد و با خطایی مواجه شود، except اجرا می شود و یک متن

با عنوان ” کتابی برای نمایش پیدا نشد ” به کاربر نمایش داده می‌شود و چون یک return اجرا شده

از view خارج می شود. اگر خطایی رخ ندهد قسمت except اجرا نشده و خط آخر اجرا می شود. در این

خط از متد render برای رندر کردن یک صفحه html و ارسال یک دیکشنری به این صفحه استفاده شده است

. همان طور که مشاهده می کنید آرگومان اول متد همان request است که view به عنوان آرگومان

ورودی دریافت کرد. آرگومان دوم نام صفحه html است که در داخل پوشه templates در داخل پوشه

اپ شما قرار می‌گیرد. این پوشه به صورت پیش فرض وجود ندارد و باید خودتان آن را ایجاد کنید. زمانی

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

آرگومان سوم یک دیکشنری است که می توانید هر چیزی به صفحه html خود بفرستید تا نمایش داده شود

. این آرگومان اختیاری است و شما می‌توانید چیزی به صفحه html نفرستید. در اینجا م

ا لیست کتاب‌هایی که از دیتابیس گرفتیم برای صفحه خود می‌فرستیم. کد زیر یک محتویات فایل booklist.html را نشان می‌دهد:

#booklist.html
{% for book in books %}
<h2> {{book.name}} </h2>
<h3> {{book.author}} </h3>
{% endfor %}

در اینجا ما با استفاده از یک حلقه for در داخل template (صفحه html) خود لیست کتاب‌ها

را نمایش می‌دهیم. برای هر عضو از لیست books یک تگ h2 ایجاد می شود و نام کتاب در داخل آن

نمایش داده می شود و یک تگ h3 که نام نویسنده در آن نوشته می شود ایجاد می شود

. در نهایت با تگ endfor پایان حلقه for را اعلام می‌کنیم. در نهایت مشابه مثال

قبل یک url به این view تخصیص می دهیم تا بتوانیم آن را فراخوانی کنیم:

path("index/", views.index )

حال با ران کردن سرور جنگو و رفتن به آدرس http://127.0.0.1:8000/index اگر کتابی در دیتابیس شما

ذخیره شده باشد، نمایش داده می شود و در غیر این صورت متن ” کتابی برای نمایش پیدا نشد ” به شما نمایش داده می‌شود.

امید وارم که از این مقاله خوشتون اومده باشه !

نوشتن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد.