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
دوستان هرنوع پستی که میخواید رو توی کامنت بگید که بزاریم 👇
👍2
Channel photo updated
سلام رفقا 👋 لوگو جدید چطوره؟
Final Results
82%
عالیه
8%
خوب نیست
11%
قبلی بهتر بود
1
💎بست پرکتیس برای طراحی مدل های DB 💎

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

چرا بست پرکتیس ها مهمه؟

1️⃣ کاهش خطا: با رعایت این قواعد، احتمال اینکه توی طراحی دیتابیس اشتباه کنیم خیلی کمتر میشه.

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

3️⃣ کاهش هزینه: یه دیتابیس خوب، هزینه‌های نگهداری رو کم میکنه.

4️⃣ افزایش انعطاف‌پذیری: دیتابیسی که به خوبی طراحی شده، راحت‌تر میشه تغییرات رو توی اون اعمال کرد.

حالا بیا ببینیم این بست پرکتیس ها چی هستن:

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

🧪 مثال: فرض کن یه دیتابیس برای فروشگاه آنلاین داریم. اگه اطلاعات مشتری‌ها رو به این شکل ذخیره کنیم که در هر سبد خرید، آدرس و شماره تلفن مشتری تکرار بشه، این یک طراحی بد محسوب میشه. چرا؟ چون اگه مشتری آدرسش رو تغییر بده، باید در همه سبد خریدهاش این تغییر رو اعمال کنیم که هم وقت‌گیره و هم احتمال خطا رو زیاد می‌کنه.

راه حل: بهتره اطلاعات مشتری رو در یک جدول جداگانه ذخیره کنیم و در جدول سبد خرید فقط به اون جدول ارجاع بدیم. با این کار، اگه آدرس مشتری تغییر کنه، فقط در یک جا باید اون رو ویرایش کنیم.

2️⃣ کلیدهای اصلی و خارجی: پل ارتباطی بین جداول
🔑 کلید اصلی (primary key): یک یا چند ستون در یک جدول هست که به طور منحصر به فرد هر رکورد رو شناسایی می‌کنه. مثلاً در جدول مشتری‌ها، ستون "کد مشتری" می‌تونه کلید اصلی باشه.

🗝 کلید خارجی (foreign key): ستونی در یک جدول هست که به کلید اصلی جدول دیگه ارجاع می‌ده. مثلاً در جدول سبد خرید، ستون "کد مشتری" (که به جدول مشتری‌ها ارجاع می‌ده) کلید خارجی محسوب میشه.

🧪 مثال: در مثال فروشگاه آنلاین، ستون "کد محصول" در جدول سبد خرید، کلید خارجی هست که به جدول محصولات ارجاع می‌ده. اینطوری می‌تونیم بفهمیم چه محصولاتی در هر سبد خرید وجود داره.

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

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

4️⃣ طراحی جداول با دقت: هر جدول یک وظیفه
هر جدول باید یک وظیفه مشخص داشته باشه و داده‌های مرتبط با اون وظیفه رو در خودش ذخیره کنه. این کار باعث میشه دیتابیس ما منظم‌تر و قابل فهم‌تر باشه.

🧪 مثال بد: داشتن جدولی به نام "اطلاعات_کاربران" که هم اطلاعات شخصی کاربران، هم تاریخچه خریدهاشون و هم تنظیمات حساب کاربریشون رو ذخیره می‌کنه، یک طراحی بد محسوب میشه.

راه حل: بهتره اطلاعات شخصی کاربران رو در یک جدول، تاریخچه خریدها رو در جدول دیگه و تنظیمات حساب کاربری رو در جدول سومی ذخیره کنیم.

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

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

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

🧪 مثال: استفاده از دستور JOIN به جای زیرکوئری‌های متعدد، معمولاً باعث نوشتن کوئری‌های بهینه‌تری میشه.


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

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

موفق و پیروز باشید!


#دیتابیس #طراحی_دیتابیس #بست_پرکتیس #برنامه_نویسی
9🔥2👍1🥴1
سلام رفقا 👋

خوشحالیم که از لوگو جدید خوشتون اومده حالا با وبسایت هایی که تم دارک دارن بیشتر حال میکنید یا تم لایت؟ داریم وبسایت نینجا لرن رو طراحی میکنیم، میخوایم نظرتونو بدونیم
Anonymous Poll
84%
تم دارک
16%
تم لایت
👍21
💎 لاگینگ (logging) در جنگو 💎

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

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

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


چرا لاگینگ توی جنگو مهمه؟ 🤔

1⃣ دیباگ کردن: وقتی برنامه‌مون با خطا مواجه میشه، لاگ ها بهمون کمک میکنن تا بفهمیم دقیقا کجا و چرا این خطا رخ داده.

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

3⃣ امنیت: لاگ ها میتونن بهمون کمک کنن تا حملات امنیتی رو شناسایی کنیم و ازشون جلوگیری کنیم.




چطوری لاگینگ رو توی جنگو تنظیم کنیم؟

1⃣ وارد شدن به settings.py: اول از همه باید به فایل settings.py پروژه خودمون بریم. این فایل جاییه که همه تنظیمات کلی پروژهمون رو انجام میدیم.

2⃣ تنظیم متغیر LOGGING: توی این فایل یه متغیر به اسم LOGGING وجود داره که یه دیکشنری هست. ما باید این دیکشنری رو به شکلی که میخوایم تنظیم کنیم. مثلا برای اینکه لاگ هامون رو توی یه فایل به اسم mysite.log ذخیره کنیم، میتونیم این کد رو به settings.py اضافه کنیم:

LOGGING = { 
'version': 1,

'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',

'filename': 'mysite.log',
},
},
'loggers': {
'django': { 'handlers': ['file'], 'level': 'INFO',
},
},
}


🧐 درک تنظیمات:

version:
نسخه لاگر

disable_existing_loggers:
اگر True باشه، لاگرهای پیش فرض جنگو غیرفعال میشن.

handlers:
اینجا تعریف میکنیم که لاگ هامون رو کجا ذخیره کنیم. مثلا توی فایل، کنسول، یا یه دیتابیس.

loggers:
اینجا مشخص میکنیم که چه ماژول هایی لاگ تولید کنن و سطح لاگشون چی باشه.


🧪 پیاده سازی لاگینگ توی کد: برای استفاده از لاگینگ توی کدهامون، از ماژول logging پایتون استفاده میکنیم. مثلا:

import logging 

logger = logging.getLogger(__name__)

def my_function():
logger.info(
"This is an info message"
)
logger.error(
"This is an error message"
)


📊 سطح های مختلف لاگ:

🟣 DEBUG:
برای اطلاعات خیلی جزئی

🔵 INFO:
برای اطلاعات عمومی

🟠 WARNING:
برای هشدارها

🔴 ERROR:
برای خطاها

CRITICAL:
برای خطاهای خیلی جدی


⭕️ نکات مهم:
سطح لاگ رو با توجه به محیطتون تنظیم کنید: مثلا توی محیط توسعه سطح لاگ رو روی DEBUG بذارید تا همه چیز رو ببینید، اما توی محیط پروداکت سطح لاگ رو روی INFO یا بالاتر بذارید.

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

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

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


#جنگو #لاگینگ #توسعه_وب #پایتون
👍96🔥2
دوستان چه حسی نسبت به اسم "نینجا لرن" دارید؟
Final Results
67%
عالیه، باهاش حال میکنم
33%
ضایس، دوست ندارم
2
Ninja Learn | نینجا لرن
دوستان چه حسی نسبت به اسم "نینجا لرن" دارید؟
لطفا همگی نظر خودشونو اعلام کنن 🌹
2
پست فردا درمورد چی باشه دوستان؟ 🧐
3
💎 وب سرور gunicorn 💎

امروز میخوایم با همدیگه یکی از بهترین ابزارها برای ساخت وب‌سرورهای پایتون رو بشناسیم. اسمش Gunicorn هست!

حالا Gunicorn چیه و چه کار میکنه؟
ابزار Gunicorn یه وب‌سرور WSGI هست که به زبان پایتون نوشته شده.
یعنی چی؟ یعنی این که میتونه درخواست‌های HTTP رو بگیره و به برنامه وب شما برسونه. به زبان ساده‌تر، Gunicorn مثل یه پیشخدمت بین مشتری (کاربر) و آشپز (برنامه شما) عمل می‌کنه. ‍

چرا Gunicorn اینقدر خوبه؟
1⃣ ساده و سریع: Gunicorn خیلی ساده و سبک هست و به همین خاطر خیلی سریع کار میکنه. ⚡️

2⃣ انعطاف‌پذیر: میشه Gunicorn رو با خیلی از فریمورک‌های پایتون مثل Django و Flask استفاده کرد. ️

3⃣ قابل اعتماد: Gunicorn خیلی پایداره و کم پیش میاد که خراب بشه.

4⃣ چندین کاربر همزمان: Gunicorn میتونه همزمان درخواست‌های چندین کاربر رو پردازش کنه.

چه موقع از Gunicorn استفاده کنیم؟
وقتی میخوای یک وب‌سرور پایتون بسازی.
وقتی میخوای وب‌سرورت خیلی سریع و کارآمد باشه.
وقتی میخوای وب‌سرورت بتونه تعداد زیادی درخواست رو همزمان پردازش کنه.

چطوری از Gunicorn استفاده کنیم؟
فرض کن یک برنامه وب با Flask داریم که اسمش app.py هست. برای اجرا کردن این برنامه با Gunicorn، کافیه این دستور رو در ترمینال وارد کنیم:

gunicorn app:app --workers 4 --bind 0.0.0.0:8000 

1⃣ app:app:
این قسمت مشخص میکنه که برنامه ما کجاست و نقطه ورودش کجاست.

2⃣  --workers 4:
این گزینه مشخص میکنه که چند تا فرآیند برای پردازش درخواست‌ها ایجاد بشه.

3⃣ --bind 0.0.0.0:8000:
این گزینه مشخص میکنه که Gunicorn روی چه آدرسی و پورت گوش بده.

مزایای استفاده از Gunicorn:
1⃣ عملکرد بالا: Gunicorn یکی از سریع‌ترین وب‌سرورهای پایتون هست.

2⃣ سادگی: استفاده از Gunicorn خیلی ساده است.

3⃣ انعطاف‌پذیری: میشه Gunicorn رو با خیلی از فریمورک‌ها و ابزارهای دیگه استفاده کرد.

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

2⃣ نیاز به کانفیگ: برای تنظیمات پیچیده، نیاز به کانفیگ کردن Gunicorn داریم.

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

#Gunicorn #Python #WebServer #Programming #Developer #Flask #Django #WebDevelopment
🔥32👍3👏1
بیشتر دوستانی که پستارو میبینند
متاسفانه نه ریکشن میزنن و نه جوین میشن لطفا جوین کانال بشید و با ریکشن زدن حمایت کنید از ما ❤️😊
18👍3🔥3👏2
بچه ها توی گروه حتما جوین بشید میتونید هر سوالی که دارید اونجا بپرسید یا توی بحثای جذاب شرکت کنید 🫵

لینک گروه 👀
https://t.iss.one/+td1EcO_YfSphNTlk
2🔥2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
ساخت دکمه ۳ بعدی با css 😃

#FrontEnd #css #html #فرانت
👍5🥰1
Ninja Learn | نینجا لرن
ساخت دکمه ۳ بعدی با css 😃 #FrontEnd #css #html #فرانت
بچه ها نظرتون راجب کیفیت این پست واسه اینستا چیه؟

⭕️ لطفا دقت کنید که کیفیت پست رو میگم نه محتواش
Final Results
67%
خوبه
11%
بد نیست
17%
جا داره بهتر بشه
6%
کیفیتش پایینه
🔥52
#javascript #introducing_website


●● وبسایت javscript.info چیست؟ ●●

اگر با زبان برنامه نویسی JavaScript کار میکنید احتمالا اسم این سایت رو زیاد شنیده باشید. javscript.info یک منبع آنلاینِ رایگان، جامع و تعاملی برای یادگیری زبان برنامه‌نویسی جاوااسکریپت است. این وب‌سایت به شما کمک می‌کند تا مفاهیم جاوااسکریپت را به صورت ساده و روان یاد بگیرید.

ویژگی‌های کلیدی این وب‌سایت‌ 🚀

محتوای باکیفیت: مطالب این وب‌سایت به‌روز هستند و با استانداردهای جدید جاوااسکریپت مطابقت دارند. 💯

زبان ساده: مفاهیم به زبانی ساده و قابل فهم توضیح داده شده‌اند تا برای مبتدیان و افراد با تجربه مناسب باشد.

تعاملی بودن: می‌توانید مستقیماً در مرورگر خود کد بنویسید و نتیجه را ببینید تا درک بهتری از مفاهیم پیدا کنید.

چندزبانه بودن: این وب‌سایت به زبان‌های مختلف از جمله فارسی ترجمه شده است. ( مشاهده ترجمه فارسی وبسایت ) 🌐

چه کسانی می‌توانند از این وب‌سایت استفاده کنند ؟ 🤔

مبتدیان: اگر هیچ تجربه قبلی در برنامه‌نویسی ندارید، این وب‌سایت می‌تواند شروع خوبی برای شما باشد.

برنامه‌نویسان با تجربه: اگر قبلاً با جاوااسکریپت کار کرده‌اید، می‌توانید از این وب‌سایت برای یادگیری مفاهیم پیشرفته‌تر یا مرور مفاهیم قبلی استفاده کنید.
💢 برای عمیق شدن توی زبان جاوااسکریپت هم میتونه بسیار کمک کننده باشه.


در کل javscript.info یک منبع ارزشمند برای هر کسی است که می‌خواهد جاوااسکریپت یاد بگیرد.

