جنگولرن
3.78K subscribers
287 photos
73 videos
31 files
553 links
آموزش Django و بستگان
Download Telegram
.

لینک ویدیوی جلسه ۲۶:

https://youtu.be/mWqFwJYiQgM

تو این ویدیو، شروع کردیم در مورد بک اند صحبت کردیم که چی چی هست و کجاها کاربرد داره، از FastAPI و چند فریمورک دیگه حرف زدیم و در نهایت چند خط کد با فریمورک محبوب FastAPI کد زدیم

🔔 حتما حتما یوتیوب رو فالو کنید و ویدیو رو لایک کنید و نوتیف رو روشن بزارید 🫶

https://t.me/QaDeveloper

@SEYED_BAX | @MakeDeveloper
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
ای وای! پرفورمنسش افتاد!

این پست با کامنت هاش جالبه

بخشی از پست:
داستان از اینجا شروع میشه که من در تمامی شرکت هایی که کار کردم با یه چالش جدی مواجه بودن اونم اینه که بعد از یه مدت پرفورمنس سایت بخاطر دیپلوی ها و فیچرهایی که به سیستمشون اضافه می شد میومد پایین ( حالا کاری ندارم گیر از بک اندشون بود یا فرانت ) که در نتیجه از یه جایی به بعد گوگل روی سئو رنک پیج هاشونو میاورد پایین.
حالا این شرکت ها معمولا چیکار میکنن؟
میان یه اسپرینت روی این قضیه وقت میگذارن. گیر و گور کارو درمیارن تا یه جایی . دیپلوی میدن. همه چی تا یه مدت به حالت عادی برمیگرده ،۶ ماه بعد دوباره همین داستان تکرار میشه.


https://www.linkedin.com/posts/mostafadadkhah_%DA%86%D8%A7%D9%84%D8%B4-%D8%A7%DB%8C-%D9%88%D8%A7%DB%8C-%D9%BE%D8%B1%D9%81%D9%88%D8%B1%D9%85%D9%86%D8%B3%D8%B4-%D8%A7%D9%81%D8%AA%D8%A7%D8%AF-%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%D9%86-%D8%A7%D8%B2-activity-7225427107437318144-5i8d?utm_source=share&utm_medium=member_desktop
👍3
Forwarded from Ninja Learn | نینجا لرن (Mohammad Eslami)
💎 مفهوم 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
👍32
علی شریفی زارچی: دانشگاه شریف سال گذشته دوره‌ی «برنامه‌نویسی پایتون و خلاقیت الگوریتمی» را برای هزاران دانش‌آموز متوسطه‌ی سراسر کشور برگزار کرد.
تمام محتوای این دوره شامل ویدئوی کلاس‌ها، تمرین‌های نظری و عملی «به صورت رایگان» به همه‌ی دانش‌آموزان ایران تقدیم می‌شود:
https://learn-python.ir

بیش از ۱۱۰ استاد، دانشجو و دانش‌آموخته‌ی دانشگاه شریف و سایر دانشگاه‌های داخل و خارج ایران در تهیه‌ی محتوا و برگزاری آن مشارکت داشتند.
علاوه بر دانش‌آموزان متوسطه، این دوره مناسب همه‌ی افرادی است که می‌خواهند برای نخستین بار برنامه‌نویسی یاد بگیرند و از چالش‌های زیبا لذت ببرند.

گذراندن این دوره و انجام تمرین‌های نظری و عملی آن با تلفن همراه امکان‌پذیر است و نیازی به استفاده از لپ‌تاپ یا کامپیوتر نیست.
صمیمانه پیشنهاد می‌کنیم اگر دانش‌آموز دبیرستان یا فردی علاقمند به یادگیری برنامه‌نویسی می‌شناسید، دوره را به او معرفی فرمایید.
👍4
Media is too big
VIEW IN TELEGRAM
شایستگی اتصال پایگاه داده در وب - آموزش MySql

✔️توی این ویدئو در مورد MySql صحبت می کنیم.
✔️درس پیاده سازی سیستم های اطلاعاتی و طراحی وب

