Ninja Learn | نینجا لرن
1.26K subscribers
95 photos
36 videos
11 files
306 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
سلام رفقا 👋

امیدوارم حال دلتون عالی باشه ❤️ متوجه شدیم پست های اینستامون رو دوست ندارید بنا به دلایلی و بازخورد نمیگیریم ازتون تو اینستا 🤔 دلیلش چیه به نظرتون؟ لطفا کمکمون کنید پست های بهتری بذاریم تو اینستا 🌹
Anonymous Poll
3%
با موضوع پستا حال نمیکنم
18%
کیفیت پستا پایینه
50%
حال ندارم بیام اینستا
29%
اکانت اینستا ندارم
👍3
💎 ریس کاندیشن (race condition) 💎

چند وقت پیش یه مشکلی داشتم که حسابی سرمو به دیوار کوبید. داشتم روی یه پروژه کار می‌کردم که یهو دیدم همه چی قاتی پاتی شده! 😫
بعد از کلی تحقیق فهمیدم که مشکل از یه چیز به اسم "ریس کاندیشن" بوده.

ریس کاندیشن چیه؟

فرض کن دو تا قطار دارن همزمان به سمت یه ایستگاه میان. اگه سیستم کنترل ترافیک درست کار نکنه، ممکنه دو تا قطار با هم برخورد کنن! ریس کاندیشن هم دقیقا همینجوریه. وقتی چند تا درخواست به طور همزمان به سرور ارسال میشه و ما برای مدیریت این درخواست‌ها یه سیستم درست و حسابی نداشته باشیم، ممکنه داده‌هامون خراب بشه و برنامه‌مون درست کار نکنه.

ریس کاندیشن توی جنگو چطور پیش میاد؟

مثلا فرض کن دو تا کاربر همزمان بخوان یه محصول رو تو سایت بخرن. اگه ما یه سیستم قفل‌گذاری درست و حسابی نداشته باشیم، ممکنه هر دو کاربر فکر کنن که اون محصول هنوز موجوده و در نتیجه چند تا سفارش برای یه محصول ثبت بشه.

چطور از ریس کاندیشن جلوگیری کنیم؟

نگران نباشید، راه حل‌هایی برای این مشکل وجود داره. یکی از روش‌های رایج استفاده از قفل‌ها (Lock) هست. با استفاده از قفل‌ها می‌تونیم مطمئن بشیم که فقط یک درخواست در یک لحظه به یک داده خاص دسترسی داشته باشه.

در جنگو چطور؟

جنگو ابزارهای خوبی برای مدیریت ریس کاندیشن در اختیارمون قرار می‌ده. مثلا می‌تونیم از transaction و F() expressions استفاده کنیم.

🔒عملیات Transaction: با استفاده از transaction می‌تونیم یه سری عملیات رو به صورت یکپارچه انجام بدیم. یعنی اگه یکی از این عملیات با شکست مواجه بشه، همه عملیات لغو میشه. (توی پستای قبلی درموردش توضیح دادم)

استفاده از F() expressions: با استفاده از F() expressions می‌تونیم مقدار یک فیلد رو بر اساس مقدار فعلی اون فیلد تغییر بدیم. این کار به ما کمک می‌کنه تا از بروز مشکلات ناشی از همزمانی چندین درخواست جلوگیری کنیم.

📑خلاصه کلام:

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

#ریس_کاندیشن #جنگو #برنامه_نویسی #پایتون
👍9
#پست_جدید

💎 کلوژر (closure) در جاوااسکریپت 💎

امروز میخوایم در مورد یه مفهوم جذاب و البته کمی پیچیده به اسم کلوژر حرف بزنیم. نگران نباشید، قراره با مثال‌های ساده و زبون خودمونی همه چی رو براتون روشن کنم.

کلوژر چیه؟

تصور کنید یه جعبه دارید که توش یه آبنبات و یه یادداشت هست. آبنبات رو می‌خورید، اما یادداشت همیشه با جعبه همراهه و هر وقت جعبه رو باز کنید، یادداشت رو می‌بینید. کلوژر هم همینجوریه!

در برنامه‌نویسی، کلوژر به تابعی گفته میشه که به متغیرهای محیط اطرافش دسترسی داره، حتی بعد از اینکه اون محیط از بین رفته باشه. انگار یه تابع، خاطرات محیطی که توش به دنیا اومده رو همیشه با خودش حمل می‌کنه.

مثال ساده:👇

function createCounter() {
let count = 0;
return function() {
count++;
return count;
}
}

let counter = createCounter();
console.log(counter()); // 1
console.log(counter());
// 2

در این مثال، تابع createCounter یه شمارنده می‌سازه. هر بار که این تابع رو صدا می‌زنیم، یه تابع جدید برمی‌گردونه که به متغیر count دسترسی داره. این متغیر حتی بعد از اینکه تابع createCounter اجرا شد، وجود داره و هر بار که تابع برگردونده شده رو صدا می‌زنیم، مقدار count یک واحد اضافه میشه.

چرا کلوژر مهمه؟

🏢 ساختارهای داده: کلوژر به ما کمک می‌کنه ساختارهای داده مثل private variables رو پیاده‌سازی کنیم.

مدولار بودن: با استفاده از کلوژر می‌تونیم کدهایمون رو به بخش‌های کوچکتر و مستقل تقسیم کنیم.

♻️ پیاده سازی Callback functions در کلوژر: کلوژر callback function‌ ها خیلی کاربرد داره.

✏️ طراحی الگوهای مختلف: بسیاری از الگوهای طراحی جاوااسکریپت از کلوژر استفاده می‌کنند.

خلاصه:

کلوژر یه مفهوم خیلی مهمه که به ما اجازه میده کدهای منعطف‌تر و قابل استفاده‌تر بنویسیم. با درک عمیق از کلوژر، می‌تونید به یک برنامه‌نویس جاوااسکریپت حرفه‌ای‌تر تبدیل بشید.

امید وارم مفید بوده باشه :)

#جاوااسکریپت #کلوژر #برنامه_نویس
👍5
💎 کوکی (cookie) ها در وب 💎

🍪 کوکی چیه؟

تصور کن هر بار که به یک وبسایت میری، اون وبسایت یه یادداشت کوچولو توی کامپیوتر یا موبایلت می‌ذاره. این یادداشت‌ها رو کوکی میگن. کوکی‌ها فایل‌های خیلی کوچیکی هستن که اطلاعات خیلی کم و ساده‌ای رو ذخیره می‌کنن. مثلاً یادشون می‌مونه که تو چه اسم کاربری رو انتخاب کردی یا چه محصولاتی رو توی سبد خریدت گذاشتی.

کوکی‌ها چیکار می‌کنن؟

کوکی‌ها به وبسایت‌ها کمک می‌کنن تا:

1️⃣ تو رو بشناسن: وقتی دوباره به وبسایتی برمیگردی، کوکی‌ها به وبسایت کمک می‌کنن تا بفهمه که تو قبلاً اونجا بودی و تنظیمات شخصی‌سازی شده‌ تورو یادش بیاره.

2️⃣ تجربه‌ی کاربری رو بهتر کنن: مثلاً وقتی یه محصول رو توی یک فروشگاه آنلاین می‌بینی و بعد به سایت دیگه ای میری، ممکنه تبلیغات همون محصول رو ببینی. این به خاطر کوکی‌هاست که اطلاعاتی از جستجوهای قبلی تو ذخیره شده.

3️⃣ وبسایت رو بهتر کنند: وبسایت‌ها با استفاده از اطلاعاتی که از کوکی‌ها به دست می‌ آرند، می‌تونن وبسایتشون رو بهبود بدن و اون رو برای کاربران جذاب‌تر کنن.

کوکی‌ها چطور ساخته میشن؟

وقتی تو به یک وبسایت میری، سرور اون وبسایت (یعنی کامپیوتر بزرگی که وبسایت رو اجرا می‌کنه) یه کوکی رو می‌سازه و به مرورگرت می‌فرسته. مرورگرت هم اون کوکی رو توی کامپیوتر یا موبایلت ذخیره می‌کنه.

🍪 انواع کوکی‌ها

کوکی‌ها انواع مختلفی دارن که هر کدومشون کار خاصی انجام میدن. مثلاً:

1️⃣ کوکی‌های session: این کوکی‌ها فقط تا زمانی که تو در وبسایت هستی وجود دارن و وقتی از وبسایت خارج شدی، حذف میشن.

2️⃣ کوکی‌های دائمی: این کوکی‌ها برای مدت طولانی‌تری روی دستگاهت باقی میمونن و به وبسایت کمک میکنن تا اطلاعات بیشتری در مورد وبگردی جمع‌آوری کنه.

حرف آخر

کوکی‌ها به طور کلی بدون ضرر هستن و برای بهبود تجربه کاربری استفاده میشن. اما بعضی وقت‌ها ممکنه کوکی‌ها برای ردیابی فعالیت‌های آنلاینت استفاده بشن که این موضوع ممکنه نگرانی‌هایی رو در مورد حریم خصوصی ایجاد کنه.

امیدوارم این توضیحات برات مفید بوده باشه. اگر سوالی داشتی، حتما بپرس.

#کوکی #وبسایت #حریم_خصوصی #اینترنت
👍11🔥2
#پست_جدید

💎 سیگنال‌ها در جنگو 💎

امروز میخوایم در مورد یکی از ابزارهای جذاب و کاربردی جنگو به اسم سیگنال‌ها (signals) صحبت کنیم.
سیگنال‌ها مثل یه جور اعلان یا نوتیفیکیشن هستن که وقتی اتفاق خاصی توی پروژه شما میفته، ارسال میشن.
مثلا وقتی یه کاربر جدید ثبت‌نام می‌کنه، یه داده جدید اضافه میشه یا یه مدل حذف میشه، سیگنالی ارسال میشه.

سیگنال‌ها چه شکلی هستن؟

سیگنال‌ها به چند دسته کلی تقسیم میشن:

1️⃣ سیگنال‌های مدل: این سیگنال‌ها به تغییرات در مدل‌های شما مربوط میشن. مثلا وقتی یه رکورد جدید اضافه میشه، تغییر می‌کنه یا حذف میشه، سیگنالی ارسال میشه.

2️⃣ سیگنال‌های مدیریت: این سیگنال‌ها به عملیات مدیریت پایگاه داده مربوط میشن. مثلا وقتی شما دستور migrate رو اجرا می‌کنید، سیگنالی ارسال میشه.

3️⃣ سیگنال‌های درخواست/پاسخ: این سیگنال‌ها به درخواست‌ها و پاسخ‌های HTTP مربوط میشن. مثلا وقتی یه درخواست به سرور شما ارسال میشه یا پاسخ داده میشه، سیگنالی ارسال میشه.

4️⃣ سیگنال‌های تست: این سیگنال‌ها به اجرای تست‌های شما مربوط میشن.

5️⃣ سیگنال‌های دیتابیس: این سیگنال‌ها به اتصال به دیتابیس مربوط میشن.

6️⃣ سیگنال‌های اپ احراز هویت: این سیگنال‌ها به عملیات مربوط به احراز هویت کاربران مربوط میشن.


🔬 مثال‌های عملی از سیگنال‌ها:

1️⃣ مثال 1: ارسال ایمیل خوشامدگویی پس از ثبت‌نام کاربر

from django.db.models.signals import post_save
from django.dispatch import receiver
from django.core.mail import send_mail  


from .models import User

@receiver(post_save, sender=User)
def send_welcome_email(sender, instance, created, **kwargs):
    if created:  

        send_mail(
            'خوش آمدید!',
            'از ثبت‌نام شما در سایت ما متشکریم.',
            '[email protected]',
            [instance.email],
            fail_silently=False,
        )


در این مثال، هر وقت یک کاربر جدید ثبت‌نام میشه، سیگنال post_save برای مدل User ارسال میشه و تابع send_welcome_email اجرا میشه و یک ایمیل خوشامدگویی برای کاربر جدید ارسال می‌شود.


2️⃣ مثال 2: ایجاد پروفایل کاربری به صورت خودکار
from django.db.models.signals import post_save
from django.dispatch import receiver

from .models import User, Profile

@receiver(post_save, sender=User)
def create_profile(sender,  
instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

در این مثال، هر وقت یک کاربر جدید ثبت‌نام می‌شود، به طور خودکار یک پروفایل برای او ایجاد می‌شود.


3️⃣ مثال 3: بروزرسانی یک فیلد پس از تغییر فیلد دیگر
from django.db.models.signals import pre_save
from django.dispatch import receiver

from .models import MyModel

@receiver(pre_save, sender=MyModel)
def update_last_activity(sender, instance, **kwargs):
    if instance.is_active:
        instance.last_activity = datetime.now()


در این مثال، هر وقت فیلد is_active یک مدل تغییر کرد، فیلد last_activity هم به روز میشه.


مزایای استفاده از سیگنال‌ها:

کاهش کد تکراری: با استفاده از سیگنال‌ها، نیازی نیست کدهای تکراری رو در جاهای مختلف پروژه بنویسید.

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

🔺سهولت در توسعه: سیگنال‌ها به شما کمک می‌کنن تا برنامه‌های پیچیده‌تری رو توسعه بدید.


معایب استفاده از سیگنال‌ها:

😖 پیچیدگی: استفاده نادرست از سیگنال‌ها می‌تونه باعث پیچیدگی بیش از حد کد بشه.

🔋 کاهش سرعت: در بعضی موارد، استفاده از سیگنال‌ها می‌تونه سرعت اجرای برنامه رو کاهش بده.

نکات مهم:
از سیگنال‌ها با احتیاط استفاده کنید و از ایجاد حلقه‌های بی‌نهایت خودداری کنید.
سیگنال‌ها رو برای کارهای ساده و تکراری استفاده کنید.
برای کارهای پیچیده بهتره از ابزارهای دیگری مثل Celery استفاده کنید.

جمع‌بندی
سیگنال‌ها یک ابزار قدرتمند در جنگو هستن که به شما کمک می‌کنن تا برنامه‌های خودکارسازی شده و پیچیده‌تری رو توسعه بدید. با استفاده صحیح از سیگنال‌ها می‌تونید کدهای تمیزتر، خواناتر و قابل نگهداری‌تری بنویسید.

#سیگنال #signals #django #backend
👍103🥴1
دوستان از محتوای کانال خوشتون میاد؟🤔 اگه نه ممنون میشم توی کامنتا بگید تا بهترشون کنیم❤️
Anonymous Poll
81%
بله عالین 😀
14%
نه جالب نیستن 🥱
5%
مزخرفن 😒
1
🚀 آموزش ساخت یک IDE ساده با پایتون و Tkinter

در این آموزش، نحوه ساخت یک محیط توسعه یکپارچه (IDE) ساده با استفاده از پایتون و کتابخانه Tkinter را به شما نشان خواهیم داد. این IDE به شما امکان می‌دهد تا کدهای پایتون خود را نوشته، ذخیره و اجرا کنید. برای شروع، از ابزارهای پایه‌ای استفاده خواهیم کرد، اما شما می‌توانید با افزودن قابلیت‌های بیشتر، IDE خود را پیشرفته‌تر کنید.

🛠 نصب Tkinter
Tkinter معمولاً با پایتون به صورت پیش‌فرض نصب می‌شود. اما اگر آن را ندارید، می‌توانید از دستور زیر برای نصب آن استفاده کنید:

pip install tk
📋 مراحل ساخت IDE

1. ایجاد پنجره اصلی IDE
2. افزودن ویجت‌های متن برای نوشتن کد
3. افزودن منوها برای باز کردن، ذخیره و اجرای فایل‌ها
4. اضافه کردن قابلیت اجرای کد پایتون

1. ایجاد پنجره اصلی IDE

ابتدا یک پنجره اصلی ایجاد می‌کنیم:
import tkinter as tk
from tkinter import filedialog, Text
import subprocess

def create_main_window():
window = tk.Tk()
window.title("پایتون IDE")
window.geometry("800x600")
return window

if __name__ == "__main__":
main_window = create_main_window()
main_window.mainloop()
2. افزودن ویجت‌های متن برای نوشتن کد

برای نوشتن کد، یک ویجت Text اضافه می‌کنیم:
def add_text_widget(window):
text_widget = Text(window, wrap='none')
text_widget.pack(expand=True, fill='both')
return text_widget

if __name__ == "__main__":
main_window = create_main_window()
text_editor = add_text_widget(main_window)
main_window.mainloop()
3. افزودن منوها برای باز کردن، ذخیره و اجرای فایل‌ها

یک منو برای باز کردن، ذخیره و اجرای فایل‌ها اضافه می‌کنیم:
def add_menu(window, text_widget):
menu = tk.Menu(window)
window.config(menu=menu)

file_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="فایل", menu=file_menu)

