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

https://huly.blog/source-code-is-poison

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

خیلی وقت‌ها ما از کتابخونه و فریم‌ورک‌ها استفاده میکنیم به خاطر اینکه یک کار رو ساده میشه باهاشون انجام داد، از جنگو استفاده میکنیم چون کار باهاش راحته، داخل جنگو از DRF و simple jwt استفاده میکنیم چون ساخت api و لاگین رو برامون خیلی راحت میکنن. اما اینجا یک چیزی گاهی فراموش میشه.

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

و شاید بگید خوب این خوبه دیگه یارو کد برای ما زده و استفاده می‌کنیم و لذتشو میبریم. تو خیلی از مواقع این درسته، ولی امان از اون روزی که بخوایید یکچیزی رو تغییر بدید که فریم‌ورک/کتابخونه براتون انجام داده :) اونجاست که این سادگی که ازش لذت میبردید تبدیل کابوس میشه :D

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

این گفتم که بدونید همیشه هر سادگی خوب نیست، گاهی بهتره تن به کار بدید و اون کد خودتون بزنید تا با نیاز شما هماهنگ باشه نه اینکه یک کتابخونه هزارخطی نصب کنید تا از ۱۰۰ خطش استفاده کنید.

@TorhamDevCH
👍151👎1
TorhamDev | تورهام 😳
سادگی همیشه خبر از پیچیدگی میده! خیلی وقت‌ها ما از کتابخونه و فریم‌ورک‌ها استفاده میکنیم به خاطر اینکه یک کار رو ساده میشه باهاشون انجام داد، از جنگو استفاده میکنیم چون کار باهاش راحته، داخل جنگو از DRF و simple jwt استفاده میکنیم چون ساخت api و لاگین رو…
یعنی چی؟
یعنی جنگو و DRF و simple jwt استفاده نکنیم؟

✔️استفاده کنید. با خیال راحت. خیلی هم خوبه

اما بدانید که هر چقدر به سمت حرفه ای شدن می روید. امثال این حرفهارو بهتر درک می کنید.

اگه کسی نظر فنی در این مورد داره، توی کامنت ها بنویسه 🙏🏻
👍11
💎 اصول Normalisation در طراحی دیتابیس 💎
امروز می‌خوام در مورد یکی از مهم‌ترین اصول طراحی دیتابیس یعنی "نرمال‌سازی" صحبت کنم. اگه می‌خواین دیتابیس‌تون پر سرعت و بدون مشکل کار کنه، باید با این سه فرم اصلی نرمال‌سازی آشنا بشین.

1⃣ فرم اول نرمال (1NF)
تو فرم اول نرمال، باید همه‌ی ستون‌های دیتابیس‌تون "اتمی" باشن. یعنی هر سلول از جدول باید فقط یه مقدار داشته باشه، نه چندتا مقدار!
📌 مثال:
فرض کن یه جدول داری که توش شماره تلفن‌های چند نفر رو ذخیره کردی. اگه تو یه سلول چند تا شماره تلفن ذخیره کنی، دیتابیست تو فرم اول نرمال نیست باید هر شماره تلفن توی یه ردیف جدا باشه.

2⃣ فرم دوم نرمال (2NF)
وقتی فرم اول رو رعایت کردی، می‌رسی به فرم دوم. تو این فرم، باید مطمئن بشی که همه‌ی ستون‌های غیرکلیدی، وابسته به کلید اصلی (Primary Key) باشن.
📌 مثال:
فرض کن یه جدول داری که اطلاعات دانش‌آموزان و درس‌هایی که می‌خونن رو ذخیره می‌کنه. اگه یه ستون مربوط به اطلاعات کلاس (مثل شماره کلاس) باشه که وابسته به دانش‌آموز نباشه، دیتابیس‌ت تو فرم دوم نرمال نیست. باید اون اطلاعات رو تو یه جدول جدا ذخیره کنی.

3⃣ فرم سوم نرمال (3NF)
حالا که فرم دوم رو رعایت کردی، می‌رسیم به فرم سوم. اینجا باید مطمئن بشی که هیچ ستون غیرکلیدی به یه ستون غیرکلیدی دیگه وابسته نباشه
📌 مثال:
اگه تو جدول دانش‌آموزان، هم اسم شهر و هم اسم استان رو ذخیره کنی و استان وابسته به شهر باشه، دیتابیس تو فرم سوم نرمال نیست. باید شهر و استان رو تو یه جدول دیگه ذخیره کنی.

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

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

