Telegram Group Search
Forwarded from Python BackendHub
یکی از مشکلاتی که اکثر برنامه نویسا دارن تو مدیریت دپندسیه! حالا لایبری جدید یا external service که قراره ازش استفاده کنن.

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

خب چیکار کنیم؟
اولین کاری که میکنید اینه که توتوریالشو میریزین دور. میرین داکیومنتشو خوب میخونید. متوجه میشین limitation هاش چیه. متوجه میشین سیستمش چطور کار میکنه. یک داکیومنت مختصر شده ازش میسازین و cons pro هاشو در میارین. مثلا یعنی چی؟

فکر کنید مثلا دارین یک external system اضافه میکنید. مثلا یک CRM. خب اول باید چک کنید چه limitation هایی داره؟‌ایا api داره؟‌ایا web hook داره؟ ایا share state به وجود میاد؟ هزینش چقدره؟ alternative هاش چیه؟ چطور اصلا کار میکنه؟ اصلا خوب کار میکنه؟!
بعد تو درجه دوم میرین گوگل میکنید و مقاله هایی پیدا میکنید که نقاط ضعفشو بیشتر گفته. ممکنه همه نقاط ضعفش تو داکیومنتش نباشه و یکم پنهان باشه. میبینید بقیه چه چالش هایی داشتن موقع کار کردن باهاش.
در نهایت بین آپشن ها یک لیست pro cons میسازین و تصمیم گیری نهایی رو میکنید.


اگه این کارو نکنیم چه اتفاقی میفته؟
بذارین مثال بگم. مثلا شما ندیدین این api limit احمقانه ای داره. بعد کلی روش کد میزنید. یک روزی سایز بیزنستون بزرگ تر میشه و حالا هرچی کد رو زدین باید undo کنید.


همیشه تو انتخاب دپندسی هاتون خیلی فکر کنید! من بعضا دیدم بچه ها میگن <کارفرما اینطوری گفته> یا <مدیر تیم با این بیشتر حال کرده>‌. اینا دلایل منطقی اصلا نیستن برای انتخاب یک دپندسی.

@ManiFoldsPython
sarabi.pdf
626.4 KB
بهینه‌سازی کوئری‌ها و مشکل N+1
از لینکدین Mohsen Sarabi

یکی از مشکلات رایج در کوئری‌ها، N+1 Query Problem است. این مشکل زمانی رخ می‌دهد که ابتدا یک کوئری برای دریافت لیست اصلی داده‌ها اجرا می‌شود و سپس برای هر آیتم در این لیست، یک کوئری جداگانه برای دریافت داده‌های مرتبط ارسال می‌شود. نتیجه این قضیه، فرستادن تعداد زیادی درخواست غیرضروری به پایگاه داده است که موجب افزایش زمان پردازش و کاهش عملکرد برنامه ما می شود!
راه‌حل؟ استفاده از select_related
این متد با استفاده از JOIN در سطح دیتابیس، تمام داده‌های مرتبط را در یک کوئری واحد واکشی می‌کند، که باعث بهینه‌سازی عملکرد و کاهش تعداد درخواست‌ها می‌شود.
📌 اگر رابطه ManyToMany باشد، prefetch_related گزینه مناسبی است.
آیا تا به حال با این مشکل برخورد کرده‌اید؟ چگونه آن را حل کردید؟ خوشحال میشم تجربیاتتون را به اشتراک بذارید.
https://www.cursor.com/en


اینو تست کنید.
حتی شاید ارزشش رو داشته باشه که اکانتش هم بخرید.

کل پروژه رو اوپن کن بهش بده.
علاوه بر کد، فایل هارو هم خودش میسازه و...
Forwarded from محمد خشنوا / برنامه نویسی (SeYeD Mohammad Khoshnava)
Media is too big
VIEW IN TELEGRAM
این انیمیشن، یک پکیج کامل آموزش پایتونه 😂😂

@SEYED_BAX | @MohamadKhoshnava
Please open Telegram to view this post
VIEW IN TELEGRAM
یک مبحثی که خیلی وقت‌ها آدم‌های رو داخل #جنگو گیج میکنه موضوع Aggregation هستش. برای مثال کوئری پایین:


>>> from django.db.models import Avg, Max, Min
>>> Book.objects.aggregate(Avg("price"), Max("price"), Min("price"))
# {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}

