تجربه ای از کار با Models API

جنگو

سلام

در دستور زیر از شل پایتون استفاده شده است که با آن کاری نداریم اما برای اینکه این شل را با پروژۀ خودمان بالا بیاوریم لازم است دستور زیر را در cmd اجرا می کنیم.

خروجی:

این حالت مشابه وقتی است که صرفاً دستور python را اجرا می کنیم اما این دستور، پروژۀ ما را به sys.path  اضافه و سپس جنگو را لود می کند. یعنی می توانیم به راحتی مدل‌ها و سایر فایل‌های مربوط به پروژه را درون آن import کنیم.

در ابتدا کلاس بورد را اضافه می کنیم.

یک شی جدید از آن ایجاد می کنیم.

برای اینکه این شی را درون دیتابیس ذخیره کنیم؛ دستور زیر را وارد می کنیم:

از دستور save هم برای ذخیره و هم برای بروزرسانی استفاده می شود.

با توجه به اینکه در این دستور مقدار id را تنظیم نکرده‌ایم؛ جنگو به صورت پیش فرض آن را 1 تنظیم و به صورت خودکار اضافه می کند.

دسترسی به سایر فیلدها هم به آسانی امکان پذیر است.

برای بروز رسانی هم به راحتی با دستور زیر اینکار را می کنیم.

هر کدام از مدل‌ها در جنگو با attribute خاصی همراه است که به آن Model Manager می گوییم. دسترسی به آن با تابع objects فراهم می شود و می توان به صورت مستقیم شی‌ای را ایجاد و مقدار دهی کرد:

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

که البته نتیجه به صورت یک QuerySet نمایش داده می شود و خیلی مفهوم نیست و علتش هم این است که تابع __str__ را در مدل خود تعریف نکرده ایم.

با دستور ()exit از شل پایتون خارج شده و در اپِ بورد فایل models.py را ویرایش و این تابع را به کلاس بورد اضافه می کنیم.

دوباره همان کوئری قبلی را در CMD اجرا می کنیم.

و کدهای زیر را در محیط شل پایتون می زنیم.

همانطور که معلوم است بهتر شد. برای بررسی تمام داده‌ها از مفهوم لیست استفاده می کنیم:

و خروجی به شکل زیر می شود:

یکی از تابع‌های پرکاربرد دیگر get است:

استفاده از تابع get باید با دقت باشد و مثلاً اگر آیدی را 3 وارد کنیم خطا می دهد.

البته این تابع را می توان در خصوص سایر فیلدها هم به کار برد.

* نکتۀ بسیار مهم این که این تابع به بزرگ و کوچک حروف حساس است:

  1. خلاصۀ این توابع:
Operation Code sample
ساخت یک شی بدون ذخیره سازی

board = Board()

ذخیره یا بروز رسانی شی

board.save()

ساخت و ذخیره شی در دیتابیس

Board.objects.create(name=’…’, description=’…’)

لیست اشیاء مختلف

Board.objects.all()

دریافت یک شیء و بر اساس فیلد

Board.objects.get(id=1)

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: Views, Templates و Static Files

مطلب قبلی: مهاجرت مدل ها | Migration the Models

بدون دیدگاه

پاسخی بگذارید

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

جنگو
پیکربندی گواهینامۀ https

سلام حالا می خواهیم برنامۀ خودمان را با گواهینامۀ https امن کنیم. ساده ترین کار برای انجام آن Let’s Encrypt است. قبل از Let’s Encrypt هرگز تنظیمات https به این راحتی نبوده و مهمتر اینکه اینکار کاملاً رایگان است. آن ها راه حلی به نام certbot را ارائه داده اند …

جنگو
پیکربندی سرویس ایمیل

سلام یکی از بهتر سرویس دهنده های ایمیل Mailgun با قابلیت ۱۲ هزار ایمیل رایگان در ماه است. به صورت رایگان ثبت نام کنید. برای اینکار باید آن را با سرویس دهندۀ دامین خود تنظیم کنید که در این آموزش از tamadon.org استفاده شده است. حالا اولین رکورد DNS را …

جنگو
پیکربندی NGINX

سلام کار بعدی که قرار است انجام شود؛ تنظیمان Nginx به شکلی است که پاسخگویی و سرویس دهی مربوط به فایل های استاتیک را خود انجام دهد و سایر درخواست ها را به Gunicorn بفرستد. یک فایل پیکربندی با نام boards را درون /etc/nginx/sites-available/ و با محتوای زیر اضافه می …

هرگونه استفادۀ از این آموزش به صورت رایگان و با ارجاع به تمدن جایز است.