#sql #database #db #nf


@ninja_learn_ir
🔥10👍8
Media is too big
VIEW IN TELEGRAM
موشکافی ListView و نکات ریز تنظیمات template

توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️چطور از ListView استفاده کنیم
✔️چطور از attribute های ListView استفاده کنیم
✔️با تنظیمات template ها آشنا شدیم و نکاتی ریزی رو متوجه شدیم که دانستن شون قطعا مفید هست

لینک آپارات:
https://www.aparat.com/v/tga7df6
لینک یوتیوب:
در حال آپلود...

چند قسمت رایگان دیگه از این دوره رو اینجا ببینید:
https://t.me/djangolearn_ir/531
https://t.me/djangolearn_ir/533
https://t.me/djangolearn_ir/573
https://t.me/djangolearn_ir/676
https://t.me/djangolearn_ir/724
https://t.me/djangolearn_ir/889

لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
🔸 ناسازگاری نام‌ها در پایتون (naming conflicts)

🔸 اصلا دوره‌ای هست این نکات ریزو بهت بگه؟ 😬

🔸 فرضاً گفت!! اینجوری میگه که یادت نره ؟

🔗 دوره‌ی صفر تا قهرمانی پایتون

🔗 وب‌سایت : آیزی لرن
🔥51👍1👎1
از لینکدین Hossein Nazari

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

یه سوال خیلی مهم از من پرسید که نتونستم بهش جواب درستی بدم، سوال با این مفهوم که چرا پزشک، مشاور، وکیل و حسابدار، هرچقدر که سنشون بالاتر میره مشتری شون بیشتر میشه حتی با وجود دستمزد بیشتر، ولی برنامه نویس ها در سنین بالاتر خواهانشون کمتر میشه؟

من برنامه نویسی به شیوه صرفا کارمندی رو یه شغل پایدار در بلند مدت نمیدونم، و فکر میکنم باید به فکر روش های درآمدزایی متفاوت بود.

فکر می کنید برنامه نویسی بعد از چهل سالگی چه شکلی میشه؟
خیلی عدد ۴۰ مهم نیست، مهم مرز سنی مشخصی هست که بعدش چالش های ویژه خودش رو داره برای کار کردن و کار پیدا کردن.
تجربه شخص ممکنه بیش از حد زیاد باشه، حوصله کار شخص کمتر از حد قابل قبول باشه و همچنین، سطح انتظار حقوقی شخص بالا میره و هر شرکتی نمیتونه انتظاراتش رو برآورده کنه. و جمع این فاکتورها ممکنه فرصت های شغلی رو کم کنه.

حرف آخر اینکه خوبه که کارمندی و برنامه نویسی رو تجربه کنید، اما شغل دائم نبینیدش، چون میتونه چالش های جدی ایجاد کنه در سنین بالاتر.

در آخر خوشحال میشم اگه تجربه و راهکاری برای این چالش دارید و حتی تجربه ای دارید، کامنت کنید.
👍13
💎معرفی دیتابیس MongoDB 💎

دیتابیس MongoDB یکی از محبوب‌ترین دیتابیس‌های NoSQL تو دنیای امروزه.

به‌ جای این‌که مثل دیتابیس‌های رابطه‌ای (مثل MySQL یا PostgreSQL) از جداول و ردیف‌ها استفاده کنه، اطلاعات رو به شکل Document ذخیره می‌کنه که ساختارش خیلی شبیه به JSON هست.

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

حالا چرا MongoDB انقدر محبوبه؟

1⃣  انعطاف‌پذیری بالا :
توی MongoDB، نیازی نیست برای همه رکوردها یک ساختار ثابت داشته باشی.
مثلاً توی یه دیتابیس سنتی اگه یک فیلد جدید اضافه کنی باید اون فیلد رو به همه رکوردها اضافه کنی.
اما توی Mongo، هر Document می‌تونه فیلدهای خاص خودش رو داشته باشه. یعنی اگه توی یک داکویمنت مثلاً فیلد "address" داشته باشی و توی داکیومنت دیگه نداشته باشی، هیچ مشکلی پیش نمیاد.

