Forwarded from TorhamDev | تورهام 😳
آپدیت کردن چند آبجکت به صورت همزمان در #جنگو
فریمورک #django قابلیت آپدیت کردن دیتاها رو به روش ها مختلف داره که خیلی ها یا ازش بی خبر ان یا استفاده نمیکنن. بیایید ببینیم هر کدوم رو کجا استفاده کنی بهتره :)
مدل فرضی:
خب فرض کنید ما یک هدیه به مناسب عید نو روز میخواییم به کاربرا بدیم، مثلا میخاییم نفری ۲ هزار تومن هدیه بدیم D:
حالا چند روش وجود داره.
روش اول ( نوب):
خیلی ساده و البته درب و داغون در خیلی جهات. مشکل اول اینه که ما رو همه کاربرا حلقه میزنیم و هر بار آپدیت رو روی کاربرا صدا میزنیم یعنی برای هر یوزر یک درخواست اپدیت به دیتابیس میره که اگه ۱ میلیون یوزر داشته باشیم ۱ میلیون درخواست میره :).
( تو اینه پست به اینکه باید از F استفاده کنید یا کانکارنسی و اینا هندل کنید اشاره نمیکنم، پستها قبلی بخونید)
حالا روش بهتر چیه؟
روش بهتر:
همینقدر ساده :)
سناریو دوم: با بکاند یک بازی خفن رو داریم توسعه میدیم، داخل این بازی هر هفته یک ایونت اتفاق میوفته که افرادی که اون رو تموم کنن در آخر هفته یک تایتل به کنار اسمشون اضافه میشه و همچنین اگه امتیاز بالاتر از ۱۰ کسب کرده باشن به بالانس پول داخل گیمشون هم ۱۰۰ تا گلد اضافه میشه.
حالا بیایید فقط کوئری آپدیت این بهش ببینیم، فرض کنید این کوئری آخر هفته اجرا میشه. ( این فیلدا تو مدل فرض نداریم دیگه خودتون فرض کنید هست 😂❤️)
خب همینطور که خیلی معلومه مشکلات فراوان داخلش هست. بزرگترین مشکلش اینه که هر بار برای هر کاربر یک درخواست آپدیت میدیم که میشهه همون مشکل بالا، آما آیا این بار میشه از روش بالا استفاده کرد و اینو فیکسش کرد؟ نه
روش بالا زمانی کاربرد داره که فیلدها قراره یک مقداری ثابتی به همشون داده بشه، اینجا بعضی ها ۱۰۰ تا گلد میگیرن بعضی ها نه پس کار نمیکنه، اینجا ما میتونیم از فانکشن bulk_update جنگو استفاده کنیم.
همون حلقه بالا رو میزنید با این تفاوت که داخلش .save رو صدا نمیزنید و تمام آبجکتها رو داخل مموری آپدیت میکنید و بعد همچین حرکتی میزنید:
و تموم همرو با هم آپدیت میکنید با یک درخواست اینجا حتی میتونید یک قدم جلوتر برید و با اضافه کردن updated_fields به ورودی فانشکن و مشخص کردن اینکه دقیقا دوتا فیلد بالانس و نام فقط قرار آپدیت بشه بهترش کنید!
از این به بعد بهتر آپدیت کنید :)
@TorhamDevCH
فریمورک #django قابلیت آپدیت کردن دیتاها رو به روش ها مختلف داره که خیلی ها یا ازش بی خبر ان یا استفاده نمیکنن. بیایید ببینیم هر کدوم رو کجا استفاده کنی بهتره :)
مدل فرضی:
class Records(models.Model):
name = models.Charfield()
balance = models.InetegerField()
country =models.CharField()
خب فرض کنید ما یک هدیه به مناسب عید نو روز میخواییم به کاربرا بدیم، مثلا میخاییم نفری ۲ هزار تومن هدیه بدیم D:
حالا چند روش وجود داره.
روش اول ( نوب):
users = Records.objects.all()
for user in users:
user.balanc = user.balance + 2
user.save()
خیلی ساده و البته درب و داغون در خیلی جهات. مشکل اول اینه که ما رو همه کاربرا حلقه میزنیم و هر بار آپدیت رو روی کاربرا صدا میزنیم یعنی برای هر یوزر یک درخواست اپدیت به دیتابیس میره که اگه ۱ میلیون یوزر داشته باشیم ۱ میلیون درخواست میره :).
( تو اینه پست به اینکه باید از F استفاده کنید یا کانکارنسی و اینا هندل کنید اشاره نمیکنم، پستها قبلی بخونید)
حالا روش بهتر چیه؟
روش بهتر:
user = Records.objects.update(balance=F("balance") + 2 )
همینقدر ساده :)
سناریو دوم: با بکاند یک بازی خفن رو داریم توسعه میدیم، داخل این بازی هر هفته یک ایونت اتفاق میوفته که افرادی که اون رو تموم کنن در آخر هفته یک تایتل به کنار اسمشون اضافه میشه و همچنین اگه امتیاز بالاتر از ۱۰ کسب کرده باشن به بالانس پول داخل گیمشون هم ۱۰۰ تا گلد اضافه میشه.
حالا بیایید فقط کوئری آپدیت این بهش ببینیم، فرض کنید این کوئری آخر هفته اجرا میشه. ( این فیلدا تو مدل فرض نداریم دیگه خودتون فرض کنید هست 😂❤️)
users = Records objects.fileter(done_weekly=True)
for user in users:
user.name = "Grunt " + user.name
if user.weekly_score >= 10:
user.balance = user.balance + 100
user.save()
خب همینطور که خیلی معلومه مشکلات فراوان داخلش هست. بزرگترین مشکلش اینه که هر بار برای هر کاربر یک درخواست آپدیت میدیم که میشهه همون مشکل بالا، آما آیا این بار میشه از روش بالا استفاده کرد و اینو فیکسش کرد؟ نه
روش بالا زمانی کاربرد داره که فیلدها قراره یک مقداری ثابتی به همشون داده بشه، اینجا بعضی ها ۱۰۰ تا گلد میگیرن بعضی ها نه پس کار نمیکنه، اینجا ما میتونیم از فانکشن bulk_update جنگو استفاده کنیم.
همون حلقه بالا رو میزنید با این تفاوت که داخلش .save رو صدا نمیزنید و تمام آبجکتها رو داخل مموری آپدیت میکنید و بعد همچین حرکتی میزنید:
Records.objects.bulk_update(updated_users_list)
و تموم همرو با هم آپدیت میکنید با یک درخواست اینجا حتی میتونید یک قدم جلوتر برید و با اضافه کردن updated_fields به ورودی فانشکن و مشخص کردن اینکه دقیقا دوتا فیلد بالانس و نام فقط قرار آپدیت بشه بهترش کنید!
از این به بعد بهتر آپدیت کنید :)
@TorhamDevCH
👍13
Forwarded from نوشتههای ترمینالی
اگه هنوز سراغ این کتاب ۹۷ چیز که باید هر برنامهنویسی بدونه، نرفتید یه چند تا موردش که جالب بود برام رو میذارم شاید علاقهمند شدین:
در مورد ۹ام، میگه که وقتی یه مشکلی وجود داره در نظر بگیرید که اون مشکل توی کد شماست نه سیستمعامل و کامپایلر. اگرچه کامپایلر و سیستمعامل و کتابخونه هم ممکنه باگ داشته باشن ولی اونا رو هزاران نفر دیگه هم استفاده میکنن و خیلی بعیده باگ شناختهنشدهای داشته باشن در حالی که کد خودتون رو احتمالا تازه نوشتین و کاربرای کمتری هم داره.
https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/en/thing_09
مورد ۴۳ام میگه که استفاده از IDE بد نیست، اما یاد بگیرید در کنارش از ابزارهای cli برای کارهاتون مثل کامپایل کردن کد استفاده کنید.
https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/en/thing_43
مورد ۶۲ام میگه که تنها چیزی که میتونید بهش اعتماد کنید راست بگه خود کده، چون داکیومنت ممکنه قدیمی باشه یا دقیق نباشه و دقیقا اتفاقی که میافته رو توضیح نده.
https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/en/thing_62
توی مورد ۴۲ام هم کیگه که سعی کنید کامپایلر رو خوشحال کنید، یعنی به warningها در زودترین زمان ممکن رسیدگی کنید.
https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/en/thing_42
در مورد ۹ام، میگه که وقتی یه مشکلی وجود داره در نظر بگیرید که اون مشکل توی کد شماست نه سیستمعامل و کامپایلر. اگرچه کامپایلر و سیستمعامل و کتابخونه هم ممکنه باگ داشته باشن ولی اونا رو هزاران نفر دیگه هم استفاده میکنن و خیلی بعیده باگ شناختهنشدهای داشته باشن در حالی که کد خودتون رو احتمالا تازه نوشتین و کاربرای کمتری هم داره.
https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/en/thing_09
مورد ۴۳ام میگه که استفاده از IDE بد نیست، اما یاد بگیرید در کنارش از ابزارهای cli برای کارهاتون مثل کامپایل کردن کد استفاده کنید.
https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/en/thing_43
مورد ۶۲ام میگه که تنها چیزی که میتونید بهش اعتماد کنید راست بگه خود کده، چون داکیومنت ممکنه قدیمی باشه یا دقیق نباشه و دقیقا اتفاقی که میافته رو توضیح نده.
https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/en/thing_62
توی مورد ۴۲ام هم کیگه که سعی کنید کامپایلر رو خوشحال کنید، یعنی به warningها در زودترین زمان ممکن رسیدگی کنید.
https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/en/thing_42
97-things-every-x-should-know.gitbook.io
Check Your Code First before Looking to Blame Others | 97 Things Every Programmer Should Know
👍9❤1
Forwarded from محمد لرنینگ (آموزش برنامه نویسی)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
✅دوره غیر رایگان ساخت فروشگاه اینترنتی با جنگو آپدیت شد.
قسمت های زیر اضافه شدند:
فصل هفتم
✔️ریفکتور کدهای پرداخت
فصل هشتم
✔️فرم ورود با رمز عبور
✔️فرم ثبت نام کاربر
✔️آماده سازی ارسال ایمیل فعالسازی
✔️تولید توکن فعالسازی ایمیل
✔️فعالسازی حساب کاربر
✔️آماده سازی ورود با موبایل
✔️ورود موفق با کد یکبار مصرف
چند قسمت از این دوره رو اینجا ببینید:
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/808
لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
قسمت های زیر اضافه شدند:
فصل هفتم
✔️ریفکتور کدهای پرداخت
فصل هشتم
✔️فرم ورود با رمز عبور
✔️فرم ثبت نام کاربر
✔️آماده سازی ارسال ایمیل فعالسازی
✔️تولید توکن فعالسازی ایمیل
✔️فعالسازی حساب کاربر
✔️آماده سازی ورود با موبایل
✔️ورود موفق با کد یکبار مصرف
چند قسمت از این دوره رو اینجا ببینید:
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/808
لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
❤1
Media is too big
VIEW IN TELEGRAM
✅نکاتی در مورد دلیل استفاده از authentication backends در جنگو
توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️مشکل لاگین نشدن کاربران جدید
✔️روش استفاده از get or create در جنگو
✔️بررسی مشکل منقضی نشدن کد یکبار مصرف بعد از ورود موفق
✔️بررسی مشکل مشخص نبودن تاریخ انقضای OTP
✔️درک نیاز به authentication backends در جنگو
لینک آپارات:
https://www.aparat.com/v/tizv220
توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️مشکل لاگین نشدن کاربران جدید
✔️روش استفاده از get or create در جنگو
✔️بررسی مشکل منقضی نشدن کد یکبار مصرف بعد از ورود موفق
✔️بررسی مشکل مشخص نبودن تاریخ انقضای OTP
✔️درک نیاز به authentication backends در جنگو
لینک آپارات:
https://www.aparat.com/v/tizv220
❤2👍2
✅ماک اینترویو با بابی
از کانال @BenDevelop
مصاحبه فنی پوزیشن Senior Python/rust cloud engineer
مصاحبه پر از مفاهیمی برای یادگیری بود.
این بخش های ویدئو به نظرم جالب بود:
✔️مفاهیم تست
https://youtu.be/FmYbGSyY0XM?t=673
✔️سناریو چهارم (در مورد Down شدن سایت):
https://youtu.be/FmYbGSyY0XM?t=2892
✔️مساله پایتونی اول (در مورد priority queues):
https://youtu.be/FmYbGSyY0XM?t=3975
✔️مساله پایتونی دوم (اجرای اتوماتیک اسکریپت ها از یک فولدر خاص):
https://youtu.be/FmYbGSyY0XM?t=4714
از کانال @BenDevelop
مصاحبه فنی پوزیشن Senior Python/rust cloud engineer
مصاحبه پر از مفاهیمی برای یادگیری بود.
این بخش های ویدئو به نظرم جالب بود:
✔️مفاهیم تست
https://youtu.be/FmYbGSyY0XM?t=673
✔️سناریو چهارم (در مورد Down شدن سایت):
https://youtu.be/FmYbGSyY0XM?t=2892
✔️مساله پایتونی اول (در مورد priority queues):
https://youtu.be/FmYbGSyY0XM?t=3975
✔️مساله پایتونی دوم (اجرای اتوماتیک اسکریپت ها از یک فولدر خاص):
https://youtu.be/FmYbGSyY0XM?t=4714
✅یه نکته امنیتی در جنگو
این کد ModelBackend دیفالت جنگو هست (برای authenticate و در ادامه اش لاگین کردن). قبل از اینکه توضیحات پایین رو ببینید. به نظرتون دلیل نوشتن خط 50 چی بوده؟ البته کامنت هاش گفته چرا این کارو کرده و اون شماره 20760 شماره تیکت ش توی سایت جنگو هست.
اگه جنگو این کد رو نمی نوشت، Attacker می تونست متوجه بشه یوزری که وارد کرده توی دیتابیس هست یا نه. اما این کد پسورد وارد شده رو hash میکنه تا پاسخ به کلاینت هم اندازه وقتی بشه که یوزر وجود داره و پسوردش بررسی میشه.
لینک تیکت:
https://code.djangoproject.com/ticket/20760
این کد ModelBackend دیفالت جنگو هست (برای authenticate و در ادامه اش لاگین کردن). قبل از اینکه توضیحات پایین رو ببینید. به نظرتون دلیل نوشتن خط 50 چی بوده؟ البته کامنت هاش گفته چرا این کارو کرده و اون شماره 20760 شماره تیکت ش توی سایت جنگو هست.
لینک تیکت:
https://code.djangoproject.com/ticket/20760
👍18👏1
Forwarded from محمد لرنینگ (آموزش برنامه نویسی)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
✅دوره غیر رایگان ساخت فروشگاه اینترنتی با جنگو آپدیت شد.
🤫اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.
قسمت های زیر اضافه شدند:
فصل هشتم
✔️بررسی مشکلات کد ورود یکبار مصرف
✔️ورود با ایمیل و رمز عبور
✔️تکمیل ورود با موبایل و کد یکبار مصرف
چند قسمت از این دوره رو اینجا ببینید:
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/808
لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
🤫اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.
قسمت های زیر اضافه شدند:
فصل هشتم
✔️بررسی مشکلات کد ورود یکبار مصرف
✔️ورود با ایمیل و رمز عبور
✔️تکمیل ورود با موبایل و کد یکبار مصرف
چند قسمت از این دوره رو اینجا ببینید:
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/808
لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
👍3
Forwarded from Django Expert (Boby Cloud)
✔️ در طی چند سال گذشته از فعالیت کانال، محتواهای رایگان زیادی تولید شده و هدف کانال هم از ابتدا اشتراک دانش رایگان و عام المنفعه بوده، برای همین تصمیم گرفتیم یک بار دیگه تمام این محتواهارو در یک پیام قرار بدیم تا به راحتی قابل دسترسی برای افراد علاقمند به یادگیری باشه:
✅🎥 کانال یوتوب سیلیسیم مهران تعریف (آموزش پایتون و جاوااسکریپت و...)
https://www.youtube.com/@Silicium7
✅🎥 کانال یوتوب میکروفرانت اند (آموزش پایتون و جاواسکریپت و ...)
https://www.youtube.com/@MicroFrontend
✅🎥 کانال یوتوب بابی کلاد (آموزش پایتون، کلاد، دوآپس و ...)
https://www.youtube.com/@bobycloud
✅🎥 کانال یوتوب امیر مطهری (آموزش پایتون، میکروپایتون و ...)
https://www.youtube.com/@AmirMotahari
✅🎥 کانال یوتوب گیت اور هیر مانی (آموزش پایتون، دیزاین پترن و ...)
https://www.youtube.com/@GitOverHere
✅🎥 کانال یوتوب تورهام (آموزش پایتون، فست ای پی آی و ...)
https://www.youtube.com/@techwithtori
✅🎥 کانال یوتوب شهریار شریعتی (آموزش سلری، جنگو چنلز، وب فریمورک ها و ...)
https://www.youtube.com/@ShahriarShariati
✅🎥 کانال یوتوب دوآپس هابیز (آموزش امیربهادر - دوره پروژه محور جنگو به همراه داکر، سی آی سی دی و ...)
https://www.youtube.com/watch?v=KtYDIJN3wmM&list=PLYrn63eEqAzY5uG5ks_OquWcojzHvhp9Z
✅🔥 سه فایل مصاحبه با آقای حسن رمضانی که از Core Developer های Django, Gunicorn, Pydantic, Urllib3 و ... هستند در کانال موجود هست که با سرچ کردن اسم آقای "حسن رمضانی" در کانال میتونید مصاحبه هارو پیدا کنید و گوش بدید.
✅📚 ریپازیتوری گیتهاب Awesome Python Resources: مجموعه ای از بهترین و کامل ترین ریسورسهای مورد نیاز برای رشد در مسیر شغلی مهندسی نرم افزار (پایتون) به همراه تفکیک بر اساس Career Path و Advanced Topics
https://github.com/DjangoEx/awesome-python-resources
✅📚 ریپازیتوری گیتهاب Awesome Python Roadmaps: مجموعه از رودمپهای مورد نیاز یک مهندس نرم افزار (پایتون) در Career Path هایی نظیر Backend، Data Scientist، Software Architect و ...
https://github.com/DjangoEx/awesome-python-roadmaps
✅📚 تمام ریپازیتوریها به صورت یکجا نیز در صفحه گیتهاب DjangoEx قابل دسترسی هست
https://github.com/DjangoEx
✅ تمام این موارد آموزشی رایگان هستند و میتونید ازشون استفاده کنید.
✅ موقت: اگر مطلبی رو یادم رفته بزارم و قبلا توی کانال تولید محتوا داشتند لطفا به من (@BobyCloud) پیام بدید.
#رودمپ #پایتون #جنگو #منابع #از_کجا_شروع_کنیم
〰️〰️〰️〰️〰️〰️
© @DjangoEx
✅🎥 کانال یوتوب سیلیسیم مهران تعریف (آموزش پایتون و جاوااسکریپت و...)
https://www.youtube.com/@Silicium7
✅🎥 کانال یوتوب میکروفرانت اند (آموزش پایتون و جاواسکریپت و ...)
https://www.youtube.com/@MicroFrontend
✅🎥 کانال یوتوب بابی کلاد (آموزش پایتون، کلاد، دوآپس و ...)
https://www.youtube.com/@bobycloud
✅🎥 کانال یوتوب امیر مطهری (آموزش پایتون، میکروپایتون و ...)
https://www.youtube.com/@AmirMotahari
✅🎥 کانال یوتوب گیت اور هیر مانی (آموزش پایتون، دیزاین پترن و ...)
https://www.youtube.com/@GitOverHere
✅🎥 کانال یوتوب تورهام (آموزش پایتون، فست ای پی آی و ...)
https://www.youtube.com/@techwithtori
✅🎥 کانال یوتوب شهریار شریعتی (آموزش سلری، جنگو چنلز، وب فریمورک ها و ...)
https://www.youtube.com/@ShahriarShariati
✅🎥 کانال یوتوب دوآپس هابیز (آموزش امیربهادر - دوره پروژه محور جنگو به همراه داکر، سی آی سی دی و ...)
https://www.youtube.com/watch?v=KtYDIJN3wmM&list=PLYrn63eEqAzY5uG5ks_OquWcojzHvhp9Z
✅🔥 سه فایل مصاحبه با آقای حسن رمضانی که از Core Developer های Django, Gunicorn, Pydantic, Urllib3 و ... هستند در کانال موجود هست که با سرچ کردن اسم آقای "حسن رمضانی" در کانال میتونید مصاحبه هارو پیدا کنید و گوش بدید.
✅📚 ریپازیتوری گیتهاب Awesome Python Resources: مجموعه ای از بهترین و کامل ترین ریسورسهای مورد نیاز برای رشد در مسیر شغلی مهندسی نرم افزار (پایتون) به همراه تفکیک بر اساس Career Path و Advanced Topics
https://github.com/DjangoEx/awesome-python-resources
✅📚 ریپازیتوری گیتهاب Awesome Python Roadmaps: مجموعه از رودمپهای مورد نیاز یک مهندس نرم افزار (پایتون) در Career Path هایی نظیر Backend، Data Scientist، Software Architect و ...
https://github.com/DjangoEx/awesome-python-roadmaps
✅📚 تمام ریپازیتوریها به صورت یکجا نیز در صفحه گیتهاب DjangoEx قابل دسترسی هست
https://github.com/DjangoEx
✅ تمام این موارد آموزشی رایگان هستند و میتونید ازشون استفاده کنید.
✅ موقت: اگر مطلبی رو یادم رفته بزارم و قبلا توی کانال تولید محتوا داشتند لطفا به من (@BobyCloud) پیام بدید.
#رودمپ #پایتون #جنگو #منابع #از_کجا_شروع_کنیم
〰️〰️〰️〰️〰️〰️
© @DjangoEx
👍4
✅این رپو یک منبع hands-on برای یادگیری برنامه نویسی async در پایتون هست
فرقی نداره که هر مسیری رو در برنامه نویسی با پایتون انتخاب کرده باشین (بک اند، دیتا، ماشین لرنینگ و ...) این روزا asyncio جزو ملزومات هست.
مطالبی که کاور کردیم، شامل مطالب مقدماتی تا پیشرفتهس که با احتمال زیاد مطالب جدید و مفیدی (با هر سطح دانشی) میتونید پیدا کنین. از لینک های مرجع زیادی در این رپو استفاده شده (مثلا داکیومنت های آفیشیال پایتون، سایت superfastpython و ...) که باعث عمیق شدن یادگیری میشن. همچنین از آخرین ورژن پایتون استفاده شده و آپدیت بودن اطلاعات این رپو، برامون مهم هست.
ممنون میشم اگه براتون مفید بود، استار بدین و برای تکمیل یا بهتر شدنش مشارکت کنین.
https://github.com/aligheshlaghi97/asynchronous-python
فرقی نداره که هر مسیری رو در برنامه نویسی با پایتون انتخاب کرده باشین (بک اند، دیتا، ماشین لرنینگ و ...) این روزا asyncio جزو ملزومات هست.
مطالبی که کاور کردیم، شامل مطالب مقدماتی تا پیشرفتهس که با احتمال زیاد مطالب جدید و مفیدی (با هر سطح دانشی) میتونید پیدا کنین. از لینک های مرجع زیادی در این رپو استفاده شده (مثلا داکیومنت های آفیشیال پایتون، سایت superfastpython و ...) که باعث عمیق شدن یادگیری میشن. همچنین از آخرین ورژن پایتون استفاده شده و آپدیت بودن اطلاعات این رپو، برامون مهم هست.
ممنون میشم اگه براتون مفید بود، استار بدین و برای تکمیل یا بهتر شدنش مشارکت کنین.
https://github.com/aligheshlaghi97/asynchronous-python
🔥6👍2
Forwarded from Python BackendHub (Mani)
چیزی که من متعجب شدم اکثرا میگن این <خیلی پیچیدست>. ولی حقیقتا اصلا پیچیده نیست. کامیونیتی پایتون خیلی گارد زیادی نسبت به تایپینگ داره که تو دراز مدت قطعا ضربه میخورین چون پایتون الان هر نسخه ریلیز میده ۸۰ درصدش تایپینگ improvement هست و شما اگه الان typing بلد نباشین عملا از خیلی از لایبری های جدید نمیتونید استفاده کنید.
تو این مثال حتی یک خط نشده. و شما اینکار رو برای آیدی ها انجام میدی. تو یک سرویس پرحجم که شما ۲۰۰ تیبل داری نهایتا میشه ۲۰۰ خط NewType. و باعث میشه signature همه کد های شما قابل خوانا باشه.
این tip به درد شما میخوره اگه کد میزنی. لزوما به بک اند هیچ ربطی نداره. الان شما یک تابع بنویسید که یک سریآیدی موزیک و آیدی یوزر بگیره و بعد بگه برای هر موزیک هر یوزر پیش بینی کنه از صفر تا صد چقدر ممکنه دوست داشته باشه
این ۳ مثال رو ببینید, مثال اول تایپینگ خوبی داره. مثال دوم تایپینگ داره ولی به درد بخور نیست خیلی. و مثال سوم تایپینگ نداره.
من میتونم بدونه اینکه کدو ببینم از فانکشن اولی استفاده کنم. فانکشن دومی معلوم نیست چی به چی لینک شده. پس باید حواسم باشه موقع استفاده ازش. و بعدا ریفکتورش هم کردم باید ۱۰۰درصد حواسم باشه signature اش تغییر نکنه. و فانکشن سوم که کلا فاجعست. اصلا maintainable نیست. قضاوت رو میذارم با خودتون.
@PyBackendHub
تو این مثال حتی یک خط نشده. و شما اینکار رو برای آیدی ها انجام میدی. تو یک سرویس پرحجم که شما ۲۰۰ تیبل داری نهایتا میشه ۲۰۰ خط NewType. و باعث میشه signature همه کد های شما قابل خوانا باشه.
این tip به درد شما میخوره اگه کد میزنی. لزوما به بک اند هیچ ربطی نداره. الان شما یک تابع بنویسید که یک سریآیدی موزیک و آیدی یوزر بگیره و بعد بگه برای هر موزیک هر یوزر پیش بینی کنه از صفر تا صد چقدر ممکنه دوست داشته باشه
این ۳ مثال رو ببینید, مثال اول تایپینگ خوبی داره. مثال دوم تایپینگ داره ولی به درد بخور نیست خیلی. و مثال سوم تایپینگ نداره.
# WITH GOOD TYPING
Percentage: TypeAlias = int # from 0 to 100.
def calculate_music_populatiry(person_ids: list[PersonId], music_ids: list[MusicId]) -> dict[PersonId, list[tuple[Bookid, Percentage]]
# WITH BAD TYPING
def calculate_music_populatiry(person_ids: list[UUID], music_ids: list[UUID]) -> dict[UUID, list[tuple[UUID, int]]
# WITHOUT TYPING
def calculate_music_populatiry(person_ids, music_ids)
من میتونم بدونه اینکه کدو ببینم از فانکشن اولی استفاده کنم. فانکشن دومی معلوم نیست چی به چی لینک شده. پس باید حواسم باشه موقع استفاده ازش. و بعدا ریفکتورش هم کردم باید ۱۰۰درصد حواسم باشه signature اش تغییر نکنه. و فانکشن سوم که کلا فاجعست. اصلا maintainable نیست. قضاوت رو میذارم با خودتون.
@PyBackendHub
👍6
Media is too big
VIEW IN TELEGRAM
✅توضیحاتی در مورد پکیج django-allauth
توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️روش نصب django-allauth
✔️چرا از این پکیج استفاده کردیم
✔️اگر بخواهیم خودمان لاگین با گوگل رو بنویسیم چه چیزهایی باید بدونیم
✔️تنظیمات این پکیج
✔️قابلیت های این پکیج
لینک آپارات:
https://aparat.com/v/tpt8277
لینک یوتیوب:
https://youtu.be/akX6ZRfOogU
چند قسمت دیگه از این دوره رو اینجا ببینید:
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://www.daneshjooyar.com/project-django/
توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️روش نصب django-allauth
✔️چرا از این پکیج استفاده کردیم
✔️اگر بخواهیم خودمان لاگین با گوگل رو بنویسیم چه چیزهایی باید بدونیم
✔️تنظیمات این پکیج
✔️قابلیت های این پکیج
لینک آپارات:
https://aparat.com/v/tpt8277
لینک یوتیوب:
https://youtu.be/akX6ZRfOogU
چند قسمت دیگه از این دوره رو اینجا ببینید:
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://www.daneshjooyar.com/project-django/
❤4👏1
Forwarded from محمد لرنینگ (آموزش برنامه نویسی)
.
لینک ویدیوی جلسه ۲۳:
https://youtu.be/SKXTwi4UylU
تو این ویدیو، از بیسیک ترین تا پیشرفته ترین مباحث تایپینگ پایتون صحبت کردیم و در نهایت هم چند مثال از pydantic و کاربرد هاش زدیم. دیدن این ویدیو برای هر برنامه نویسی واجبه
🔔 حتما حتما یوتیوب رو فالو کنید و ویدیو رو لایک کنید و نوتیف رو روشن بزارید 🫶
https://t.me/QaDeveloper
✅ @SEYED_BAX | @MakeDeveloper
لینک ویدیوی جلسه ۲۳:
https://youtu.be/SKXTwi4UylU
تو این ویدیو، از بیسیک ترین تا پیشرفته ترین مباحث تایپینگ پایتون صحبت کردیم و در نهایت هم چند مثال از pydantic و کاربرد هاش زدیم. دیدن این ویدیو برای هر برنامه نویسی واجبه
https://t.me/QaDeveloper
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Forwarded from Ninja Learn | نینجا لرن (Mohammad Eslami)
#پست_جدید
میخوام درمورد یک موضوع خیلی جالب توی جنگو صحبت کنم که اکثرا توش مشکل دارن
خب اون چیه؟
🤓 کش شدن نتیجه کوری ها❗️
میدونستید که جنگو نتیجه کوری هارو کش میکنه؟
حالا این یعنی چی ⁉️
یعنی جنگو فقط یک بار دیتابیس رو هیت میکنه و دیتا رو میگیره و همونو کش میکنه و از دفعه های بعدی تا زمان پایان اجرای تابع فعلی از اون نتیجه کش شده استفاده میکنه
حالا بیاید توضیح بدم.
⭕️ قبلش یه نکته مهم رو بگم: ⭕️
هر چیزی که باعث ایجاد یک QuerySet جدید بشه باعث هیت شدن جدید به دیتابیس خواهد شد.
حالا بریم مثالو ببینیم:
خب تو این کد بنظرتون چند بار دیتابیس توسط جنگو هیت وصدا زده میشه میشه؟
حتما فکرمیکنید ۳ بار نه اینجوری نیست ❗️
اینجا فقط 2 بار داره به دیتابیس هیت میزنه.
1️⃣ توی خط اول ما فقط queryset رو تعریف کردیم. از اونجایی که میدونید کوری ست ها توی جنگو lazy هستن و تا وقتی که صداشون نزنیم اجرا نمیشن.
2️⃣ توی خط دوم ما queryset رو print کردیم و اولین هیتمون به دیتابیس زده میشه ولی یه نکته print نمیره کل رکورد هارو بیاره چون منطقی نیست.
پرینت یک محدودیت داره برای آوردن رکورد ها مثلا اگه شما هزار تا رکورد داشته باشید print کل اون هزار تا رو نمیاره و مثلا ۱۰۰ تاشو میاره دومین نکته اینه که اینجا هیچ کشی اتفاق نمی افته( دلیلشو جلوتر میگم)
3️⃣ توی خط سوم ما میخوایم با if بررسی کنیم کاربری وجود داره یا نه اینجا جنگو میاد کش ر و چک میکنه تا ببینه برای users ریزالتی کش شده یانه
اینجا میبینه هیچ کشی وجود نداره و در نتیجه اینجا دومین هیتمون به دیتابیس میخوره و کل رکورد هارو برمیگردونه و مثل print عمل نمیکنه و نکته بعدی اینه اینجا ریزالت کوری توی رم سرور توسط جنگو کش میشه حالا اینجا جالب میشه😁
توی خط بعدی که یه حلقه زدیم روی users اینجا میاد کش رو چک میکنه و میبینه که ریزالت users کش شده و میاد از اون کش استفاده میکنه و به دیتابیس هیچ کوری نمیزنه و درنتیجه اینجا فقط دوبار به دیتابیس هیت خورده میشه
❓حالا چرا print نتیجش کش نشد؟ ❓
به گفته خود جنگو، جنگو فقط زمانی ریزالت یه queryset رو کش میکنه که اون queryset کامل اجرا بشه. و توی print چون queryset کامل اجرا نمیشه منطقا ریزالتش کش نمیشه
ولی توی if چون queryset کامل اجرا شد ریزالتشم کش شد
برای اثبات این حرفم میتونید چیزایی که کش شده رو ببینید 👇
خروجی این کد هم این خواهد بود:
همونطور که میبینید بعد از اجرا شدن print هیچ ریزالتی کش نشده و کش خالیه چون queryset کامل اجرا نشد.
ولی وقتی if اجرا شد چون queryset کامل اجرا شد ریزالتم کش شد و ازاین به بعد از کش استفاده میکنه.
یه نکته در پایان بگم این کش تا زمانی باقی میمونه که اجرای تابع تموم شه و بعد ازاون توسط garbage collector از مموری سرور پاک میشه جنگو توسط پایتون و پایتون روی سرور اجرا میشه.
توی پستای بعدی درمورد garbage collector بیشتر توضیح میدم
#جنگو #کش_در_جنگو #برنامه_نویسی
@ninja_learn_ir
میخوام درمورد یک موضوع خیلی جالب توی جنگو صحبت کنم که اکثرا توش مشکل دارن
خب اون چیه؟
🤓 کش شدن نتیجه کوری ها❗️
میدونستید که جنگو نتیجه کوری هارو کش میکنه؟
حالا این یعنی چی ⁉️
یعنی جنگو فقط یک بار دیتابیس رو هیت میکنه و دیتا رو میگیره و همونو کش میکنه و از دفعه های بعدی تا زمان پایان اجرای تابع فعلی از اون نتیجه کش شده استفاده میکنه
حالا بیاید توضیح بدم.
⭕️ قبلش یه نکته مهم رو بگم: ⭕️
هر چیزی که باعث ایجاد یک QuerySet جدید بشه باعث هیت شدن جدید به دیتابیس خواهد شد.
حالا بریم مثالو ببینیم:
users = User.objects.all()
print(users)
if users:
for u in users:
print(u)
خب تو این کد بنظرتون چند بار دیتابیس توسط جنگو هیت وصدا زده میشه میشه؟
حتما فکرمیکنید ۳ بار نه اینجوری نیست ❗️
اینجا فقط 2 بار داره به دیتابیس هیت میزنه.
1️⃣ توی خط اول ما فقط queryset رو تعریف کردیم. از اونجایی که میدونید کوری ست ها توی جنگو lazy هستن و تا وقتی که صداشون نزنیم اجرا نمیشن.
2️⃣ توی خط دوم ما queryset رو print کردیم و اولین هیتمون به دیتابیس زده میشه ولی یه نکته print نمیره کل رکورد هارو بیاره چون منطقی نیست.
پرینت یک محدودیت داره برای آوردن رکورد ها مثلا اگه شما هزار تا رکورد داشته باشید print کل اون هزار تا رو نمیاره و مثلا ۱۰۰ تاشو میاره دومین نکته اینه که اینجا هیچ کشی اتفاق نمی افته( دلیلشو جلوتر میگم)
3️⃣ توی خط سوم ما میخوایم با if بررسی کنیم کاربری وجود داره یا نه اینجا جنگو میاد کش ر و چک میکنه تا ببینه برای users ریزالتی کش شده یانه
اینجا میبینه هیچ کشی وجود نداره و در نتیجه اینجا دومین هیتمون به دیتابیس میخوره و کل رکورد هارو برمیگردونه و مثل print عمل نمیکنه و نکته بعدی اینه اینجا ریزالت کوری توی رم سرور توسط جنگو کش میشه حالا اینجا جالب میشه😁
توی خط بعدی که یه حلقه زدیم روی users اینجا میاد کش رو چک میکنه و میبینه که ریزالت users کش شده و میاد از اون کش استفاده میکنه و به دیتابیس هیچ کوری نمیزنه و درنتیجه اینجا فقط دوبار به دیتابیس هیت خورده میشه
❓حالا چرا print نتیجش کش نشد؟ ❓
به گفته خود جنگو، جنگو فقط زمانی ریزالت یه queryset رو کش میکنه که اون queryset کامل اجرا بشه. و توی print چون queryset کامل اجرا نمیشه منطقا ریزالتش کش نمیشه
ولی توی if چون queryset کامل اجرا شد ریزالتشم کش شد
برای اثبات این حرفم میتونید چیزایی که کش شده رو ببینید 👇
users = User.objects.all()
print(users)
print("Cache: ", users._result_cache)
if users:
print("Cache: ", users._result_cache)
for u in users:
print(u)
خروجی این کد هم این خواهد بود:
<QuerySet [<User: mohammad>]>
Cache: None
Cache: [<User: mohammad>]
mohammad
همونطور که میبینید بعد از اجرا شدن print هیچ ریزالتی کش نشده و کش خالیه چون queryset کامل اجرا نشد.
ولی وقتی if اجرا شد چون queryset کامل اجرا شد ریزالتم کش شد و ازاین به بعد از کش استفاده میکنه.
یه نکته در پایان بگم این کش تا زمانی باقی میمونه که اجرای تابع تموم شه و بعد ازاون توسط garbage collector از مموری سرور پاک میشه جنگو توسط پایتون و پایتون روی سرور اجرا میشه.
توی پستای بعدی درمورد garbage collector بیشتر توضیح میدم
#جنگو #کش_در_جنگو #برنامه_نویسی
@ninja_learn_ir
👍11
✅موقعیت کاری مشتی
از لینکدین Babak Doraniarab
ببین من با علی آقا صحبت کردم
نیرو جنگو میخوان که میدلول باشه و برای این سطح دارن حقوق خوبی میدن اینقدر هم خودش آدم مشتی آب بود که میگفت داکر ندوسنت هم اکیه خودم کمک میکنم یاد بگیره
این نشون میده مدیر خوبیه
لطفا بالای دوسال تجربه اگر دارین ایمیل بزنین
و اگر تازه نفس هستین این پوزیشن حداقل دو سالی تجربه سابقه کار میخواد و ممنون میشم اپلای نکنی اگر تازه نفسی
بزودی موقعیت تازه نفس هم پیدا میکنم میارم.
اینجا اپلای کن به ایشون پیام بدین Ali Esmaeili
متن پیام ایشون که شرح شغله:
ببین واقعا همون
Python
Django
Rest framework
PostgreSQL
Rabbitmq
Redis
Celery
git
برامون کافیه.
حالا طبیعتاً هر چیز دیگری اضافهتر از اینها باشه مزیت حساب میشه.
ولی من انتظار بالایی ندارم، مثلا داکر رو اگه بلد نیست میاد در حد نیازش یاد میگیره اینجا.
ولی واقعا پایتون و جنگو و دیتابیس رو بلد باشه.
لینک پست
از لینکدین Babak Doraniarab
ببین من با علی آقا صحبت کردم
نیرو جنگو میخوان که میدلول باشه و برای این سطح دارن حقوق خوبی میدن اینقدر هم خودش آدم مشتی آب بود که میگفت داکر ندوسنت هم اکیه خودم کمک میکنم یاد بگیره
این نشون میده مدیر خوبیه
لطفا بالای دوسال تجربه اگر دارین ایمیل بزنین
و اگر تازه نفس هستین این پوزیشن حداقل دو سالی تجربه سابقه کار میخواد و ممنون میشم اپلای نکنی اگر تازه نفسی
بزودی موقعیت تازه نفس هم پیدا میکنم میارم.
اینجا اپلای کن به ایشون پیام بدین Ali Esmaeili
متن پیام ایشون که شرح شغله:
ببین واقعا همون
Python
Django
Rest framework
PostgreSQL
Rabbitmq
Redis
Celery
git
برامون کافیه.
حالا طبیعتاً هر چیز دیگری اضافهتر از اینها باشه مزیت حساب میشه.
ولی من انتظار بالایی ندارم، مثلا داکر رو اگه بلد نیست میاد در حد نیازش یاد میگیره اینجا.
ولی واقعا پایتون و جنگو و دیتابیس رو بلد باشه.
لینک پست
Linkedin
Babak Doraniarab on LinkedIn: موقعیت کاری مشتی
ببین من با علی آقا صحبت کردم
نیرو جنگو میخوان که… | 43 comments
ببین من با علی آقا صحبت کردم
نیرو جنگو میخوان که… | 43 comments
موقعیت کاری مشتی
ببین من با علی آقا صحبت کردم
نیرو جنگو میخوان که میدلول باشه و برای این سطح دارن حقوق خوبی میدن اینقدر هم خودش آدم مشتی آب بود که میگفت… | 43 comments on LinkedIn
ببین من با علی آقا صحبت کردم
نیرو جنگو میخوان که میدلول باشه و برای این سطح دارن حقوق خوبی میدن اینقدر هم خودش آدم مشتی آب بود که میگفت… | 43 comments on LinkedIn
👍2