Ninja Learn | نینجا لرن
1.27K subscribers
96 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
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 هست در حال ضبطه و به زودی منتشر میشه 🙂
دوره دوم مون "امنیت توی برنامه نویسی وب" هست که کلا به صورت تئوریه و توش مباحث امنیتی قراره گفته بشه. حالا سوال من اینه که دوره همون امنیت باشه یا اینکه یه دوره دیگه میخواید؟
»
💎 مفهوم XFF یا همون X-Forward-For 💎

امروز میخوایم در مورد یه هدر (Header) جالبی به اسم X-Forwarded-For حرف بزنیم. شاید اولش یه کم پیچیده به نظر بیاد، ولی نگران نباشید! میخوام براتون توضیح بدم که این چیز عجیب و غریبی نیست 😁

حالا X-Forwarded-For چیه؟
تصور کنید شما یه نامه رو از تهران به شیراز پست میکنید. روی پاکت نامه آدرس فرستنده و گیرنده نوشته شده. حالا فرض کنید این نامه توی مسیرش از چندین پستخانه عبور کنه. هر پستخانه ای که نامه رو دست بگیره، یه برچسب کوچولو روش میچسبونه و آدرس پستخانه خودش رو هم روش مینویسه. این برچسب ها مثل یه ردیاب هستن که نشون میدن نامه از کجا اومده و به کجا رفته.

خب X-Forwarded-For هم دقیقا همین کارو برای درخواست‌های اینترنتی انجام میده.
وقتی شما یه صفحه وب رو باز میکنید، کامپیوتر شما یه درخواست به سرور اون سایت ارسال میکنه. این درخواست حاوی اطلاعات مختلفی مثل آدرس IP شماست.

ادرس IP چیست؟
آدرس IP مثل یه شماره شناسایی منحصر به فرد برای هر دستگاهی هست که به اینترنت متصله.

حالا فرض کنید این درخواست از چندین سرور عبور کنه.
هر سروری که درخواست رو دریافت کنه، آدرس IP خودش رو به همراه آدرس IP قبلی در یه هدر به اسم X-Forwarded-For ذخیره میکنه. اینجوری میشه فهمید که درخواست از کجا اومده و چه مسیری رو طی کرده.

چرا X-Forwarded-For مهمه؟

🛡 امنیت: با استفاده از این هدر میشه به آسانی حملات هکرها رو ردیابی کرد. اگه یه هکر بخواد با استفاده از آدرس IP جعلی به یه سایت حمله کنه، با بررسی هدر X-Forwarded-For میشه آدرس IP واقعی اون رو پیدا کرد.

تعادل بار سرور(load balancing): سایت‌هایی که ترافیک بالایی دارن، از چندین سرور برای پاسخگویی به درخواست‌ها استفاده میکنن. با بررسی این هدر میشه فهمید که هر درخواست از کدوم سرور پاسخ گرفته و اینجوری میشه بار کاری سرورها رو به صورت بهینه توزیع کرد.

🗺 جغرافیایی: با بررسی آدرس‌های IP موجود در این هدر میشه فهمید که کاربران از کجا به سایت شما وصل میشن. این اطلاعات برای تحلیل رفتار کاربران و شخصی‌سازی محتوا خیلی مفیده.

خلاصه کلام:

هدر X-Forwarded-For یه ابزار قدرتمند برای تحلیل ترافیک شبکه و افزایش امنیت سایت‌هاست. با استفاده از این هدر میشه به اطلاعات ارزشمندی درباره مسیر درخواست‌ها، آدرس IP کاربران و نوع دستگاه‌هایشون دست پیدا کرد.

#web #xff
👍7👎1🔥1
💎 گواهی نامه SSL یا همون Secure Sockets layer) 💎

امروز میخوایم در مورد یه موضوع خیلی مهم و کاربردی تو دنیای وب حرف بزنیم

🪪 گواهینامه SSL

🤔 حالا SSL چیه و چرا اینقدر مهمه؟

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

📚 گواهینامه SSL از چه بخش‌هایی تشکیل شده؟

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

🗝 کلید خصوصی: این کلید همون کلید اصلی هست که فقط سرور سایت داره. این کلید برای رمزگشایی اطلاعاتی که با کلید عمومی رمزگذاری شده، استفاده میشه.

📑 اطلاعات مربوط به سایت: این بخش شامل اطلاعاتی مثل آدرس سایت، نام شرکت و تاریخ انقضای گواهینامه میشه.

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

👮‍♂ حالا SSL از چه حملاتی جلوگیری می‌کنه؟ ️

یکی از مهم‌ترین حملاتی که SSL ازش جلوگیری می‌کنه،

🕴حمله Man-in-the-Middle هست. تو این حمله، هکرها خودشون رو بین شما و سایت قرار میدن و اطلاعاتتون رو دزدکی می‌بینن . اما با وجود SSL، این کار برای هکرها خیلی سخته، چون اطلاعات شما به صورت رمزگذاری شده رد و بدل میشه.

چرا SSL مهمه؟

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