مثال:
{
  "name": "Ali",
  "age": 25,
  "email": "ali@example.com"
}

{
  "name": "Sara",
  "age": 30
}

2⃣ مقیاس‌پذیری بالا
اگه یه پروژه خیلی بزرگ داشته باشی که نیاز به مقیاس‌پذیری بالا داره (مثلاً یه فروشگاه اینترنتی با میلیون‌ها کاربر)، MongoDB می‌تونه راحت با افزایش حجم داده‌ها سازگار بشه. Sharding توی Mongo بهت کمک می‌کنه که دیتابیس رو روی چندین سرور تقسیم کنی و عملکرد رو بالا ببری.

3⃣ سرعت بالا در خوندن و نوشتن داده‌ها
چون MongoDB داکیومنت ها رو به صورت ساده و با ساختار JSON-گونه ذخیره می‌کنه، خوندن و نوشتن داده‌ها خیلی سریع‌تر از بعضی دیتابیس‌های سنتی انجام می‌شه. این ویژگی به خصوص برای اپلیکیشن‌هایی که داده‌های زیاد و پویا دارن خیلی مفیده.

4⃣ مناسب برای داده‌های پیچیده و پویا
تو برنامه‌هایی که داده‌هاشون خیلی سریع تغییر می‌کنه و یا نوع داده‌ها ممکنه پیچیده باشه (مثل پروژه‌های اینترنت اشیا، شبکه‌های اجتماعی یا اپلیکیشن‌های موبایل)، MongoDB انتخاب بهتریه. چون لازم نیست هر دفعه که ساختار دادت عوض می‌شه، کل دیتابیس رو دوباره طراحی کنی.


حالا MongoDB چطور کار می‌کنه؟🤔

داده‌ها توی MongoDB به شکل مجموعه‌ای از اسناد ذخیره می‌شن. هر سند مثل یک فایل JSON عمل می‌کنه. برای کار با Mongo، نیازی نیست اول دیتابیس و جداول رو مثل سیستم‌های رابطه‌ای تعریف کنی. هر وقت داکیومنتی رو به Mongo اضافه کنی، خودش به صورت خودکار دیتابیس و کالکشن‌ها (معادل جدول توی دیتابیس‌های رابطه‌ای) رو ایجاد می‌کنه.

مثال از یک داکویمنت در MongoDB:

{
  "_id": "60c72b2f9b1e8e0015cfd31a",
  "name": "Product1",
  "price": 100,
  "catego_idlectronics"
}

این داکیومنت شامل یه _id یکتا است که MongoDB خودش به طور خودکار تولید می‌کنه

چرا MongoDB؟

1⃣ انعطاف‌پذیری توی ساختار داده (Schema less)

2⃣ مقیاس پذیری:
مناسب برای پروژه‌های بزرگ

3⃣ سرعت بالا:
سادگی استفاده و خواندن داده‌های حجیم

4⃣ سادگی استفاده:
راحت و بدون درد

جمع بندی 🎯
فهمیدیمMongoDB انتخاب خوبیه برای وقتی که پروژه‌ت نیاز به تغییرات سریع داره، داده‌ها ساختار پیچیده‌ای دارن، یا حجم بالایی از داده‌ها رو باید ذخیره کنی. به همین خاطر کمپانی های بزرگ مثل Uber ،Lyft، eBay از MongoDB استفاده می‌کنن.

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

#mongodb #db #nosql


@ninja_learn_ir
6👍4🔥1
Forwarded from Python BackendHub (Mani)
AioClock
در ماه ۴ هزار دانلود داره 🚀
یک شرکت بزرگ تو برزیل هم داره ازش استفاده میکنه و تو لینکدین ازم تشکر کردن خیلی حس خوبی داشت :))

واقعا دوست دارم فول تایم اوپن سورس کار کنم. و مثلا همین پروژه naked sqlalchemy ام حاصله دو شب کار بود.
ولی متاسفانه هنوز به نقطه ای نرسیدم که بتونم کسب درآمد کنم از پروژه اوپن سورسم
برای همین به حمایتتون نیاز دارم این حمایت میتونه یک استار گیت هاب باشه, که پروژه هام بیشتر دیده شه و به اون نقطه نزدیک تر شم 🫶

