ساخت view برای وبلاگ در جنگو
تو این آموزش قراره ساخت view برای وبلاگ در جنگو رو با همدیگه یاد بگیریم.
ساخت ویوی نمایش کل و تفکیک شده مطالب
تو آموزشهای قبلی با نحوه استفاده از ORM جنگو و تعامل با دیتابیس جنگو آشنا شدیم، پس دیگه وقتشه بریم view های اپلیکیشن blog رو بسازیم.
View جنگو چیه؟
View توی جنگو یه تابع (یا همون فانکشن) پایتون هستش که یک ریکوئست رو میگیره و یه پاسخ(response) رو بر میگردونه. منطق اینکه چطور و چه چیزهایی به عنوان پاسخ برگردونده بشن داخل view ها مشخص میشه.
اگه بخوام بصورت اجمالی بگم که باید چیکار کرد، به این صورت میشه که:
- اول view مورد نیاز برای اپلیکیشن مون رو میسازیم.
- بعد برای هر view یه الگوی URL تعریف میکنیم.
- و در نهایت برای رندر کردن پاسخ هایی که توسط view داده میشن، قالب HTML میسازیم.
هر view یک template رو رندر میکنه، متغیرها(یا مقادیری) رو به اون template پاس میده، و در نهایت یک HTTP Response رو به عنوان خروجی برامون بر میگردونه.
ساخت Viewهای مورد نیاز
پس بزن بریم یه view برای نمایش لیست مطالب وبلاگمون درست کنیم.
فایل views.py از اپلیکیشن blog رو باز میکنیم و کدهای زیر رو در اون قرار میدیم:
from .models import Post from django.shortcuts import render, get_object_or_404 def post_list(request): posts = Post.published.all() return render(request,'blog/post/list.html',{'posts': posts})
تبریک میگم. همین الان اولین view تون رو به همین راحتی ساختید!
اینجا ما یه view به اسم post_list ساختیم که request رو به عنوان تنها پارامتر ورودی میگیره ( در نظر داشته باشین که این پارامتر مورد نیاز همه ی view ها هستش و همه شون باید داشته باشنش).
تو این view قراره با استفاده از manager ای که قبلاً ساختیم(منظورمون published هستش)همه مطالبی که وضعیتشون published هست رو استخراج کنیم.
در نهایت هم با استفاده از render() ، لیستی از مطالب رو در template مشخص شده رندر میکنیم.
تابع render برای اینکه بتونه عملیات رندر کردن رو انجام بده، request ، آدرس template، و همینطور متغیرهایی که به عنوان context تعریف میشن رو میگیره و اونا رو توی template مشخص شده رندر میکنه.
در آخر هم یک HTTPResponse رو با متن رندر شده(که معمولاً کد HTML هست) برامون بر میگردونه.
هر متغیری که داخل context processor تعریف کنیم، از کل قالبمون قابل دسترسی هستش و برای فراخوانی متغیرهامون که توی template قرار بگیرن ازشون استفاده میکنیم.(بعداً بصورت کامل تر راجع به context processor با هم صحبت میکنیم)
خب از توضیحات بگذریم و بیایم کد عملیاتی بنویسیم که جیگرمون حال بیاد!
یه view دیگه میسازیم که بتونیم باهاش یه تک مطلب نمایش بدیم.(معمولاً برای اینکه یه مطلب خاص از وبلاگمون رو نمایش بدیم طبیعیه که باید تک مطلب نمایش بدیم دیگه، درسته؟ 😊 )
def post_detail(request, year, month, day, post): post = get_object_or_404(Post.published, slug=post, status='published', publish__year=year, publish__month=month, publish__day=day) return render(request,'blog/post/detail.html',{'post': post})
همونطور که گفتیم از این view قراره برای نمایش یک مطلب خاص استفاده کنیم.
برای اینکه بتونیم یک پست منتشر شده در یک تاریخ خاص و با یک slug خاص رو بگیریم، تو این view میایم و آرگومانهای year، month، day، و post رو به عنوان ورودی دریافت میکنیم.
اگه یادتون باشه، وقتی داشتیم مدل اپلیکیشن blog رو تعریف میکردیم پارامتر unique_for_date رو به فیلد slug اضافه کردیم. با این کار دیگه خیالمون راحته که فقط و فقط یک مطلب با slug و تاریخ مد نظر ما وجود خواهد داشت. و بنابراین میتونیم با استفاده از یه تاریخ و slug خاص، تک مطالب رو استخراج کنیم و نمایش بدیم.
توی view ای که الان ساختیم، برای فراخوانی مطلب مورد نظرمون از get_object_or_404() استفاده کردیم. این تابع میاد بر اساس پارامترهایی که بهش ارسال کردیم چک میکنه آیا نتیجه ای وجود داره، اگه وجود داشت که برش میگردونه ولی اگر وجود نداشت خطای HTTP 404 (خطای not found معروف) رو بهمون میده.
در نهایت هم که برای نمایش دادن اطلاعات مورد نظرمون توی template، باید ()render بگیریم و تمام!
توی جنگو ما 2 مدل ویو داریم. یکی function-base و دیگری class-base هستش.
مبحثی که اینجا با هم یاد گرفتیم، اصطلاخاً بهش میگن function-base view که میتونین توی داکیومنت های جنگو بیشتر راجع بهش اطلاعات کسب کنین:
https://docs.djangoproject.com/en/3.1/topics/http/views/
در قسمت بعدی برای view هایی که تو این قسمت ساختیم، URLهای مورد نیاز رو میسازیم.
از اینجا میتونین مستقیم به آموزش ساخت URL در جنگو برید.
تو آموزش های بعدی مرکز تخصصی آموزش جنگو، کلی مباحث مختلف و خوب داریم که بتونید هرچی بیشتر با مباحث فریمورک قدرتمند جنگو آشنا بشید و یادشون بگیرید.
سوالات و نظراتتون رو هم حتماً حتماً با ما در میون بذارید.
دیدگاهتان را بنویسید