خب این کوئری مشخصه چه کاری داره انجام میده، همه میتونن بفهمنش مخصوصا وقتی خروجی کوئری رو میبینن، اما اگر ازشون بپرسید خب Aggregation چی هستش هیچ ایده ای ندارن! و این ماجرا از ضعف در دانش SQL سر چشمه میگیره. چون خیلی از آدم‌هایی که دارن #django کار میکنن مستقیم سراغ جنگو اومدن و نرفتن چیزهای دیگه رو مطالعه کنن و یاد بگیرن.

اسم Aggregation داخل ORM جنگو مستقیما از SQL میاد. در SQL یک سری فانکشن وجود داره که بهشون Aggregation functions میگن و کارشون خلاصه سازی اطلاعات:
MIN() - returns the smallest value within the selected column
MAX() - returns the largest value within the selected column
COUNT() - returns the number of rows in a set
SUM() - returns the total sum of a numerical column
AVG() - returns the average value of a numerical column

و خب شما میتونید داخل کوئری‌های SQL ازشون استفاده کنید و دیتا خروجی رو خلاصه سازی کنید و یا یک آمار ازش دربیارید. مثلا میانگین قیمت کتاب‌های تو سال اخیر و ...
یک کوئری مثال برای Aggregation میتونه این باشه:

SELECT AVG(Price) as price_avg FROM Books WHERE puddate='2023-01-01';


خب از اونجایی که ORM جنگو در نهایت قرار کار همین SQL نوشتن برای شما انجام بده و کوئری‌ شمارو به SQL تبدیل کنه شما دقیقا همین کوئری میتونید داخل جنگو به این صورت بنویسید:


>>> from django.db.models import Avg
>>> from datetime import datetime
>>> Books.objects.filter(pubdate=datetime(2023, 1, 1)).aggregate(price_avg=Avg("price"))

میتونید لیست فانکشن‌های Aggregation خود SQL داخل این لینک ببینید و ساپورت جنگو هم میتونید داخل این لینک ببینید.

در نهایت از دانش SQL غافل نباشید و حتما یادش بیگیرید. هرچی بیشتر SQL بدونید زندگی راحت‌تری خواهید داشت.

@TorhamDevCH
Forwarded from Django Expert (Majid A.M)
اگر پروداکت روی جنگو ۴.۲ دارید پاشید برید آپدیتش کنید

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

™️ @DjangoIR
〰️〰️〰️〰️〰️〰️
© @DjangoEx
bigdeli_2.pdf
1003.3 KB
تست نرم افزار چیه و شامل چیا میشه؟

از لینکدین علی بیگدلی

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

اگر بخوایم کلی دسته بندی کنیم:
- تست عملکرد (Functional Testing)
- تست غیر عملکرد (Non-Functional Testing)
- تست نگهداری و بازرسی (Maintenance Testing)

بر اساس نحوه اجرا اگر دسته بندی بشن:
- تست دستی (Manual Testing)
- تست خودکار (Automation Testing)

و بر اساس تکنیک تست:
- تست جعبه سیاه (Black-box Testing)
- تست جعبه سفید (White-box Testing)
- تست جعبه خاکستری (Gray-box Testing)

موارد بسیار زیادی هستش که نیازمند یادگیری میشن مثل اینکه بهترین روش ها چیه و به اصطلاح best practice ها چی می تونن باشن. اما در کل شما طی یک پروژه نیازمند تست نرم افزار، ساختار و کیفیت اون خواهید بود و حتی بر اساس امنیت و میزان باری که تحمل می کنه و یا اینکه زیر Stress test چه واکنش هایی میده هم باید سرویس رو مورد آزمایش قرار بدید.
و...
از کانال @siliciumir

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

https://app-generator.dev/tools/django-generator/
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
سال نو همه مبارک.
نکته از کتاب Fluent Python
Forwarded from Python Hints
وقتی صحبت از امنیت میشه خیلی از توسعه دهنده‌های اینکار رو وظیفه تیم امنیت می‌دونند؛ که خب درست هم هست ولی تا یک جایی. شما هم بعنوان توسعه دهنده باید یک سری موارد رو بدونید.
مثلا خیلی دیدم؛ تیم‌های تست نفوذ فراموش می‌کنند (دسترسی ندارند) الگوریتم hash کردن پسورد داخل دیتابیس رو چک کنند؛ اینجا دانش شما بعنوان برنامه‌نویس پروژه خودش رو نشون میده و یک لایه اطمینان بیشتر برای پروژه خواهد بود.