پودمان 4 واحد یادگیری 6
شایستگی اتصال پایگاه داده در وب


لینک آپارات:
https://www.aparat.com/v/ezy0z22

لینک یوتیوب:
https://youtu.be/S286TFSsxj0
3👍1🔥1
Forwarded from Ninja Learn | نینجا لرن (Mohammad Eslami)
💎 سایت مپ (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 #برنامه_نویسی
13👍4🔥3🤔1
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
💎 لاگینگ (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 یا بالاتر بذارید.

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

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

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


#جنگو #لاگینگ #توسعه_وب #پایتون
👍143
سنیور کیه؟ سنیور کسیه که:

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

یادگیری براش آب خوردنه: اندرو هانت و دیوید توماس تو کتاب "The Pragmatic Programmer" تاکید میکنن که یه سنیور همیشه در حال یادگیریه و با سرعت میتونه تکنولوژیهای جدید رو بگیره و تو کارش پیاده کنه.
اصطلاحا میگن باید learning curve پایین باشه

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

کدی که میزنه مثل جواهر میدرخشه (و تست شده است): کنت بک، پدر TDD، میگه که تست کردن کد از مهمترین بخشهای کاره. یه سنیور باید کدی بزنه که به طور کامل تست شده و هیچ خطایی توش نباشه.
یه عده معتقدن که تست کار سنیور نیست!
ای خدا

حرفاش پایه و اساس داره، نه از روی حدس و گمان: استیو مککانل تو کتاب "Code Complete" میگه تصمیمات یه سنیور باید بر اساس تجربه و داده باشه، نه از روی حدس. این باعث میشه که هم تیمیها و هم مشتریها بهش اعتماد کنن.

استراتژی رو توی خونش داره: وارن برگر توی کتاب "A More Beautiful Question" میگه یه سنیور باید تصویر کلی رو ببینه و با تفکر استراتژیک تصمیمات بلندمدت بگیره.

دنبال مقصر نمیگرده، دنبال راه حله: کن بلانچارد تو کتاب "The One Minute Manager" میگه یه سنیور به جای اینکه بگرده ببینه کی اشتباه کرده، دنبال راه حل میگرده. این طوری فرهنگ همکاری و اعتماد تو تیم قوی میشه.
قابل اعتماده: لینوس توروالدز، خالق لینوکس ، میگه که اعتماد یکی از مهمترین ویژگیهای یه سنیوره. سنیور باید بتونه با کیفیت کار و رفتار حرفهایش اعتماد دیگران رو جلب کنه.

زمان رو خوب مدیریت میکنه: استیون کاوی، نویسنده "7 عادت افراد بسیار مؤثر"، میگه: "اولویتها رو اولویتبندی کنید." یه سنیور باید بتونه زمانش رو خوب مدیریت کنه و کارای مهمتر رو تشخیص بده تا پروژهها به موقع و با کیفیت تحویل داده بشن.

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

تفکر انتقادی داره و تحلیلگره: ریچارد استالمن، بنیانگذار نرمافزار آزاد ، میگه: "هر تصمیمی تو نرمافزار باید با دقت و تحلیل کامل گرفته بشه." یه سنیور باید بتونه مسائل رو تحلیل کنه و بهترین تصمیمات رو بگیره.

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

دید کلی به پروژه داره: اریک ریموند، یکی از نویسندگان "The Cathedral and the Bazaar"، میگه: "نگاه از بالا به پروژه بهتون کمک میکنه بفهمین هر تصمیم چطور بر کل سیستم تأثیر میذاره." یه سنیور باید دید کلی داشته باشه تا تصمیمات استراتژیک بگیره و پروژه رو به موفقیت برسونه.

✍️ Hossein Dadkhah
👍6🔥21👏1
Forwarded from Sadra Codes
تقریبا هرچیزی که راجع به Lambda Functionها در پایتون نیازه که بدونید رو اینجا قرار دادم! ۵ دقیقه زمان می‌بره خوندنش!

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

link 👉 https://blog.imsadra.me/lambda-the-single-line-function

لذت ببرید. :))

پی‌نوشت: عکس پست یکی از جالب‌ترین و در عین حال، بدترین یوزکیس‌های لامبدا فانکشنه. اینکه بعنوان یه Decorator از لامبدا استفاده کنی! 😅
👍2
.

لینک ویدیوی جلسه 29:

https://youtu.be/vFZdox9DHnk

تو این ویدیو، در مورد اینکه یک رکوئست از مرورگر تا رسیدن به سایت و رد شدن از انواع ns و dns و کلادفلر و ... تا رسیدن به وب سرور و رد کردن nginx و asgi و FastAPI و صدا زدن فانکشن صحبت کردیم، بشدت بحث مفصل و خفنی بود.

🔔 حتما حتما یوتیوب رو فالو کنید و ویدیو رو لایک کنید و نوتیف رو روشن بزارید 🫶

https://t.me/QaDeveloper

@SEYED_BAX | @MakeDeveloper
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Forwarded from Django Expert (Amir Motahari)
صف‌ها در پایتون
- stack vs queue
- list
- collections.deque
- queue.Queue
- multiprocessing.Queue

لینک ویدیو:
https://youtu.be/mU2HTMUqiBY

> پلی‌لیست کتاب ترفندهای پایتون
〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
© @DjangoEX | > Instagram <
👍2
Forwarded from Microfrontend.ir
Django Json Field
سال‌هاست که ذخیره سازی داده‌ها به شیوه رابطه‌ای بهترین و رایج ترین شیوه ذخیره سازی است با این وجود در سال‌های اخیر و با معرفی مفهوم NoSQL شیوه‌های دیگری نیز مطرح شده اند که پرکاربردترین آنها Document یا ذخیره داده به شکل JSON است. ابزارهای مختلفی مانند mongodb در این فضا رشد کرده‌اند اما امروزه اغلب دیتابیس‌های رابطه‌ای به شما امکان ذخیره و بازیابی این نوع از داده‌ها را می‌دهند و شاید بتوان گفت بهترین آنها PostgreSQL است. در این ویدیو ابتدا شیوه‌ اجرای پستگرس از طریق داکر را شرح دادیم و سپس با اتصال به آن یک دیتابیس و یک جدول ساختیم که بتوان داده‌های JSON را نیز در آن ذخیره کرد. سپس همان رویکرد را بر روی جنگو و با استفاده Django Json Field پیاده سازی کردیم و چند مثال از query داده‌ها را بررسی کردیم.

Video Link: https://youtu.be/aVahpcJQ8tE

** پلی لیست نکته ها و ترفندهای جنگو:
https://www.youtube.com/playlist?list=PLJ9zDGwhhsBwdrfdaoOqbYev3_ocuBOfv

** کلاس آنلاین آموزش جنگو
https://www.youtube.com/playlist?list=PLJ9zDGwhhsByH5tcpM9H3VzdHYpne3bSa
〰️〰️〰️〰️〰️〰️
© @microfrontend_ir
👍1
Forwarded from Python BackendHub (Mani)
یک نکته به حرفای صدرا اضافه کنم
قانون goodhart میگه که اگه یک measure (معیار) تبدیل به تارگت بشه، دیگه معیار خوبی نیست.

برای همین من اصلا چیزایی مثل تست کاوریج و استوری پوینتو اینا رو قبول ندارم. چون اینا measure نیستن هیچوقت همیشه تارگت میشن.

همین اتفاقی که واسه صدرا افتاد، شما به جای اینکه دنبال این باشین که تست بنویسید که یوزکیس و ادجکیس هارو کاور کنید، تست مینویسید که صد در صد شه 😅. برای همین قبلا گفتم تست کاوریج یک دروغه. خوبه که داشته باشیم، بدونیم عه فلان فایلمون اصلا کاور نشده، ولی target نیست! همین موضوع راجب استوری پوینت، استوری پوینت تارگت نیست!

تارگت باید این باشه: تست هایی که business requirement رو تست میکنن، که گارانتی میدن نرم افزار اون requirement رو satisfy میکنه طبق اون شرایط

استوری پونینتم همینه ها هیچ فرقی نداره. اونایی که از هر اسپرینت میام جمع میزنن استوری پوینتو و هدفشون میشه استوری پوینت دقیقا تو همین دستن.

@PyBackendHub
👍2
Forwarded from Ninja Learn | نینجا لرن (Mohammad)

💎 کشینگ در جنگو 💎

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

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

🧾 انواع کشینگ در جنگو و کاربردهاشون:

1⃣ کش صفحه (Page Cache):
کل خروجی یک ویو رو ذخیره می‌کنه. برای صفحاتی که محتوای داینامیکی کمی دارن و تغییرشون کند هست، ایده‌آله.

2⃣ فرگمنت کش (Fragment Cache):
قسمت‌های مختلف یک صفحه رو به صورت جداگونه کش می‌کنه. این کار باعث میشه بتونیم بخش‌های پویا و ایستا رو به صورت جداگونه مدیریت کنیم.
3⃣ کش دیتابیس:
کوئری‌های پیچیده و پرکاربرد رو کش می‌کنه تا بار سرور دیتابیس کاهش پیدا کنه.


4⃣ کش سرور:
داده‌هایی که از APIهای خارجی یا سیستم‌های دیگه ای گرفته می‌شن رو کش می‌کنه تا از بارگذاری مجدد جلوگیری کنه.

ابزارهای کشینگ در جنگو:

1⃣ cache_page decorator:
ساده‌ترین روش برای کش کردن کل صفحه است.


2⃣ cache.get() and cache.set():
برای دسترسی مستقیم به کش استفاده میشه.


3⃣ @cache_decorator:
برای تعریف دکورتورهای سفارشی کشینگ استفاده میشه.


4⃣ cache_framework:
فریمورک داخلی جنگو برای مدیریت کشینگ است.


نکات مهم در پیاده‌سازی کشینگ:

1⃣ زمان انقضا کش:
تعیین زمان مناسب برای انقضای کش خیلی مهمه. اگه خیلی کوتاه باشه، بار سرور زیاد میشه و اگه خیلی طولانی باشه، داده‌های قدیمی به کاربر نمایش داده میشه.

2⃣ کلید کش:
انتخاب یک کلید مناسب برای هر آیتم کش، به شما کمک می‌کنه تا به راحتی به اون آیتم دسترسی پیدا کنید.

3⃣ و Invalidation:
وقتی داده‌ای تغییر کرد، باید کش مربوط به اون داده رو باطل کرد تا داده جدید به کاربر نمایش داده بشه.

4⃣ و Backend های کش:
جنگو از بک‌اندهای کش مختلفی مثل Memcached، Redis و دیتابیس پشتیبانی می‌کنه. انتخاب بک‌اند مناسب به نیازهای اپلیکیشن بستگی داره.

حالا بریم سراغ نصب ابزار ها و کارکردن باهاشون 😁

1⃣ نصب Redis:
اول از همه باید Redis رو روی سیستم‌مون نصب کنیم. دستور نصبش بسته به اینکه ویندوز یا لینوکس یا مک دارید فرق می‌کنه. میتونید توی گوگل سرچ کنید و دستوراتش رو پیدا کنید.

2⃣ نصب پکیج django-redis در جنگو:
حالا باید یه پکیج به اسم django-redis رو نصب کنیم. این پکیج مثل یه پل بین جنگو و Redis عمل می‌کنه. برای نصبش کافیه تو ترمینال بنویسید:

pip install django-redis

تنظیمات نهایی:
حالا بریم سراغ فایل settings.py پروژه مون. اینجا باید به جنگو بگیم که از Redis استفاده کنه. یه بخش به اسم CACHES داریم که باید توش این اطلاعات رو وارد کنیم:

CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
}
}

اینجا LOCATION آدرس Redis رو مشخص می‌کنه. مثلاً 127.0.0.1 یعنی لوکال‌هاست خودمون.


حالا بریم مثال عملی بزنیم 😄

مثال پیشرفته:
from django.views.decorators.cache import cache_page
from django.core.cache import cache

@cache_page(60 * 15) # کش کردن به مدت 15 دقیقه
def my_view(request, product_id):
product = Product.objects.get(id=product_id)
related_products = cache.get(f'related_products_{product_id}')
if not related_products:
related_products = product.get_related_products()
cache.set(f'related_products_{product_id}', related_products, 60 * 15)
return render(request, 'product_detail.html', {'product': product, 'related_products': related_products})


در این مثال، ما محصولات مرتبط با یک محصول خاص رو کش می‌کنیم.
از cache.get() برای بررسی وجود محصول در کش استفاده می‌کنیم و اگه وجود نداشت، اون را محاسبه میکنیم و در کش ذخیره می‌کنیم.


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

برای مطالعه بیشتر میتونید به داکیومنت رسمی جنگو مراجعه کنید


ممنون میشم اگه خوشت اومد ریکشن بزنی و مارو فالو کنی :)

#جنگو #کشینگ #توسعه_وب #بهینه_سازی


@ninja_learn_ir
🔥20👍42
Forwarded from Microfrontend.ir
در این ویدیو از پلی لیست آموزش جنگو و نکته‌ها و ترفند‌های آن به بررسی مفهوم Django Custom Field پرداختیم. ابتدا نوع داده JSONB Array در پستگرس را با یک مثال شرح دادم و سپس یک کاستوم فیلد نوشتیم که بتوان این نوع داده را ذخیره و بازیابی کنیم. سپس یک Custom lookup هم نوشتیم که بتوان داده ها را فیلتر کرد.


** در این ویدیو اساسا دنبال آموزش خاصی نبودم و دنبال این بودم که ترغیبتون کنم در تله آموزش نیافتید و شروع کنید به خوندن کد خود جنگو که بهترین منبع مستر شدنه :)

Video Link: https://youtu.be/I0Ry63LO-Rg

** پلی لیست نکته ها و ترفندهای جنگو:
https://www.youtube.com/playlist?list=PLJ9zDGwhhsBwdrfdaoOqbYev3_ocuBOfv

** کلاس آنلاین آموزش جنگو
https://www.youtube.com/playlist?list=PLJ9zDGwhhsByH5tcpM9H3VzdHYpne3bSa
〰️〰️〰️〰️〰️〰️
© @microfrontend_ir
👍21
Forwarded from Python BackendHub (Mani)
بحث خوبی شد تو گروه, یکی پرسید که JIT چیه و چی کار میکنه دقیقا. ‌سعی میکنم خیلی ساده توضیح بدم که قابل درک باشه برای همه.

وقتی یه اسکریپت پایتونی رو ران می‌کنی، یه سری فایل با پسوند .pyc تو پوشه‌ی pycache ساخته میشه. اینا بایت کد هستن. بایت کد چیه؟ یه low level representation از کدی که نوشتی. بایت کد platform independent هست یعنی مهم نیست رو چی داری رانش میکنی. اما این بایت کد برای CPU قابل فهم نیست. CPU فقط ماشین کد رو می‌فهمه، یعنی همون باینری صفر و یک. پس وقتی بایت کد تولید میشه، PVM (Python Virtual Machine) میاد و بایت کد رو به ماشین کد تفسیر می‌کنه تا CPU بتونه اجراش کنه.

حالا JIT چیه؟ تبدیل بایت کد به ماشین کد زمان و منابع مصرف می‌کنه. JIT توی ران‌تایم این تبدیل رو انجام میده و ماشین کد رو توی حافظه نگه می‌داره تا دفعات بعدی که همون کد اجرا میشه، دوباره نیاز به تبدیل نباشه. اینکار رو فقط برای بخش‌هایی از کد که زیاد اجرا میشن (بهشون میگن hot loop) انجام میده. چرا؟ چون خوده ذخیره کردن این دیتا پرهزینست و مموری اشغال میکنه پس کل کد رو نمیاد اینکارو کنه. یعنی JIT Engine نگاه می‌کنه ببینه این بخش از کد اونقدری داره اجرا میشه که ارزش داشته باشه ماشین کدش رو نگه داره یا نه.

چرا کد پایتون مستقیم کد ماشین نمیشه؟ دلیلش اینه که PVM و Python runtime environment داره تو پایتون کارای دیگه‌ای هم میکنه تو ران تایم مثل مدیریت حافظه، لود کردن ماژول‌ها و پکیج‌ها و... این باعث میشه که پایتون انعطاف‌پذیر و راحت باشه، ولی خب به قیمت افت عملکرد در مقایسه با زبان های کامپایلری مثل C.


@PyBackendHub
7👍4
Forwarded from Ninja Learn | نینجا لرن (Javad Moradkhah)
💎 کلید مخفی (SECRET KEY) در جنگو به زبان ساده 💎

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

وقتی یه پروژه جدید با django-admin startproject میسازید، جنگو بصورت خودکار یه کلید مخفی تولید میکنه و تو تنظیمات پروژه قرارش میده.

این کلید یه رشته‌ی بی‌معنیه و نباید باهاش مثل یه متن یا داده‌ی دیگه رفتار کنید. هر وقت می‌خواین ازش استفاده کنید، باید با دستور force_str() یا force_bytes() اونو به فرمت مورد نظرتون تبدیل کنید.

⭕️ اگه این کلید رو تنظیم نکنید، جنگو اصلا بالا نمیاد!

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

این کلید برای چی استفاده میشه؟

1⃣ تمام جلسات (Session) به غیر از اونایی که از کش (Cache) استفاده می‌کنن.

2⃣ تمام پیام‌ها (Message) که از روش‌های ذخیره‌سازی مثل CookieStorage یا FallbackStorage استفاده می‌کنن.

3⃣ توکن‌های بازیابی رمز عبور (Password Reset)

4⃣ هر جایی که امضای امنیتی نیاز باشه (مگر اینکه کلید دیگه‌ای تنظیم شده باشه)

اگه کلید مخفی رو عوض کنید، تمام موارد بالا دیگه کار نمی‌کنن. برای همین، موقع عوض کردن کلید، کلید قبلی رو به طور موقت تو تنظیمات SECRET_KEY_FALLBACKS قرار بدید تا مشکلی پیش نیاد.

⭕️ این نکته رو هم یادتون باشه که کلید مخفی برای رمز عبور کاربرها استفاده نمیشه و عوض کردن اون تاثیری روی رمزها نداره.

فایل پیشفرض settings.py که با django-admin startproject ساخته میشه، به طور خودکار یه کلید مخفی منحصر به فرد برای راحتی کارتون ایجاد میکنه.

امیدوارم براتون مفید واقع بوده باشه 🌹

#جنگو
12👍6
This media is not supported in your browser
VIEW IN TELEGRAM
🔸 دیکشنری‌های تو در تو و فایل با فرمت جِیسون (JSON)

🔗 برش‌هایی از جلسه 183 دوره صفر تا قهرمانیِ پایتون

🔗 مشاهده 5 فصل اوّل (56 جلسه - رایگان)

🔗 خرید کامل دوره جهت دسترسی به کل محتوا

🔸 با خرید این دوره، شما مادام العمر، به محتوای دوره و آپدیت‌های آینده دسترسی خواهید داشت!

🔸 با خرید این دوره، پی‌دی‌اف جذاب تمام اسلایدها دراختیار شما قرار خواهد داده شد.

🔸 با خرید این دوره شما به بیش از 400 جلسه آموزشی دسترسی خواهید داشت.

🔸 با خرید این دوره شما به بیش از 100 فایل تمرین از مبتدی تا پیشرفته دسترسی خواهید داشت.

🔸با خرید این دوره شما به گروه VIP دوره اضافه خواهید شد و به طور 24 ساعت با مدّرس دوره ارتباط خواهید داشت.

🔗 izlearn.ir 🧡🤝🏼
🔥21