فریم ورک/لایبری های مفید اوپن سورسی که تاحالا منتشر کردم:

AioClock - A modern python scheduling framework with dependency injection and modular integration support. Alternative for Rocketry or apscheduler

Naked SQLA - A simple and lightweight object mapper around SQLAlchemy core, simple alternative to SQLAlchemy ORM.


CfCrawler - Cloudflare scraper and cralwer written in Async, In-place library for HTTPX. Crawl website that has cloudflare enabled, easier than ever!

@PyBackendHub
🔥8👍3
👌این عکسو دادم به ربات هوشیفای گفتم متن های عکس رو بده. نتیجه:

ترجمه متن‌های موجود در عکس به شرح زیر است:

بالا:
"تمام زیرساخت‌های دیجیتال مدرن"

پایین:
"یک پروژه که یک فرد تصادفی در نبراسکا از سال 2003 به طور بی‌منت نگهداری کرده است"

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

لینک ربات هم نمیدم
👍4
سوال جنگویی

این ویو (تصویر سفید) رو دارم. و میخوام class-based ش کنم. و صفحه بندی یا pagination هم داشته باشه.

تصمیم می گیرم از ListView ارث بری کنم (تصویر سیاه)

حالا با توجه به اینکه صفحه بندی رو میخوام و میخوام کمترین و مفهوم ترین کد رو بنویسم. چکار کنم؟
1
Forwarded from Python Hints
از صبح داشتم یک پروژه رو review می‌کردم که بنا به مشکلات از یک فریمورک به فریمورک دیگه جابجا شده؛ اما بعد از جابجایی یک سری بخش‌های پروژه باگ داره و من وارد شدم برای کد ریویو (امروز صبح روز اول کارم بود)

دسترسی به کدهای قدیمی هم گرفتم، می‌بینم تست نویسی برای این باگ تو زبان و فریمورک قبلی انجام شده ولی این سمت توی تست‌ها نیست !

بنظرتون مشکل از کجاست ؟

مدیرفنی یا تیم‌لید بکند.

یک درس بزرگی که حتی قبل از ورود به دنیای بکند و بخاطر عادت به سورس کد خوندن گرفتم این بود که
Intégration test
اولویت بالاتری داره از
Unit test
واقعیت هم همین هست، unit test برای راحتی خودمون و دولوپر بعدی هست و intégration test برای راحتی و بدون باگ بودن استفاده‌های client

خیلی تیم‌ها (ایرانی و خارجی) که intégration test نمی‌نویسند متاسفانه ولی اون‌هایی هم که می‌نویسند مثل کدهای امروز من دقیقاً از آنچه که فریمورک ارائه میده استفاده می‌کنند.


این کاملاً خطا هست، برای مدیر فنی ٫ تیم‌ لید منظورم هست. الان سوالتون اینه که چرا ؟

توی این پروژه اگر intégration test ها میومد سرور رو روی یک thread جدا اجرا می‌کرد و بعد با استفاده از پکیج دیگری مثل requests درخواست می‌زد به api هاش بنظرتون بهتر نمی‌شد ؟

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

وقتی دارم از بیرون به سیستم نگاه می‌کنم برام چه فرقی داره که چه زبان برنامه‌نویسی یا چه فریمورکی استفاده شده؛ همونطور که برای یوزر من فرقی نداره.

خواستم بگم حواستون به این نکته باشه، intégration test باید جوری باشه که فارغ از فریمورک و زبان قابل اجرا باشه.

متاسفانه کدهای جدید این تیم هم این خطا رو داره و باز وابسته شده به فریمورک
👍11
Forwarded from Python BackendHub
با این اپلیکیشن دقیقا میتونید متوجه شین که چه اتفاقی داره میفته.
مثلا یک برنامه دارین (پایتونی یا هرچی) و هر درخواستی که از سیستم عاملتون رد شه چه HTTP باشه چه HTTPS رو کامل capture میکنه و به صورت plain خیلی تمیز بهتون نشون میده.
👍6
سوال جنگویی