دمشون گرم؛ تیم توسعه Django رو می‌گم چرا که اکثر اتک‌های مهم رو تا جایی که امکانش هست جلوگیری می‌کنند و برای همین هم همیشه می‌گم بکند رو فارغ از فریمورک یاد بگیرید. با این حال بسیاری دولوپر Django هست که حتی زحمت بررسی و آپدیت به آخرین پچ‌های امنیتی رو به خودش نمیده مثلا pip freeze و version locking استفاده کرده.

توی بعضی مواقع هم دانستن بعضی نکات امنیتی برای optimization بهتون کمک می‌کنه؛ مثلا توی password hash ممکن هست تحت یک شرایط خاصی اصلا الگوریتمی مثل Argon2 به کار شما نیاد و به دلایلی بهش نیاز نداشته باشید تحت این شرایط می‌تونید برگردید روی sha256 و از اون استفاده کنید (این یک مثال بود اگر argon2 رو نمی‌شناسید درموردش بخونید؛ توی لیست PASSWORD_HASHERS های Django هم هست ولی خود Django از PBKDF2 استفاده می‌کنه پیشفرض)


خیلی از برنامه‌نویس‌ها سرویس login امنی دارند که از موارد امنیتی خوبی هم استفاده می‌کنه throttling, brute-force blocker, hashing و ... اما بعضی موارد باید فراتر ازین بره؛ چیزی که خیلی ندیدم حتی روی بعضی سرویس‌های لاگین شرکت‌های بزرگ و موارد حساس.
فرض کنید شما login با ایمیل اعضای شرکت بزنید (ایمیل‌های شرکتی اصول خاصی داره و راحت بدست میاد) اگر ایمیل اشتباه باشه response time شاید زیر 20ms باشه ولی وقتی ایمیل درست هست بالای 100ms می‌شه این یکی از تکنیک‌‌های قدیمی مورد استفاده برای نفوذ به صفحات ادمین بوده و هست. شما وقتی username. email رو پیدا کنی یک نگرانی کمتر خواهی داشت.
برای همین کسی که با این موارد آشنا هست؛ برای اینکه response time لاگین درست و غلط رو یکسان کنه وقتی می‌بینه یوزر وجود نداره بجای اینکه درجا پاسخ رو برای کاربر بفرسته یکبار پسورد رو با یک چیز رندم (طبق validation نمی‌تونه توی دیتابیس باشه) حساب می‌کنه و بعد response اطلاعات غلط روی لاگین رو بر می‌گردونه.


البته که من برای این مثال دست روی یک موردی گذاشتم که خیلی‌ها رعایت نمی‌کنند (شاید نیازی هم ندارند) و خیلی‌ها بلد نیستند (باید دنبال یک جیزی هم می‌گشتم که خود django امن نکرده باشه)

یا مثلا توی کار با دیتا قبول نکردن دیتای pickle؛ اینو برگردید بالا من همون اوایل شروع کار کانال گفتم با مثال و حدود ۶ ماه قبل یکی از خوبای دنیای تکنولوژی با همین روش بهش نفوذ شد (hugging face رو منظورم هست)

یا توی شرکت‌هایی که یوزر فایل آپلود می‌کنه و نیروی انسانی باید فایل رو بررسی کنه؛ خیلی وقتا دیدم فقط پسوند فایل بررسی میشه و ...

حالا چه چیزهایی رو باید بعنوان دولوپر بدونید ؟ OWASP TOP 10 حداقلی ترین مواردی هست که شما بعنوان یک دولوپر باید بشناسید و راهای مقابله باهاش رو هم بلد باشید.

ولی بطور خاص برای Django Rest Framework حداقل این cheathseet رو باید داشته باشد
OWASP cheatsheet for DRF

من یک cheatsheet شخصی خودم دارم (شامل مواردی از بخش‌های مختلف همین cheatsheet هم هست) ولی متاسفانه نمی‌تونم به اشتراک بذارم چون آخرین ورژن رو با داکیومنت شرکت ادغام کردم. اما پیشنهاد میدم لینک بالا رو بخونید و حتما حتما حتما نگاهی هم به رفرنس‌هاشون بندازید این خیلی مهمه.
استفاده از Django-storage در محیط پروداکشن

از لینکدین Farzin Shams