def open_file():
file_path = filedialog.askopenfilename(defaultextension=".py", filetypes=[("Python files", "*.py")])
if file_path:
with open(file_path, "r", encoding="utf-8") as file:
code = file.read()
text_widget.delete(1.0, tk.END)
text_widget.insert(tk.END, code)

def save_file():
file_path = filedialog.asksaveasfilename(defaultextension=".py", filetypes=[("Python files", "*.py")])
if file_path:
with open(file_path, "w", encoding="utf-8") as file:
code = text_widget.get(1.0, tk.END)
file.write(code)

def run_code():
code = text_widget.get(1.0, tk.END)
exec(code)

file_menu.add_command(label="باز کردن", command=open_file)
file_menu.add_command(label="ذخیره", command=save_file)
file_menu.add_separator()
file_menu.add_command(label="اجرا", command=run_code)

if __name__ == "__main__":
main_window = create_main_window()
text_editor = add_text_widget(main_window)
add_menu(main_window, text_editor)
main_window.mainloop()
4. اضافه کردن قابلیت اجرای کد پایتون

برای اجرای کد پایتون، از توابع داخلی پایتون استفاده می‌کنیم:
`
import tkinter as tk
from tkinter import filedialog, Text, messagebox

def create_main_window():
window = tk.Tk()
window.title("پایتون IDE")
window.geometry("800x600")
return window

def add_text_widget(window):
text_widget = Text(window, wrap='none')
text_widget.pack(expand=True, fill='both')
return text_widget

def add_menu(window, text_widget):
menu = tk.Menu(window)
window.config(menu=menu)

file_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="فایل", menu=file_menu)

def open_file():
file_path = filedialog.askopenfilename(defaultextension=".py", filetypes=[("Python files", "*.py")])
if file_path:
with open(file_path, "r", encoding="utf-8") as file:
code = file.read()
text_widget.delete(1.0, tk.END)
👍9🔥2
https://t.iss.one/+td1EcO_YfSphNTlk

دوستان این لینک گروهه میتونید توش جوین شید و چت بکنید و سوالاتونو بپرسید یا ... هرکار دیگه ای
👍2
Ninja Learn | نینجا لرن pinned «https://t.iss.one/+td1EcO_YfSphNTlk دوستان این لینک گروهه میتونید توش جوین شید و چت بکنید و سوالاتونو بپرسید یا ... هرکار دیگه ای»
سلام رفقا 👋

پایه اید فردا پرسش و پاسخ تو اینستا بذاریم و سوالاتونو جواب بدیم؟
Final Results
58%
آره بذار
42%
نذار، سوالی ندارم
1
💎 کالبک ها در جاوا اسکریپت 💎

امروز میخوایم یکی از مفهوم های خیلی مهم و کاربردی در جاوا اسکریپت رو با هم بررسی کنیم: کالبک ها (callbacks).
شاید اولش یه کم پیچیده به نظر برسه، اما نگران نباشید! با مثال های ساده و کاربردی، این مفهوم رو براتون خیلی روشن میکنم.

کالبک چیه؟

کالبک در واقع یه تابعه که به عنوان آرگومان به تابع دیگه ای پاس داده میشه. یعنی یه تابع رو میگیریم و به جای اینکه خودمون مستقیماً اونو اجرا کنیم، به تابع دیگه ای میدیم تا در زمان مناسب خودش اونو صدا بزنه.


چرا به کالبک نیاز داریم؟
فرض کن میخوای یه عملیات خاصی رو انجام بدی، اما میخوای بعد از اینکه این عملیات تموم شد، یه کار دیگه ای هم انجام بشه. اینجا دیگه کالبک ها به دادمون میرسن.
با استفاده از کالبک ها میتونیم بگیم که بعد از اینکه عملیات اول تموم شد، کدهایی که داخل کالبک نوشته شده، اجرا بشه.

مثال ساده:


function greet(name, callback) { console.log(`سلام ${name}!`); callback(); } function sayGoodbye() { console.log("خداحافظ!"); } greet("علی", sayGoodbye); 

در این مثال:
تابع greet دو آرگومان میگیره: یک نام و یک کالبک.
بعد از چاپ سلام، تابع callback رو صدا میزنه که در این مثال sayGoodbye هست.


پس خروجی این کد میشه:

سلام علی!
خداحافظ!

مثال کاربردی تر:

function fetchData(url, callback) { // کدهایی برای دریافت داده از یک آدرس اینترنتی // ... callback(data); // بعد از دریافت داده، کالبک رو با داده دریافت شده صدا میزنه } function displayData(data) { console.log(data); } fetchData("https://api.example.com/data", displayData); 

در این مثال: ⬇️

1⃣ تابع fetchData داده رو از یک آدرس اینترنتی دریافت میکنه.

2⃣ بعد از دریافت داده، تابع callback رو با داده دریافت شده صدا میزنه.

3⃣ و displayData به عنوان کالبک استفاده شده و داده رو در کنسول چاپ میکنه.

👀 کاربردهای کالبک ها:

تابع های ناهمزمان: برای مدیریت عملیات هایی که زمان بر هستند مثل درخواست های HTTP، تایمرها و ...

📅 رویدادها(Events): در رویدادهایی مثل کلیک کردن روی یک دکمه، بارگذاری یک صفحه و ...

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

جمع بندی:
کالبک ها یه ابزار قدرتمند در جاوا اسکریپت هستن که بهتون اجازه میدن کدهایتون رو به صورت ناهمزمان و رویداد محور بنویسید. با تمرین و ممارست، میتونید به راحتی از کالبک ها در پروژه های خودتون استفاده کنید.

#javascript #callback #programing
🔥2
Ninja Learn | نینجا لرن
سلام رفقا 👋

پایه اید فردا پرسش و پاسخ تو اینستا بذاریم و سوالاتونو جواب بدیم؟
سلام رفقا 👋

همونطوری که دیشب گفتم، توی اینستا کوئسشن باکس گذاشتیم

بیاید سوالاتونو بپرسید همه رو جواب میدیم 🌹

https://www.instagram.com/stories/ninjalearn.ir/3425693636133198315?igsh=MXd0M3ZqcXg5ZG4zZA==
2
درضمن رفقا

فالو کردن و لایک کردن پست های پیج اینستامون، بهمون انرژی میده پست های بیشتری بذاریم و دوره های بیشتری منتشر کنیم 😊

برای شما فقط چند ثانیه ازتون زمان میگیره ولی برای ما یه دنیا ارزش داره حمایت هاتون 🥹

عشقید 🌹
52👎1
Ninja Learn | نینجا لرن pinned «سلام رفقا 👋 همونطوری که دیشب گفتم، توی اینستا کوئسشن باکس گذاشتیم بیاید سوالاتونو بپرسید همه رو جواب میدیم 🌹 https://www.instagram.com/stories/ninjalearn.ir/3425693636133198315?igsh=MXd0M3ZqcXg5ZG4zZA==»
#پست_جدید

💎کوئری ست های بهینه در جنگو 💎


تا حالا شده برنامه‌تون مثل لاک‌پشت باشه و شما هم هی سر به دیوار بکوبید که چرا اینقدر کند شده؟ 😖

یکی از دلایلی که ممکنه سرعت برنامه‌تون رو کم کنه، کوئری ست های پیچیده و طولانی از دیتابیس هست. اما نگران نباشید! امروز میخوایم با همدیگه یه سری ترفند رو یاد بگیریم که کوئری ست هامون رو تو جنگو رو خیلی سریع کنیم.

کوئری ست چیه و چرا مهه؟

کوئری ست یه جور جعبه هست که توش یه مشت اطلاعات از دیتابیس جمع میشه. مثلاً می‌خواییم همه محصولاتی که قیمتشون زیر 100 تومنه رو پیدا کنیم. QuerySet این کارو برامون انجام میده.


حالا چرا QuerySet اینقدر مهمه؟

چون نحوه ساختن این جعبه ، مستقیم روی سرعت برنامه‌مون تاثیر داره. اگه درست ساخته بشه، برنامه‌مون مثل برق کار می‌کنه و اگه اشتباه ساخته بشه، برنامه‌مون مثل لاک‌پشت میشه!

ترفندهایی برای کوئری ست ها با سرعت بالا

🅰 فقط اون چیزی رو بگیر که نیاز داری:

1️⃣ استفاده از ()only و ()defer:
فرض کن یه محصول کلی اطلاعات داره، از رنگش گرفته تا مدلش. اما تو فقط به اسم و قیمتش نیاز داری. با استفاده از ()only فقط همون اطلاعاتی که نیاز داری رو از دیتابیس بخون.


2️⃣ اجتناب از ()select_related و ()prefetch_related بی‌جا:
این دو تا مثل یه پل بین دو تا جدول هستن. اما اگه بی‌جا ازشون استفاده کنیم، کوری ست پیچیده میشه و سرعت برنامه‌مون کم میشه.


🅱  فیلتر کردن رو حرفه ای انجام بده:

1️⃣ فیلترهای منطقی: از فیلترهای and و or برای پیدا کردن دقیق‌تر اطلاعات استفاده کن.

3️⃣ فیلترهای تاریخ و زمان: برای پیدا کردن اطلاعاتی که تاریخشون بین دو تاریخ خاصی هست، از فیلترهای مخصوص تاریخ و زمان استفاده کن.

4️⃣ به تنبل بودن کوئری ست ها (lazy queryset)دقت کن:
کوئری ست ها تا زمانی که نیاز نباشه ارزیابی نمی‌شن این یعنی تا وقتی که بخوای تعداد محصولاتی که پیدا کردی رو چاپ کنی، کوئری ست به دیتابیس ارسال نمی‌شه.

5️⃣ از Aggregation استفاده کن:محاسبه مجموع، میانگین و ... برای محاسبه اینجور چیزها از متدهای Aggregation مثل ()count(), sum(), avg استفاده کن.

6️⃣ ایندکس‌ها رو فراموش نکن:
سرعت بخشیدن به جستجوها ایندکس مثل یه فهرست تلفنی برای دیتابیس هست. با ایجاد ایندکس روی فیلدهایی که زیاد روشون جستجو می‌کنی، سرعت جستجو رو خیلی زیاد می‌کنی.


🌡 مثال عملی

from myapp.models import Product

# گرفتن همه محصولات با قیمت کمتر از 100000 تومان و فقط نمایش نام و قیمت
products = Product.objects.filter(price__lte=100000).only('name', 'price')

# محاسبه تعداد محصولات در هر دسته
product_counts = Product.objects.values('category').annotate(count=Count('id'))


جمع بندی
بهینه سازی QuerySet ها مثل اینه که یه ماشین مسابقه رو تیونینگ کنی. با رعایت این نکات ساده، برنامه‌ت مثل برق کار می‌کنه و تو هم می‌تونی با خیال راحت به کارهای دیگه برسی.

نکته: همیشه سعی کن QuerySet ها رو مرحله به مرحله بنویسی و از ابزارهای دیباگ برای بررسی عملکردشون استفاده کنی.

#programing #django #queryset
🔥9👍1😁1
سلام رفقا 👋
اولین دوره‌مون که دوره DRF هست در حال ضبطه و به زودی منتشر میشه 🙂
دوره دوم مون "امنیت توی برنامه نویسی وب" هست که کلا به صورت تئوریه و توش مباحث امنیتی قراره گفته بشه. حالا سوال من اینه که دوره همون امنیت باشه یا اینکه یه دوره دیگه میخواید؟
Final Results
43%
امنیت باشه، تئوری اوکیه
47%
امنیت باشه، ولی تئوری نباشه
10%
نه یه دوره دیگه میخوام
🥰2
Ninja Learn | نینجا لرن pinned «سلام رفقا 👋
اولین دوره‌مون که دوره DRF هست در حال ضبطه و به زودی منتشر میشه 🙂
دوره دوم مون "امنیت توی برنامه نویسی وب" هست که کلا به صورت تئوریه و توش مباحث امنیتی قراره گفته بشه. حالا سوال من اینه که دوره همون امنیت باشه یا اینکه یه دوره دیگه میخواید؟
»