سلام رفقا 👋
امیدوارم حال دلتون عالی باشه 😄
امروز یه پست خیلی مهم راجب جنگو داریم
مشکلی که خیلیا دارن و کسی توی دوره های آموزشی یادش نمیده یا کمتر کسی یاد میده
منتظرش باشید راس ساعت ۶ منتشر میشه 🤟
ارادتمند شما 🌹
امیدوارم حال دلتون عالی باشه 😄
امروز یه پست خیلی مهم راجب جنگو داریم
مشکلی که خیلیا دارن و کسی توی دوره های آموزشی یادش نمیده یا کمتر کسی یاد میده
منتظرش باشید راس ساعت ۶ منتشر میشه 🤟
ارادتمند شما 🌹
👍4
🟡 کوئیز جاوااسکریپت
خروجی این کد چیه؟ (5 * "-")console.log
خروجی این کد چیه؟ (5 * "-")console.log
Anonymous Quiz
9%
Error
61%
پنج تا خط تیره (-----)
24%
NaN
6%
هیچکدوم
❤1
#پست_جدید
💎 مشکل N+1 توی جنگو 💎
امروز میخوایم در مورد یکی از مشکلاتی که ممکنه توی پروژههای جنگو باهاش برخورد کنیم صحبت کنیم. این مشکل اسمش N+1 هست و اگه بدونیم چیه و چطوری حلش کنیم، میتونیم برنامههای بهینهتر و سریعتری بنویسیم.
❓مشکل N+1 چیه؟
فرض کنید یک وبسایت فروشگاهی داریم که توش محصولات و دسته بندی های محصولات داریم. هر محصول به یک دسته تعلق داره و هر دسته میتونه چندین محصول داشته باشه.
اگه بخوایم لیستی از محصولات به همراه اسم دسته بندی شون نمایش بدیم، بدون استفاده از متد select_related برای هر محصول یک کوئری جداگونه برای دریافت اطلاعات دسته بندی اجرا میشه. این یعنی اگه 10 محصول داشته باشیم، 11 کوئری به دیتابیس ارسال میشه که این خیلی بده مخصوصا اگه تعداد محصولات توی دیتابیس خیلی زیاد باشه.
✅ چطوری از این مشکل جلوگیری کنیم؟
1️⃣ متد select_related:
جنگو ابزارهای خوبی برای حل این مشکل در اختیارمون قرار داده. یکی از این ابزارها، متد select_related هست. با استفاده از این متد میتونیم همه اطلاعات مرتبط با یک آبجکت رو در یک کوئری از دیتابیس بخونیم. به این ترتیب، تعداد دفعات مراجعه به دیتابیس به شدت کاهش پیدا میکنه و برنامهمون خیلی سریعتر اجرا میشه.
✅ مزایای استفاده از متد select_related؟
1- سرعت بیشتر: چون تعداد دفعات مراجعه به دیتابیس رو کم میکنه.
2- کاهش بار سرور: با کاهش تعداد کوئریها، فشار روی سرور کمتر میشه.
3- کد تمیزتر: کدت منظمتر و قابل فهمتر میشه.
2️⃣ ابزار django-debug-toolbar:
جنگو یک ابزار دیباگ خیلی خوب داره به اسم django-debug-toolbar که بهتون کمک میکنه تا بتونین مشکلات پرفورمنسی برنامهتون رو شناسایی کنین. این ابزار بهتون نشون میده که کدتون چند بار به دیتابیس مراجعه کرده و کجا مشکل N+1 وجود داره. با استفاده از این ابزار میتونین به راحتی مشکل N+1 رو پیدا کنین و برطرفش کنین.
⭕️ برای نصب این پکیج به این آدرس برید:
https://django-debug-toolbar.readthedocs.io/en/latest/installation.html
✅ جمعبندی:
مشکل N+1 یکی از مشکلاتی هست که ممکنه در پروژههای جنگو باهاش برخورد کنین. این مشکل باعث میشه که برنامهتون کند بشه و پرفورمنسش کاهش پیدا کنه. با استفاده از متد select_related و ابزار django-debug-toolbar میتونین به راحتی این مشکل رو حل کنین و برنامههای بهینهتر و سریعتری بنویسین.
امیدوارم این پست برای شما مفید بوده باشه. اگه سوالی داشتین، حتما بپرسین.
#جنگو #برنامه_نویسی #مشکل_N_plus_one #بهینهسازی #django_debug_toolbar
💎 مشکل N+1 توی جنگو 💎
امروز میخوایم در مورد یکی از مشکلاتی که ممکنه توی پروژههای جنگو باهاش برخورد کنیم صحبت کنیم. این مشکل اسمش N+1 هست و اگه بدونیم چیه و چطوری حلش کنیم، میتونیم برنامههای بهینهتر و سریعتری بنویسیم.
❓مشکل N+1 چیه؟
فرض کنید یک وبسایت فروشگاهی داریم که توش محصولات و دسته بندی های محصولات داریم. هر محصول به یک دسته تعلق داره و هر دسته میتونه چندین محصول داشته باشه.
class Category(models.Model):
name = models.CharField(max_length=100)
class Product(models.Model):
name = models.CharField(max_length=100)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
اگه بخوایم لیستی از محصولات به همراه اسم دسته بندی شون نمایش بدیم، بدون استفاده از متد select_related برای هر محصول یک کوئری جداگونه برای دریافت اطلاعات دسته بندی اجرا میشه. این یعنی اگه 10 محصول داشته باشیم، 11 کوئری به دیتابیس ارسال میشه که این خیلی بده مخصوصا اگه تعداد محصولات توی دیتابیس خیلی زیاد باشه.
✅ چطوری از این مشکل جلوگیری کنیم؟
1️⃣ متد select_related:
جنگو ابزارهای خوبی برای حل این مشکل در اختیارمون قرار داده. یکی از این ابزارها، متد select_related هست. با استفاده از این متد میتونیم همه اطلاعات مرتبط با یک آبجکت رو در یک کوئری از دیتابیس بخونیم. به این ترتیب، تعداد دفعات مراجعه به دیتابیس به شدت کاهش پیدا میکنه و برنامهمون خیلی سریعتر اجرا میشه.
✅ مزایای استفاده از متد select_related؟
1- سرعت بیشتر: چون تعداد دفعات مراجعه به دیتابیس رو کم میکنه.
2- کاهش بار سرور: با کاهش تعداد کوئریها، فشار روی سرور کمتر میشه.
3- کد تمیزتر: کدت منظمتر و قابل فهمتر میشه.
2️⃣ ابزار django-debug-toolbar:
جنگو یک ابزار دیباگ خیلی خوب داره به اسم django-debug-toolbar که بهتون کمک میکنه تا بتونین مشکلات پرفورمنسی برنامهتون رو شناسایی کنین. این ابزار بهتون نشون میده که کدتون چند بار به دیتابیس مراجعه کرده و کجا مشکل N+1 وجود داره. با استفاده از این ابزار میتونین به راحتی مشکل N+1 رو پیدا کنین و برطرفش کنین.
⭕️ برای نصب این پکیج به این آدرس برید:
https://django-debug-toolbar.readthedocs.io/en/latest/installation.html
✅ جمعبندی:
مشکل N+1 یکی از مشکلاتی هست که ممکنه در پروژههای جنگو باهاش برخورد کنین. این مشکل باعث میشه که برنامهتون کند بشه و پرفورمنسش کاهش پیدا کنه. با استفاده از متد select_related و ابزار django-debug-toolbar میتونین به راحتی این مشکل رو حل کنین و برنامههای بهینهتر و سریعتری بنویسین.
امیدوارم این پست برای شما مفید بوده باشه. اگه سوالی داشتین، حتما بپرسین.
#جنگو #برنامه_نویسی #مشکل_N_plus_one #بهینهسازی #django_debug_toolbar
👍10
#کوئیز_جاوااسکریپت
کدام یک از روشهای زیر برای اضافه کردن یک عنصر جدید به انتهای یک آرایه در جاوا اسکریپت صحیح است؟🤔
کدام یک از روشهای زیر برای اضافه کردن یک عنصر جدید به انتهای یک آرایه در جاوا اسکریپت صحیح است؟🤔
Anonymous Quiz
17%
array.add(element)
38%
array.push(element)
42%
array.append(element)
4%
array.insert(element)
👍4
#کوئیز_پایتونی
کدام عبارت درباره دکوریتورها در پایتون صحیح است؟🤔
کدام عبارت درباره دکوریتورها در پایتون صحیح است؟🤔
Anonymous Quiz
83%
دکوریتورها برای تغییر رفتار یک تابع استفاده میشوند
3%
دکوریتورها نوعی متغیر خاص در پایتون هستند
10%
دکوریتورها فقط برای اضافه کردن تزئینات به کد استفاده میشوند
4%
دکوریتورها برای تعریف کلاسهای جدید استفاده میشوند
🥰2
#پست_جدید
💎 تست نویسی با pytest درجنگو 💎
امروز میخوایم با یکی از ابزارهای قدرتمند برای تست کردن اپلیکیشنهای جنگویی آشنا بشیم به اسم Pytest 😁
❓چرا pytest؟
چون که خیلی ساده و روان هست، کلی قابلیت کاربردی داره و جامعه کاربری بزرگی پشتشه. با pytest میتونیم با خیال راحت کدهامون رو بنویسیم و مطمئن باشیم که همه چیز سر جای خودش کار میکنه.
1️⃣ اولین قدم: نصب pytest
برای نصب pytest کافیه توی ترمینال پروژه جنگوییتون این دستور رو بزنید:
2️⃣ دومین قدم: پیکربندی Pytest
پیکربندی یعنی اینکه به Pytest بگیم چطوری تستهامون رو اجرا کنه. مثلاً بگیم تستهامون کجا هستن، چه جوری گزارش بدیم و از چه ابزارهای اضافهای استفاده کنیم.
✅ فایل پیکربندی: pytest.ini
برای پیکربندی Pytest، از فایلی به اسم pytest.ini استفاده میکنیم. این فایل رو تو ریشه پروژه یا توی پوشهای که تستهامون توش هست میذاریم.
پیکربندی برای پروژه های جنگو:👇
حالا بریم چندتا مثال ببینیم😁
✅ مثال های ساده:
1️⃣ تست مدلها (models)
فرض کنین یه مدل User داریم:
برای تست این مدل میتونیم یه تست بنویسیم که بررسی کنه آیا فیلدهای username و email اجباری هستن یا نه:
این تست سعی میکنه یه کاربر بدون مقداردهی کردن فیلدهای username و email ایجاد کنه. چون این فیلدها اجباری هستن، باید یه خطا از نوع ValueError بگیره.
2️⃣ تست ویوها (views)
حالا بیاین یه ویو ساده رو تست کنیم که یه لیست از
برای تست این ویو، میتونیم از یه کلاینت تست استفاده کنیم تا درخواست GET به این ویو بفرسته و نتیجه رو بررسی کنیم:
این تست یه درخواست GET به آدرس '/users/' میفرسته و بررسی میکنه که آیا پاسخ با کد وضعیت 200 (OK) برگشته یا نه.
3️⃣ تست URL ها
برای تست URL ها هم میتونیم از تابع resolve استفاده کنیم:
این تست بررسی میکنه که آیا URL '/users/' به ویوی user_list اشاره میکنه یا نه.
✅ جمعبندی
در این پست، به صورت خیلی خلاصه با تست نویسی در جنگو با استفاده از pytest آشنا شدیم. pytest ابزاری قدرتمند و کاربرپسنده برای نوشتن تستهای مختلف در پروژههای جنگویی هست. با نوشتن تست، میتونیم اطمینان حاصل کنیم که اپلیکیشن ما به درستی کار میکنه و تغییرات جدید باعث ایجاد مشکل نمیشه.
⭕️ نکته: این فقط یه مقدمه بود! pytest قابلیتهای خیلی بیشتری داره که میتونیم ازشون استفاده کنیم. مثلاً میتونیم تستهای پارامتریزه شده، تستهای پیچیده تر و تستهای مربوط به قالبها (templates) بنویسیم.
میتونید برای مطالعه بیشتر به داکیومنت pytest سر بزنید
#جنگو #پایتون #pytest
💎 تست نویسی با pytest درجنگو 💎
امروز میخوایم با یکی از ابزارهای قدرتمند برای تست کردن اپلیکیشنهای جنگویی آشنا بشیم به اسم Pytest 😁
❓چرا pytest؟
چون که خیلی ساده و روان هست، کلی قابلیت کاربردی داره و جامعه کاربری بزرگی پشتشه. با pytest میتونیم با خیال راحت کدهامون رو بنویسیم و مطمئن باشیم که همه چیز سر جای خودش کار میکنه.
1️⃣ اولین قدم: نصب pytest
برای نصب pytest کافیه توی ترمینال پروژه جنگوییتون این دستور رو بزنید:
pip install pytest
2️⃣ دومین قدم: پیکربندی Pytest
پیکربندی یعنی اینکه به Pytest بگیم چطوری تستهامون رو اجرا کنه. مثلاً بگیم تستهامون کجا هستن، چه جوری گزارش بدیم و از چه ابزارهای اضافهای استفاده کنیم.
✅ فایل پیکربندی: pytest.ini
برای پیکربندی Pytest، از فایلی به اسم pytest.ini استفاده میکنیم. این فایل رو تو ریشه پروژه یا توی پوشهای که تستهامون توش هست میذاریم.
پیکربندی برای پروژه های جنگو:👇
[pytest]
addopts = --verbose
testpaths = tests
DJANGO_SETTINGS_MODULE = 'myproject.settings.test'
حالا بریم چندتا مثال ببینیم😁
✅ مثال های ساده:
1️⃣ تست مدلها (models)
فرض کنین یه مدل User داریم:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=100)
email = models.EmailField()
برای تست این مدل میتونیم یه تست بنویسیم که بررسی کنه آیا فیلدهای username و email اجباری هستن یا نه:
import pytest
from .models import User
def test_user_creation():
with pytest.raises(ValueError):
user = User.objects.create()
این تست سعی میکنه یه کاربر بدون مقداردهی کردن فیلدهای username و email ایجاد کنه. چون این فیلدها اجباری هستن، باید یه خطا از نوع ValueError بگیره.
2️⃣ تست ویوها (views)
حالا بیاین یه ویو ساده رو تست کنیم که یه لیست از
def user_list(request):
users = User.objects.all()
return render(request, 'users.html', {'users': users})
برای تست این ویو، میتونیم از یه کلاینت تست استفاده کنیم تا درخواست GET به این ویو بفرسته و نتیجه رو بررسی کنیم:
from django.test import Client
def test_user_list_view():
client = Client()
response = client.get('/users/')
assert response.status_code == 200
این تست یه درخواست GET به آدرس '/users/' میفرسته و بررسی میکنه که آیا پاسخ با کد وضعیت 200 (OK) برگشته یا نه.
3️⃣ تست URL ها
برای تست URL ها هم میتونیم از تابع resolve استفاده کنیم:
from django.urls import resolve
def test_user_list_url():
url = resolve('/users/')
assert url.func == user_list
این تست بررسی میکنه که آیا URL '/users/' به ویوی user_list اشاره میکنه یا نه.
✅ جمعبندی
در این پست، به صورت خیلی خلاصه با تست نویسی در جنگو با استفاده از pytest آشنا شدیم. pytest ابزاری قدرتمند و کاربرپسنده برای نوشتن تستهای مختلف در پروژههای جنگویی هست. با نوشتن تست، میتونیم اطمینان حاصل کنیم که اپلیکیشن ما به درستی کار میکنه و تغییرات جدید باعث ایجاد مشکل نمیشه.
⭕️ نکته: این فقط یه مقدمه بود! pytest قابلیتهای خیلی بیشتری داره که میتونیم ازشون استفاده کنیم. مثلاً میتونیم تستهای پارامتریزه شده، تستهای پیچیده تر و تستهای مربوط به قالبها (templates) بنویسیم.
میتونید برای مطالعه بیشتر به داکیومنت pytest سر بزنید
#جنگو #پایتون #pytest
❤8
💎 ساختن چندتا ابجکت بصورت همزمان (bulk_create) در جنگو 💎
✔ امروز میخوایم در مورد یکی از قابلیتهای خیلی کاربردی جنگو به اسم Bulk Create صحبت کنیم. این قابلیت وقتی به دردتون میخوره که بخواید چندتا داده رو یکجا به دیتابیس اضافه کنید. مثلا فرض کنید میخواید اطلاعات ۱۰ تا محصول جدید رو تو فروشگاه آنلاینتون ثبت کنید. اگه بخواید هر کدوم رو تک تک سیو کنید که کلی وقتتون رو میگیره و اصلا به صرفه و بهینه نیست.
حالا ببینم Bulk Create چطوری کار میکنه؟🤔
به جای اینکه برای هر داده یه دستور سیو جداگانه بنویسیم، با Bulk Create میتونیم همه داده ها رو یکجا داخل یه لیست بریزیم و با یه دستور ساده همه رو با هم سیو کنیم. اینجوری سرعت کارمون خیلی بیشتر میشه و منابع سرور هم کمتر مصرف میشه. ⚡
1️⃣ مثال اول: اضافه کردن چندتا محصول جدید
فرض کنید مدل محصول ما این شکلیه:
حالا میخوایم چندتا محصول جدید به این شکل اضافه کنیم: 👇
با این کد، همه محصولات داخل لیست products یکجا به دیتابیس اضافه میشن. ✅
2️⃣ مثال دوم: اضافه کردن چندتا کامنت به یک پست
اینجا هم به همین صورت، همه کامنتها به یکجا به پست موردنظر اضافه میشن.
⭕ نکات مهم:
توجه❗: Bulk Create فقط برای ایجاد اشیاء جدید استفاده میشه. برای آپدیت کردن اشیاء موجود باید از روشهای دیگه استفاده کنید.
بهینه سازی ⏱️: برای بهبود عملکرد، سعی کنید تعداد اشیایی که در هر بار Bulk Create ایجاد میکنید رو بهینه کنید. خیلی زیاد یا خیلی کم بودن تعداد اشیاء میتونه روی عملکرد سیستم تاثیر بگذاره.
خطاها ⚠: اگر در حین اجرای Bulk Create خطایی رخ بده، هیچکدوم از اشیاء ایجاد نمیشن. پس حتما قبل از اجرا، دادهها رو به خوبی اعتبارسنجی کنید.
✅ جمعبندی
و در اخر Bulk Create یکی از ابزارهای قدرتمند جنگو است که به شما کمک میکنه تا عملیات ایجاد داده رو بهینه کنید. با استفاده از این قابلیت، میتونید به راحتی هزاران رکورد رو در کوتاهترین زمان ممکن به دیتابیس اضافه کنید. ⏱️
اگه دوست دارید درموردش بیشتر بدونید میتونید یه سر به داکیومنت خود جنگو بزنید 😁
امیدوارم این آموزش براتون مفید بوده باشه :)
#جنگو #BulkCreate #برنامه_نویسی #پایتون #توسعه_وب #django #python #webdevelopment
✔ امروز میخوایم در مورد یکی از قابلیتهای خیلی کاربردی جنگو به اسم Bulk Create صحبت کنیم. این قابلیت وقتی به دردتون میخوره که بخواید چندتا داده رو یکجا به دیتابیس اضافه کنید. مثلا فرض کنید میخواید اطلاعات ۱۰ تا محصول جدید رو تو فروشگاه آنلاینتون ثبت کنید. اگه بخواید هر کدوم رو تک تک سیو کنید که کلی وقتتون رو میگیره و اصلا به صرفه و بهینه نیست.
حالا ببینم Bulk Create چطوری کار میکنه؟🤔
به جای اینکه برای هر داده یه دستور سیو جداگانه بنویسیم، با Bulk Create میتونیم همه داده ها رو یکجا داخل یه لیست بریزیم و با یه دستور ساده همه رو با هم سیو کنیم. اینجوری سرعت کارمون خیلی بیشتر میشه و منابع سرور هم کمتر مصرف میشه. ⚡
1️⃣ مثال اول: اضافه کردن چندتا محصول جدید
فرض کنید مدل محصول ما این شکلیه:
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.FloatField()
description = models.TextField()
حالا میخوایم چندتا محصول جدید به این شکل اضافه کنیم: 👇
products = [
Product(name='گوشی آیفون 14', price=15000000, description='بهترین گوشی سال'),
Product(name='لپتاپ دل XPS 13', price=25000000, description='لپتاپ فوق سبک و قدرتمند'),
# ... و بقیه محصولات
]
Product.objects.bulk_create(products)
با این کد، همه محصولات داخل لیست products یکجا به دیتابیس اضافه میشن. ✅
2️⃣ مثال دوم: اضافه کردن چندتا کامنت به یک پست
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
text = models.TextField()
comments = [
Comment(post=post, text='کامنت اول'),
Comment(post=post, text='کامنت دوم'),
# ... و بقیه کامنتها
]
Comment.objects.bulk_create(comments)
اینجا هم به همین صورت، همه کامنتها به یکجا به پست موردنظر اضافه میشن.
⭕ نکات مهم:
توجه❗: Bulk Create فقط برای ایجاد اشیاء جدید استفاده میشه. برای آپدیت کردن اشیاء موجود باید از روشهای دیگه استفاده کنید.
بهینه سازی ⏱️: برای بهبود عملکرد، سعی کنید تعداد اشیایی که در هر بار Bulk Create ایجاد میکنید رو بهینه کنید. خیلی زیاد یا خیلی کم بودن تعداد اشیاء میتونه روی عملکرد سیستم تاثیر بگذاره.
خطاها ⚠: اگر در حین اجرای Bulk Create خطایی رخ بده، هیچکدوم از اشیاء ایجاد نمیشن. پس حتما قبل از اجرا، دادهها رو به خوبی اعتبارسنجی کنید.
✅ جمعبندی
و در اخر Bulk Create یکی از ابزارهای قدرتمند جنگو است که به شما کمک میکنه تا عملیات ایجاد داده رو بهینه کنید. با استفاده از این قابلیت، میتونید به راحتی هزاران رکورد رو در کوتاهترین زمان ممکن به دیتابیس اضافه کنید. ⏱️
اگه دوست دارید درموردش بیشتر بدونید میتونید یه سر به داکیومنت خود جنگو بزنید 😁
امیدوارم این آموزش براتون مفید بوده باشه :)
#جنگو #BulkCreate #برنامه_نویسی #پایتون #توسعه_وب #django #python #webdevelopment
👍12❤2
بچه ها توی پیج کوسشن باکس گذاشتیم✌️
هرسوالی که دارید رو میتونید اونجا بپرسید جواب میدیم 😉
لینک کوسشن باکس👇
https://www.instagram.com/stories/ninjalearn.ir/3422061628463170151?igsh=MWF3ODl6aGw0ajhlZg==
هرسوالی که دارید رو میتونید اونجا بپرسید جواب میدیم 😉
لینک کوسشن باکس👇
https://www.instagram.com/stories/ninjalearn.ir/3422061628463170151?igsh=MWF3ODl6aGw0ajhlZg==
👍3
سلام رفقا 👋
امیدوارم حال دلتون عالی باشه ❤️ متوجه شدیم پست های اینستامون رو دوست ندارید بنا به دلایلی و بازخورد نمیگیریم ازتون تو اینستا 🤔 دلیلش چیه به نظرتون؟ لطفا کمکمون کنید پست های بهتری بذاریم تو اینستا 🌹
امیدوارم حال دلتون عالی باشه ❤️ متوجه شدیم پست های اینستامون رو دوست ندارید بنا به دلایلی و بازخورد نمیگیریم ازتون تو اینستا 🤔 دلیلش چیه به نظرتون؟ لطفا کمکمون کنید پست های بهتری بذاریم تو اینستا 🌹
Anonymous Poll
3%
با موضوع پستا حال نمیکنم
18%
کیفیت پستا پایینه
50%
حال ندارم بیام اینستا
29%
اکانت اینستا ندارم
👍3
Ninja Learn | نینجا لرن
سلام رفقا 👋
امیدوارم حال دلتون عالی باشه ❤️ متوجه شدیم پست های اینستامون رو دوست ندارید بنا به دلایلی و بازخورد نمیگیریم ازتون تو اینستا 🤔 دلیلش چیه به نظرتون؟ لطفا کمکمون کنید پست های بهتری بذاریم تو اینستا 🌹
امیدوارم حال دلتون عالی باشه ❤️ متوجه شدیم پست های اینستامون رو دوست ندارید بنا به دلایلی و بازخورد نمیگیریم ازتون تو اینستا 🤔 دلیلش چیه به نظرتون؟ لطفا کمکمون کنید پست های بهتری بذاریم تو اینستا 🌹
لطفا همگی توی نظرسنجی شرکت کنن
بهمون توی تولید محتوای بهتر کمک میکنه
ازتون ممنونم 🌹
بهمون توی تولید محتوای بهتر کمک میکنه
ازتون ممنونم 🌹
❤3
💎 ریس کاندیشن (race condition) 💎
چند وقت پیش یه مشکلی داشتم که حسابی سرمو به دیوار کوبید. داشتم روی یه پروژه کار میکردم که یهو دیدم همه چی قاتی پاتی شده! 😫
بعد از کلی تحقیق فهمیدم که مشکل از یه چیز به اسم "ریس کاندیشن" بوده.
ریس کاندیشن چیه؟ ❓
فرض کن دو تا قطار دارن همزمان به سمت یه ایستگاه میان. اگه سیستم کنترل ترافیک درست کار نکنه، ممکنه دو تا قطار با هم برخورد کنن! ریس کاندیشن هم دقیقا همینجوریه. وقتی چند تا درخواست به طور همزمان به سرور ارسال میشه و ما برای مدیریت این درخواستها یه سیستم درست و حسابی نداشته باشیم، ممکنه دادههامون خراب بشه و برنامهمون درست کار نکنه.
ریس کاندیشن توی جنگو چطور پیش میاد؟ ❓
مثلا فرض کن دو تا کاربر همزمان بخوان یه محصول رو تو سایت بخرن. اگه ما یه سیستم قفلگذاری درست و حسابی نداشته باشیم، ممکنه هر دو کاربر فکر کنن که اون محصول هنوز موجوده و در نتیجه چند تا سفارش برای یه محصول ثبت بشه.
چطور از ریس کاندیشن جلوگیری کنیم؟❓
نگران نباشید، راه حلهایی برای این مشکل وجود داره. یکی از روشهای رایج استفاده از قفلها (Lock) هست. با استفاده از قفلها میتونیم مطمئن بشیم که فقط یک درخواست در یک لحظه به یک داده خاص دسترسی داشته باشه.
در جنگو چطور؟❓
جنگو ابزارهای خوبی برای مدیریت ریس کاندیشن در اختیارمون قرار میده. مثلا میتونیم از transaction و F() expressions استفاده کنیم.
🔒عملیات Transaction: با استفاده از transaction میتونیم یه سری عملیات رو به صورت یکپارچه انجام بدیم. یعنی اگه یکی از این عملیات با شکست مواجه بشه، همه عملیات لغو میشه. (توی پستای قبلی درموردش توضیح دادم)
✅استفاده از F() expressions: با استفاده از F() expressions میتونیم مقدار یک فیلد رو بر اساس مقدار فعلی اون فیلد تغییر بدیم. این کار به ما کمک میکنه تا از بروز مشکلات ناشی از همزمانی چندین درخواست جلوگیری کنیم.
📑خلاصه کلام:
ریس کاندیشن یه مشکل جدی در برنامهنویسی هست، اما با استفاده از ابزارهای مناسب میتونیم از بروز این مشکل جلوگیری کنیم. پس حواستون به ریس کاندیشن باشه و از روشهای مناسب برای مدیریت اون استفاده کنید.
#ریس_کاندیشن #جنگو #برنامه_نویسی #پایتون
چند وقت پیش یه مشکلی داشتم که حسابی سرمو به دیوار کوبید. داشتم روی یه پروژه کار میکردم که یهو دیدم همه چی قاتی پاتی شده! 😫
بعد از کلی تحقیق فهمیدم که مشکل از یه چیز به اسم "ریس کاندیشن" بوده.
ریس کاندیشن چیه؟ ❓
فرض کن دو تا قطار دارن همزمان به سمت یه ایستگاه میان. اگه سیستم کنترل ترافیک درست کار نکنه، ممکنه دو تا قطار با هم برخورد کنن! ریس کاندیشن هم دقیقا همینجوریه. وقتی چند تا درخواست به طور همزمان به سرور ارسال میشه و ما برای مدیریت این درخواستها یه سیستم درست و حسابی نداشته باشیم، ممکنه دادههامون خراب بشه و برنامهمون درست کار نکنه.
ریس کاندیشن توی جنگو چطور پیش میاد؟ ❓
مثلا فرض کن دو تا کاربر همزمان بخوان یه محصول رو تو سایت بخرن. اگه ما یه سیستم قفلگذاری درست و حسابی نداشته باشیم، ممکنه هر دو کاربر فکر کنن که اون محصول هنوز موجوده و در نتیجه چند تا سفارش برای یه محصول ثبت بشه.
چطور از ریس کاندیشن جلوگیری کنیم؟❓
نگران نباشید، راه حلهایی برای این مشکل وجود داره. یکی از روشهای رایج استفاده از قفلها (Lock) هست. با استفاده از قفلها میتونیم مطمئن بشیم که فقط یک درخواست در یک لحظه به یک داده خاص دسترسی داشته باشه.
در جنگو چطور؟❓
جنگو ابزارهای خوبی برای مدیریت ریس کاندیشن در اختیارمون قرار میده. مثلا میتونیم از transaction و F() expressions استفاده کنیم.
🔒عملیات Transaction: با استفاده از transaction میتونیم یه سری عملیات رو به صورت یکپارچه انجام بدیم. یعنی اگه یکی از این عملیات با شکست مواجه بشه، همه عملیات لغو میشه. (توی پستای قبلی درموردش توضیح دادم)
✅استفاده از F() expressions: با استفاده از F() expressions میتونیم مقدار یک فیلد رو بر اساس مقدار فعلی اون فیلد تغییر بدیم. این کار به ما کمک میکنه تا از بروز مشکلات ناشی از همزمانی چندین درخواست جلوگیری کنیم.
📑خلاصه کلام:
ریس کاندیشن یه مشکل جدی در برنامهنویسی هست، اما با استفاده از ابزارهای مناسب میتونیم از بروز این مشکل جلوگیری کنیم. پس حواستون به ریس کاندیشن باشه و از روشهای مناسب برای مدیریت اون استفاده کنید.
#ریس_کاندیشن #جنگو #برنامه_نویسی #پایتون
Telegram
Ninja Learn | نینجا لرن 🥷
#پست_جدید
🔒 تراکنش (transaction) در فریمورک جنگو 🔒
دراین پست میخوام درمورد یک بحث جالب که اکثرا نمیدونند و یا در اون مشکل دارند صحبت کنم
حالا اون چیه؟ 🤔
❗ عملیات transaction❗
بریم درموردش داخل جنگو توضیح بدیم
درجنگو قابلیت transaction برای…
🔒 تراکنش (transaction) در فریمورک جنگو 🔒
دراین پست میخوام درمورد یک بحث جالب که اکثرا نمیدونند و یا در اون مشکل دارند صحبت کنم
حالا اون چیه؟ 🤔
❗ عملیات transaction❗
بریم درموردش داخل جنگو توضیح بدیم
درجنگو قابلیت transaction برای…
👍9
#پست_جدید
💎 کلوژر (closure) در جاوااسکریپت 💎
امروز میخوایم در مورد یه مفهوم جذاب و البته کمی پیچیده به اسم کلوژر حرف بزنیم. نگران نباشید، قراره با مثالهای ساده و زبون خودمونی همه چی رو براتون روشن کنم.
کلوژر چیه؟❓
تصور کنید یه جعبه دارید که توش یه آبنبات و یه یادداشت هست. آبنبات رو میخورید، اما یادداشت همیشه با جعبه همراهه و هر وقت جعبه رو باز کنید، یادداشت رو میبینید. کلوژر هم همینجوریه!
در برنامهنویسی، کلوژر به تابعی گفته میشه که به متغیرهای محیط اطرافش دسترسی داره، حتی بعد از اینکه اون محیط از بین رفته باشه. انگار یه تابع، خاطرات محیطی که توش به دنیا اومده رو همیشه با خودش حمل میکنه.
مثال ساده:👇
در این مثال، تابع createCounter یه شمارنده میسازه. هر بار که این تابع رو صدا میزنیم، یه تابع جدید برمیگردونه که به متغیر count دسترسی داره. این متغیر حتی بعد از اینکه تابع createCounter اجرا شد، وجود داره و هر بار که تابع برگردونده شده رو صدا میزنیم، مقدار count یک واحد اضافه میشه.
چرا کلوژر مهمه؟❓
🏢 ساختارهای داده: کلوژر به ما کمک میکنه ساختارهای داده مثل private variables رو پیادهسازی کنیم.
✅ مدولار بودن: با استفاده از کلوژر میتونیم کدهایمون رو به بخشهای کوچکتر و مستقل تقسیم کنیم.
♻️ پیاده سازی Callback functions در کلوژر: کلوژر callback function ها خیلی کاربرد داره.
✏️ طراحی الگوهای مختلف: بسیاری از الگوهای طراحی جاوااسکریپت از کلوژر استفاده میکنند.
✅ خلاصه:
کلوژر یه مفهوم خیلی مهمه که به ما اجازه میده کدهای منعطفتر و قابل استفادهتر بنویسیم. با درک عمیق از کلوژر، میتونید به یک برنامهنویس جاوااسکریپت حرفهایتر تبدیل بشید.
امید وارم مفید بوده باشه :)
#جاوااسکریپت #کلوژر #برنامه_نویس
💎 کلوژر (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️⃣ کوکیهای دائمی: این کوکیها برای مدت طولانیتری روی دستگاهت باقی میمونن و به وبسایت کمک میکنن تا اطلاعات بیشتری در مورد وبگردی جمعآوری کنه.
✅ حرف آخر
کوکیها به طور کلی بدون ضرر هستن و برای بهبود تجربه کاربری استفاده میشن. اما بعضی وقتها ممکنه کوکیها برای ردیابی فعالیتهای آنلاینت استفاده بشن که این موضوع ممکنه نگرانیهایی رو در مورد حریم خصوصی ایجاد کنه.
امیدوارم این توضیحات برات مفید بوده باشه. اگر سوالی داشتی، حتما بپرس.
#کوکی #وبسایت #حریم_خصوصی #اینترنت
🍪 کوکی چیه؟
تصور کن هر بار که به یک وبسایت میری، اون وبسایت یه یادداشت کوچولو توی کامپیوتر یا موبایلت میذاره. این یادداشتها رو کوکی میگن. کوکیها فایلهای خیلی کوچیکی هستن که اطلاعات خیلی کم و سادهای رو ذخیره میکنن. مثلاً یادشون میمونه که تو چه اسم کاربری رو انتخاب کردی یا چه محصولاتی رو توی سبد خریدت گذاشتی.
❓کوکیها چیکار میکنن؟
✅ کوکیها به وبسایتها کمک میکنن تا:
1️⃣ تو رو بشناسن: وقتی دوباره به وبسایتی برمیگردی، کوکیها به وبسایت کمک میکنن تا بفهمه که تو قبلاً اونجا بودی و تنظیمات شخصیسازی شده تورو یادش بیاره.
2️⃣ تجربهی کاربری رو بهتر کنن: مثلاً وقتی یه محصول رو توی یک فروشگاه آنلاین میبینی و بعد به سایت دیگه ای میری، ممکنه تبلیغات همون محصول رو ببینی. این به خاطر کوکیهاست که اطلاعاتی از جستجوهای قبلی تو ذخیره شده.
3️⃣ وبسایت رو بهتر کنند: وبسایتها با استفاده از اطلاعاتی که از کوکیها به دست می آرند، میتونن وبسایتشون رو بهبود بدن و اون رو برای کاربران جذابتر کنن.
❓کوکیها چطور ساخته میشن؟
وقتی تو به یک وبسایت میری، سرور اون وبسایت (یعنی کامپیوتر بزرگی که وبسایت رو اجرا میکنه) یه کوکی رو میسازه و به مرورگرت میفرسته. مرورگرت هم اون کوکی رو توی کامپیوتر یا موبایلت ذخیره میکنه.
🍪 انواع کوکیها
کوکیها انواع مختلفی دارن که هر کدومشون کار خاصی انجام میدن. مثلاً:
1️⃣ کوکیهای session: این کوکیها فقط تا زمانی که تو در وبسایت هستی وجود دارن و وقتی از وبسایت خارج شدی، حذف میشن.
2️⃣ کوکیهای دائمی: این کوکیها برای مدت طولانیتری روی دستگاهت باقی میمونن و به وبسایت کمک میکنن تا اطلاعات بیشتری در مورد وبگردی جمعآوری کنه.
✅ حرف آخر
کوکیها به طور کلی بدون ضرر هستن و برای بهبود تجربه کاربری استفاده میشن. اما بعضی وقتها ممکنه کوکیها برای ردیابی فعالیتهای آنلاینت استفاده بشن که این موضوع ممکنه نگرانیهایی رو در مورد حریم خصوصی ایجاد کنه.
امیدوارم این توضیحات برات مفید بوده باشه. اگر سوالی داشتی، حتما بپرس.
#کوکی #وبسایت #حریم_خصوصی #اینترنت
👍11🔥2
#پست_جدید
💎 سیگنالها در جنگو 💎
امروز میخوایم در مورد یکی از ابزارهای جذاب و کاربردی جنگو به اسم سیگنالها (signals) صحبت کنیم.
سیگنالها مثل یه جور اعلان یا نوتیفیکیشن هستن که وقتی اتفاق خاصی توی پروژه شما میفته، ارسال میشن.
مثلا وقتی یه کاربر جدید ثبتنام میکنه، یه داده جدید اضافه میشه یا یه مدل حذف میشه، سیگنالی ارسال میشه.
سیگنالها چه شکلی هستن؟ ❓
✔ سیگنالها به چند دسته کلی تقسیم میشن:
1️⃣ سیگنالهای مدل: این سیگنالها به تغییرات در مدلهای شما مربوط میشن. مثلا وقتی یه رکورد جدید اضافه میشه، تغییر میکنه یا حذف میشه، سیگنالی ارسال میشه.
2️⃣ سیگنالهای مدیریت: این سیگنالها به عملیات مدیریت پایگاه داده مربوط میشن. مثلا وقتی شما دستور migrate رو اجرا میکنید، سیگنالی ارسال میشه.
3️⃣ سیگنالهای درخواست/پاسخ: این سیگنالها به درخواستها و پاسخهای HTTP مربوط میشن. مثلا وقتی یه درخواست به سرور شما ارسال میشه یا پاسخ داده میشه، سیگنالی ارسال میشه.
4️⃣ سیگنالهای تست: این سیگنالها به اجرای تستهای شما مربوط میشن.
5️⃣ سیگنالهای دیتابیس: این سیگنالها به اتصال به دیتابیس مربوط میشن.
6️⃣ سیگنالهای اپ احراز هویت: این سیگنالها به عملیات مربوط به احراز هویت کاربران مربوط میشن.
🔬 مثالهای عملی از سیگنالها:
1️⃣ مثال 1: ارسال ایمیل خوشامدگویی پس از ثبتنام کاربر
در این مثال، هر وقت یک کاربر جدید ثبتنام میشه، سیگنال post_save برای مدل User ارسال میشه و تابع send_welcome_email اجرا میشه و یک ایمیل خوشامدگویی برای کاربر جدید ارسال میشود.
2️⃣ مثال 2: ایجاد پروفایل کاربری به صورت خودکار
در این مثال، هر وقت یک کاربر جدید ثبتنام میشود، به طور خودکار یک پروفایل برای او ایجاد میشود.
3️⃣ مثال 3: بروزرسانی یک فیلد پس از تغییر فیلد دیگر
در این مثال، هر وقت فیلد is_active یک مدل تغییر کرد، فیلد last_activity هم به روز میشه.
✔ مزایای استفاده از سیگنالها:
♻ کاهش کد تکراری: با استفاده از سیگنالها، نیازی نیست کدهای تکراری رو در جاهای مختلف پروژه بنویسید.
📄 افزایش خوانایی کد: استفاده از سیگنالها باعث میشه کد شما تمیزتر و خواناتر بشه.
🔺سهولت در توسعه: سیگنالها به شما کمک میکنن تا برنامههای پیچیدهتری رو توسعه بدید.
⚠ معایب استفاده از سیگنالها:
😖 پیچیدگی: استفاده نادرست از سیگنالها میتونه باعث پیچیدگی بیش از حد کد بشه.
🔋 کاهش سرعت: در بعضی موارد، استفاده از سیگنالها میتونه سرعت اجرای برنامه رو کاهش بده.
⭕ نکات مهم:
از سیگنالها با احتیاط استفاده کنید و از ایجاد حلقههای بینهایت خودداری کنید.
سیگنالها رو برای کارهای ساده و تکراری استفاده کنید.
برای کارهای پیچیده بهتره از ابزارهای دیگری مثل Celery استفاده کنید.
✔ جمعبندی
سیگنالها یک ابزار قدرتمند در جنگو هستن که به شما کمک میکنن تا برنامههای خودکارسازی شده و پیچیدهتری رو توسعه بدید. با استفاده صحیح از سیگنالها میتونید کدهای تمیزتر، خواناتر و قابل نگهداریتری بنویسید.
#سیگنال #signals #django #backend
💎 سیگنالها در جنگو 💎
امروز میخوایم در مورد یکی از ابزارهای جذاب و کاربردی جنگو به اسم سیگنالها (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
👍10❤3🥴1
دوستان از محتوای کانال خوشتون میاد؟🤔 اگه نه ممنون میشم توی کامنتا بگید تا بهترشون کنیم❤️
Anonymous Poll
81%
بله عالین 😀
14%
نه جالب نیستن 🥱
5%
مزخرفن 😒
❤1
Forwarded from چنل پایتون | جنگو | برنامه نویسی وب سایت (♧ 𝓪ⓂƗℝ ♛)
🚀 آموزش ساخت یک IDE ساده با پایتون و Tkinter
در این آموزش، نحوه ساخت یک محیط توسعه یکپارچه (IDE) ساده با استفاده از پایتون و کتابخانه Tkinter را به شما نشان خواهیم داد. این IDE به شما امکان میدهد تا کدهای پایتون خود را نوشته، ذخیره و اجرا کنید. برای شروع، از ابزارهای پایهای استفاده خواهیم کرد، اما شما میتوانید با افزودن قابلیتهای بیشتر، IDE خود را پیشرفتهتر کنید.
🛠 نصب Tkinter
Tkinter معمولاً با پایتون به صورت پیشفرض نصب میشود. اما اگر آن را ندارید، میتوانید از دستور زیر برای نصب آن استفاده کنید:
pip install tk
📋 مراحل ساخت IDE
1. ایجاد پنجره اصلی IDE
2. افزودن ویجتهای متن برای نوشتن کد
3. افزودن منوها برای باز کردن، ذخیره و اجرای فایلها
4. اضافه کردن قابلیت اجرای کد پایتون
1. ایجاد پنجره اصلی IDE
ابتدا یک پنجره اصلی ایجاد میکنیم:
برای نوشتن کد، یک ویجت Text اضافه میکنیم:
یک منو برای باز کردن، ذخیره و اجرای فایلها اضافه میکنیم:
برای اجرای کد پایتون، از توابع داخلی پایتون استفاده میکنیم:
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)
در این آموزش، نحوه ساخت یک محیط توسعه یکپارچه (IDE) ساده با استفاده از پایتون و کتابخانه Tkinter را به شما نشان خواهیم داد. این IDE به شما امکان میدهد تا کدهای پایتون خود را نوشته، ذخیره و اجرا کنید. برای شروع، از ابزارهای پایهای استفاده خواهیم کرد، اما شما میتوانید با افزودن قابلیتهای بیشتر، IDE خود را پیشرفتهتر کنید.
🛠 نصب Tkinter
Tkinter معمولاً با پایتون به صورت پیشفرض نصب میشود. اما اگر آن را ندارید، میتوانید از دستور زیر برای نصب آن استفاده کنید:
pip install tk
📋 مراحل ساخت IDE
1. ایجاد پنجره اصلی IDE
2. افزودن ویجتهای متن برای نوشتن کد
3. افزودن منوها برای باز کردن، ذخیره و اجرای فایلها
4. اضافه کردن قابلیت اجرای کد پایتون
1. ایجاد پنجره اصلی IDE
ابتدا یک پنجره اصلی ایجاد میکنیم:
import tkinter as tk2. افزودن ویجتهای متن برای نوشتن کد
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()
برای نوشتن کد، یک ویجت Text اضافه میکنیم:
def add_text_widget(window):3. افزودن منوها برای باز کردن، ذخیره و اجرای فایلها
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()
یک منو برای باز کردن، ذخیره و اجرای فایلها اضافه میکنیم:
def add_menu(window, text_widget):4. اضافه کردن قابلیت اجرای کد پایتون
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()
برای اجرای کد پایتون، از توابع داخلی پایتون استفاده میکنیم:
`
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
دوستان این لینک گروهه میتونید توش جوین شید و چت بکنید و سوالاتونو بپرسید یا ... هرکار دیگه ای
دوستان این لینک گروهه میتونید توش جوین شید و چت بکنید و سوالاتونو بپرسید یا ... هرکار دیگه ای
Telegram
Programmers City 🌆
گروه نینجا لرن🥷
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
👍2
Ninja Learn | نینجا لرن pinned «https://t.iss.one/+td1EcO_YfSphNTlk دوستان این لینک گروهه میتونید توش جوین شید و چت بکنید و سوالاتونو بپرسید یا ... هرکار دیگه ای»
سلام رفقا 👋
پایه اید فردا پرسش و پاسخ تو اینستا بذاریم و سوالاتونو جواب بدیم؟
پایه اید فردا پرسش و پاسخ تو اینستا بذاریم و سوالاتونو جواب بدیم؟
Final Results
58%
آره بذار
42%
نذار، سوالی ندارم
❤1
💎 کالبک ها در جاوا اسکریپت 💎
امروز میخوایم یکی از مفهوم های خیلی مهم و کاربردی در جاوا اسکریپت رو با هم بررسی کنیم: کالبک ها (callbacks).
شاید اولش یه کم پیچیده به نظر برسه، اما نگران نباشید! با مثال های ساده و کاربردی، این مفهوم رو براتون خیلی روشن میکنم.
کالبک چیه؟ ❓
کالبک در واقع یه تابعه که به عنوان آرگومان به تابع دیگه ای پاس داده میشه. یعنی یه تابع رو میگیریم و به جای اینکه خودمون مستقیماً اونو اجرا کنیم، به تابع دیگه ای میدیم تا در زمان مناسب خودش اونو صدا بزنه.
چرا به کالبک نیاز داریم؟ ❓
فرض کن میخوای یه عملیات خاصی رو انجام بدی، اما میخوای بعد از اینکه این عملیات تموم شد، یه کار دیگه ای هم انجام بشه. اینجا دیگه کالبک ها به دادمون میرسن.
با استفاده از کالبک ها میتونیم بگیم که بعد از اینکه عملیات اول تموم شد، کدهایی که داخل کالبک نوشته شده، اجرا بشه.
مثال ساده:
در این مثال:
تابع greet دو آرگومان میگیره: یک نام و یک کالبک.
بعد از چاپ سلام، تابع callback رو صدا میزنه که در این مثال sayGoodbye هست.
پس خروجی این کد میشه:
✅ مثال کاربردی تر:
در این مثال: ⬇️
1⃣ تابع fetchData داده رو از یک آدرس اینترنتی دریافت میکنه.
2⃣ بعد از دریافت داده، تابع callback رو با داده دریافت شده صدا میزنه.
3⃣ و displayData به عنوان کالبک استفاده شده و داده رو در کنسول چاپ میکنه.
👀 کاربردهای کالبک ها:
⏱ تابع های ناهمزمان: برای مدیریت عملیات هایی که زمان بر هستند مثل درخواست های HTTP، تایمرها و ...
📅 رویدادها(Events): در رویدادهایی مثل کلیک کردن روی یک دکمه، بارگذاری یک صفحه و ...
🗂 کتابخانه ها و فریمورک ها: خیلی از کتابخانه ها و فریمورک های جاوا اسکریپت از کالبک ها استفاده میکنن.
✅ جمع بندی:
کالبک ها یه ابزار قدرتمند در جاوا اسکریپت هستن که بهتون اجازه میدن کدهایتون رو به صورت ناهمزمان و رویداد محور بنویسید. با تمرین و ممارست، میتونید به راحتی از کالبک ها در پروژه های خودتون استفاده کنید.
#javascript #callback #programing
امروز میخوایم یکی از مفهوم های خیلی مهم و کاربردی در جاوا اسکریپت رو با هم بررسی کنیم: کالبک ها (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==
همونطوری که دیشب گفتم، توی اینستا کوئسشن باکس گذاشتیم
بیاید سوالاتونو بپرسید همه رو جواب میدیم 🌹
https://www.instagram.com/stories/ninjalearn.ir/3425693636133198315?igsh=MXd0M3ZqcXg5ZG4zZA==
❤2