Channel | YouTube | Instagram
👍42👏2
Ninja Learn | نینجا لرن pinned «دوستان اقا محمد حسین توی بحث فرانت فعالیت میکنه و کیفیت پستاش واقعا خوبه اگه دوست داشتید میتونید جوین بشید و از محتواشون استفاده کنید👌»
💎 ادامه gunicorn بخش ۲ 💎

حالا که توی پست قبلی با Gunicorn آشنا شدیم، بریم سراغ جزئیات بیشتر و تخصصی‌ترش. تو این بخش می‌خوایم Gunicorn رو از زیر و رو بررسی کنیم و ببینیم که چه قابلیت‌های پنهانی داره.

🅰 مدل کاری Gunicorn: پری فورک (Pre-fork)
باید بدونید Gunicorn از مدل پری فورک استفاده می‌کنه. یعنی وقتی که Gunicorn اجرا میشه، چندین فرآیند فرزند ایجاد می‌کنه. هر کدوم از این فرآیندها می‌تونن درخواست‌های HTTP رو به صورت مستقل پردازش کنن.
این مدل باعث میشه که Gunicorn بتونه همزمان درخواست‌های زیادی رو مدیریت کنه و عملکرد خیلی خوبی داشته باشه.

تنظیمات کلیدی Gunicorn
باید بدونید Gunicorn گزینه‌های تنظیمات زیادی داره که به شما اجازه میدن تا رفتار سرور رو به دلخواه خودتون تغییر بدید. چند تا

از مهم‌ترین این گزینه‌ها عبارتند از:
1⃣ workers:
تعداد ورکرها.

🔴 ورکر چیه؟ فکر کن یه کافه خیلی شلوغ رو تصور کن. مشتریا دارن پشت سر هم سفارش میدن و یه نفر دیگه هم داره این سفارش‌ها رو آماده می‌کنه. اون کسی که سفارش‌ها رو آماده می‌کنه، یه جوریه مثل یه ورکره!
2⃣ bind:
آدرس و پورت برای اتصال.

3⃣ timeout:
حداکثر زمانی که یک درخواست می‌تونه طول بکشه.

4⃣ daemon:
اجرا کردن Gunicorn به عنوان یک دِمون.

🔴 دیمن (Daemon) چیه؟: یه برنامه کامپیوتریه که تو پس‌زمینه سیستم اجرا میشه و منتظر اتفاق خاصی هست تا کارش رو شروع کنه. فکر کن یه نگهبان شب که بیدار میمونه و منتظره اتفاقی بیفته.
5⃣ accesslog:
مسیر فایل لاگ دسترسی.


6⃣ errorlog:
مسیر فایل لاگ خطا.

🧪 مثال یک تنظیمات کامل:
gunicorn 
app:app \
--workers 3\
--bind unix:/tmp/gunicorn.sock \
--timeout 300 \
--daemon \
--accesslog - \
--errorlog -

در این مثال، Gunicorn با 3 فرآیند ورکر اجرا میشه، به یک سوکت یونیکس متصل میشه، تایم اوت 5 دقیقه‌ای داره و خروجی‌های لاگ به خروجی استاندارد و خطای استاندارد هدایت میشه.

🖇 استفاده از Gunicorn با Nginx
برای بهبود عملکرد و امنیت، معمولاً Gunicorn رو پشت یک پروکسی معکوس مثل Nginx قرار می‌دیم. Nginx می‌تونه درخواست‌های HTTP رو دریافت کنه، آنها رو به Gunicorn پروکسی کنه و همچنین ویژگی‌هایی مثل کش کردن، بارگذاری تعادلی و SSL رو فراهم کنه.

🔩 اپشن های پیشرفته
باید بدونید Gunicorn گزینه‌های پیشرفته زیادی داره که به شما اجازه میدن تا رفتار سرور رو به طور دقیق تنظیم کنید. مثلاً می‌تونید:

1⃣ ورکر های مختلف: از ورکر های مختلفی مثل sync، eventlet، gevent و ... استفاده کنید.

2⃣ حالت توسعه: Gunicorn رو در حالت توسعه اجرا کنید تا بتونید تغییرات کد رو بدون نیاز به ریستارت کردن سرور ببینید.

3⃣ کانفیگ با فایل: تنظیمات Gunicorn رو در یک فایل قرار بدید.

✳️ مشکلات رایج و راه حل‌ها

😵 خطاهای 502: معمولاً به دلیل ترافیک زیاد یا مشکل در برنامه رخ میده.

😪 خاموش شدن ناگهانی سرور: ممکنه به دلیل مشکلات حافظه یا خطاهای برنامه رخ دهد.

😵‍💫 مشکلات در تنظیمات: بررسی کنید که تنظیمات Gunicorn و Nginx به درستی تنظیم شده باشه.


#Gunicorn #Python #WebServer #Programming #Developer #Flask #Django #WebDevelopment
20