🤝 اعتمادسازی: وقتی یه سایت گواهینامه SSL داره، کاربران به اون سایت اعتماد بیشتری می‌کنن. چون می‌دونن که اطلاعاتشون امن هست.

👀 سئو: موتورهای جستجو مثل گوگل به سایت‌های امن امتیاز بیشتری میدن. پس داشتن SSL میتونه به بهبود رتبه سایتتون کمک کنه.

⭕️ پس یادتون باشه:
هر وقت خواستید اطلاعات حساسی رو تو یه سایت وارد کنید، حتما مطمئن بشید که اون سایت گواهینامه SSL داره.

وجود آدرس HTTPS:// در ابتدای آدرس سایت نشونه وجود گواهینامه SSL هست.

نماد قفل سبز رنگ کنار آدرس سایت هم نشونه دیگه ای از وجود SSL هست.

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

#SSL #امنیت_اطلاعات #وبسایت #امنیت_اینترنتی #رمزنگاری
👍81
💎 سایت مپ (sitemaps) درجنگو 💎

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

حالا Django sitemaps چیه؟
خب، فرض کنین سایتتون یه باغچه بزرگه. هر صفحه سایتتون هم یه گل قشنگ تو این باغچه. حالا Django sitemaps مثل یه نقشه کامل از این باغچه‌ست که به موتورهای جستجو میگه هر گل کجا قرار داره و چه ویژگی‌هایی داره. ️
این نقشه به موتورهای جستجو کمک میکنه تا راحت‌تر توی سایت شما گشت بزنن و صفحات مهم رو سریع‌تر پیدا کنن. اینجوری هم کاربران زودتر به اطلاعات دلخواهشون میرسن و هم سایتتون رتبه بهتری تو نتایج جستجو میگیره.

چرا از Django sitemaps استفاده کنیم؟

1⃣ بهبود سئو: با ایجاد یک sitemap کامل، موتورهای جستجو راحت‌تر صفحات سایتتون رو ایندکس میکنن و در نتیجه سایتتون توی نتایج جستجو بالاتر میاد.

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

3⃣ مدیریت بهتر صفحات: با استفاده از sitemaps میشه به راحتی صفحات سایت رو مدیریت کرد و صفحات اضافی یا قدیمی رو حذف کرد.

چطور Django sitemaps رو پیاده‌سازی کنیم؟ ️

1⃣ نصب پکیج: اول از همه باید پکیج django-sitemaps رو نصب کنیم. برای این کار کافیه تو ترمینال پروژهتون این دستور رو

بزنید:

pip install django-sitemaps 



2⃣ اضافه کردن به INSTALLED_APPS: بعد از نصب پکیج، باید اون رو به لیست اپلیکیشن‌های پروژه اضافه کنیم. تو فایل settings.py پروژهتون، 'django_sitemaps' رو به لیست INSTALLED_APPS اضافه کنید.

3⃣ ایجاد کلاس Sitemap: حالا باید یه کلاس از کلاس Sitemap که توی پکیج django_sitemaps تعریف شده، ایجاد کنیم. تو این کلاس، مشخص میکنیم کدوم مدل‌ها رو میخوایم توی sitemapمون قرار بدیم و چه فیلدهایی رو برای هر مدل میخوایم ایندکس کنیم.

from django.contrib.sitemaps import Sitemap
from .models import Post

class PostSitemap(Sitemap):

     changefreq = "weekly"
     priority   = 0.9

      def items(self):
           return Post.objects.all()

      def lastmod(self, obj):
           return obj.publish_date

      def location(self, item):
           return
reverse('home:post-detail',kwargs={'    slug':item.slug})
   

 
4⃣ ایجاد URL برای Sitemap: در نهایت باید یه URL برای دسترسی به sitemap ایجاد کنیم. این کار رو توی فایل urls.py پروژه انجام میدیم.

from django.contrib.sitemaps.views import sitemap from django.urls import path 
from .sitemaps import PostSitemap

sitemaps = {'posts': PostSitemap}

urlpatterns = [path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap')]

5⃣ ارسال Sitemap به موتورهای جستجو: بعد از ایجاد sitemap، آدرس اون رو به کنسول جستجوی گوگل و سایر موتورهای جستجو ارسال کنید.

⭕️ نکته: برای اینکه موتورهای جستجو به طور خودکار sitemap رو پیدا کنن، بهتره از فایل robots.txt استفاده کنید و آدرس sitemap رو داخل اون قرار بدید.

خلاصه:
خب Django sitemaps یه ابزار قدرتمند برای بهبود سئوی سایت هست. با استفاده از این ابزار، موتورهای جستجو بهتر میتونن محتوای سایتتون رو درک کنن و در نتیجه سایتتون توی نتایج جستجو بالاتر میاد.

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

بنظرتون پست بعدی راجب چی باشه؟

#Django #sitemap #seo #python #برنامه_نویسی
👍10
دوستان هرنوع پستی که میخواید رو توی کامنت بگید که بزاریم 👇
👍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