اگه توی ListView مقدار اتریبیوت ع allow_empty رو برابر False کنیم.

چی میشه؟


بیخیال ChatGPT و امثالهم...

آپدیت:
جوابش اینه
با این تنظیم اگه لیست خالی باشه خطای 404 میده
👍2
سوال پایتونی

این کد رو اجرا کنیم، نتیجه ش چی میشه؟

اعتراف می کنم خودم نمی دونستم.
👍4
سوال پایتونی

آیا روشی که توی خط 8 متد super رو صدا زدیم درست است؟

این کد ارور میده؟
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🔸 مفهوم Comprehensions قطعه کدهایی قدرتمند در پایتون (معرفی)

🙋🏽‍♂️ خیلی وقت‌ها کدهای افراد باتجربه توی پایتونو نگاه می‌کنیم می‌بینم که برای ایجاد sequence؛ لیست، دیکشنری، سِت، از یه روش خاصی استفاده می‌کنند که کدشون بهینه‌تر، خواناتر و خلاصه‌تر می‌شه! اسم این روش comprehension هست!


🔸 ما توی دوره صفر تا قهرمانیِ پایتون از آیزی‌لرن یاد می‌گیریم چطور انواع comprehensions رو با مثال توی کدهامون پیاده‌سازی کنیم.

--------------------
🔗 وب‎‌سایت : آیزی‌لرن
👍3🔥21
💎 عملیات‌های IO Bound و CPU Bound در جنگو 💎

امروز می‌خوایم درباره عملیات‌های IO Bound و CPU Bound صحبت کنیم و اینکه این دو نوع عملیات چطور روی عملکرد اپلیکیشن‌های جنگو تاثیر میذاره.

حالا IO Bound چیه؟ 🤔
عملیات‌های IO Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف ورود و خروج داده‌ها میشه. مثلاً وقتی داریم با دیتابیس، فایل‌ها یا شبکه کار می‌کنیم. این نوع عملیات معمولاً منتظر میمونن تا داده‌ها از دیسک یا شبکه بیاد.

مثال‌هایی از IO Bound:
- خوندن و نوشتن در دیتابیس
- ارسال یا دریافت داده‌ها از API
- بارگذاری فایل‌ها

حالا CPU Bound چیه؟ 🧠
عملیات‌های CPU Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف محاسبات سنگین میشه. یعنی برای پردازش و محاسبات نیاز به قدرت پردازشی بالا دارن. در اینجا عملکرد CPU نقش کلیدی رو ایفا می‌کنه.

مثال‌هایی از CPU Bound:
- پردازش تصاویر و ویدئوها
- انجام محاسبات ریاضی پیچیده
- اجرای الگوریتم‌های پیچیده

تفاوت‌های اصلی بین IO Bound و CPU Bound 🔍
1⃣ مدت زمان انتظار:
-عملیات های IO Bound معمولاً منتظر ورود و خروج داده‌ها هستن و زمان زیادی رو صرف این کار می‌کنن.

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

2⃣ تکنیک‌های بهینه‌سازی:
- برای عملیات‌های IO Bound می‌تونی از Async و Threading استفاده کنی تا زمان انتظار رو کاهش بدی.

- برای CPU Bound باید به سراغ Multiprocessing بری تا بتونی از چند هسته CPU به طور همزمان استفاده کنی.

چطور در جنگو با اینها کار کنیم؟ 🚀
- برای IO Bound:
می‌تونی از async و await استفاده کنی تا درخواست‌ها به صورت غیر همزمان انجام بشن و سرعت اپلیکیشن بالا بره.

- برای CPU Bound:
می‌تونی از ماژول concurrent.futures و ProcessPoolExecutor استفاده کنی تا کارهای سنگین رو در چند پروسه اجرا کنی.

جمع‌بندی 🎯
درک تفاوت‌های بین IO Bound و CPU Bound می‌تونه بهت کمک کنه تا اپلیکیشن‌های جنگو رو بهتر بهینه‌سازی کنی. اگه عملیات‌های IO Bound داری، از async استفاده کن و اگر CPU Bound هستن، برو سراغ multiprocessing.

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

#iobound #cpubound #python #django


@ninja_learn_ir
👍18👎1