قطعا در پروژه‌های Django از فایل‌های مدیا استفاده کردید و میدونید برای بهینه بودن پروژه بهتره این فایل‌هارو روی سروری که پروژه ران شده ذخیره نکنید. دلایل مختلفی برای این کار وجود داره! چون:

🔹 سرور فضای محدودی داره
🔹 سرعت پایینه
🔹 بک‌آپ‌گیری و امنیت سخته
🔹 مقیاس‌پذیر نیست

اینجاست که django-storages به کمک ما میاد:

یک پکیج کاربردی که کمک می‌کنه فایل‌ها رو به‌جای ذخیره‌سازی محلی، روی فضای ابری آپلود کنیم، مثل:

Amazon S3
Google Cloud
Azure

از اونجایی که اکثر سرویس دهنده‌های خارجی از ایران قابل استفاده نیستن، شما به راحتی میتونید با استفاده از سرویس‌های S3 ایرانی مثل ابر آروان، دادیار، لیارا و ... تجربه بهتری رو برای کاربران سایت خودتون رقم بزنید.
.
💡 با این کار، همه‌ی فایل‌های آپلودی روی فضای ابری ذخیره می‌شن؛ که موجب سریع‌تر، امن‌تر و مقیاس‌پذیرتر شدن پروژه‌های جنگویی شما میشه.
.
اگر تجربه کار با django-storages یا اتصال به سرویس‌های ابری ایرانی رو داشتی، خوشحال می‌شم نظرتون رو بدونم!
.
لینک: https://lnkd.in/e9EgFTpC
چرا Multi-Threading در پایتون مثل جاوا کار نمی‌کنه؟

از لینکدین Majid BagherZadeh
کامنت های پستش رو بخونید. لینک این پست

یکی از تفاوت‌های جالب بین زبان‌های برنامه‌نویسی اینه که "Thread" در هر زبان لزوماً به معنای واقعی خودش اجرا نمی‌شه!

🔹 در جاوا، Threadها واقعاً می‌تونن روی چندین هسته CPU اجرا بشن، مخصوصاً حالا که با Virtual Threads در جاوا ۲۱، اجرای هم‌زمان بسیار سبک‌تر و مقیاس‌پذیرتر شده.

🔹 اما در پایتون، یک چیزی به نام GIL (Global Interpreter Lock) وجود داره که باعث می‌شه در هر لحظه فقط یک Thread بتونه اجرا بشه، حتی اگه چند Thread ساخته باشیم! به همین خاطر، در پایتون برای استفاده از تمام هسته‌های CPU معمولاً به جای Multi-Threading از Multi-Processing استفاده می‌کنن.

💡 نتیجه؟
اگر توی جاوا Thread بسازید، واقعاً روی چند هسته اجرا می‌شه. اما توی پایتون، ساختن چندین Thread لزوماً به معنی اجرای هم‌زمان واقعی نیست! به جای اون، در پایتون پردازش‌های موازی بیشتر با Multi-Processing انجام می‌شن تا بتونن از همه‌ی قدرت CPU استفاده کنن.

🔥 این یکی از اون تفاوت‌هایی‌ـه که اگر بهش دقت نکنید، ممکنه فکر کنید Multi-Threading همیشه همون معنی رو داره—ولی در عمل، بستگی داره که توی چه زبانی کار می‌کنید!

🚀 شما چقدر به این تفاوت‌ها توجه کردید؟ تجربه‌ای در این زمینه داشتید؟
Shahab.pdf
527.1 KB
محدود کردن قبلِ از کار افتادن سیستم
از لینکدین Shahab Bozorgi

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

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

چجوری از Throttling تو DRF استفاده کنیم؟!
ا DRF چند نوع Throttle پیش‌فرض داره:
AnonRateThrottle → برای کاربران ناشناس
UserRateThrottle → برای کاربران لاگین کرده
ScopedRateThrottle → برای محدود کردن درخواست‌ها در سطح API خاص
کافیه این تنظیمات رو توی settings.py اضافه کنیم و مقدار دلخواهمون رو تنظیم کنیم
با این روش از overload شدن سرور هم جلوگیری می‌کنیم.
seo_jozzz.pdf
41 MB
این جزوه رو Hojjat Mesgari توی لینکدینش گذاشته بود.
جزوه دوره سئو خودشه ظاهرا
فکر می کردم جزوه فقط مال دانشگاس
ولی عجب حوصله ای داشته طرف
لینک پست
2025/06/12 17:28:58
Back to Top
HTML Embed Code: