جنگولرن
✅دوره مقدماتی آموزش جنگو رایگان شد. ✔️نصب جنگو ✔️ساخت اولین پروژه django ✔️طراحی مدل ها ✔️آماده سازی پنل ادمین django ✔️آشنایی با Query Set و Shell ✔️ساخت List view و Detail view ✔️ایجاد Template متناسب با View ها ✔️اضافه کردن صفحه بندی (Pagination) ✔️طراحی…
✅به صورت کامل آپلود شد
دوره رایگان مقدماتی آموزش جنگو
✔️نصب جنگو
✔️ساخت اولین پروژه django
✔️طراحی مدل ها
✔️آماده سازی پنل ادمین django
✔️آشنایی با Query Set و Shell
✔️ساخت List view و Detail view
✔️ایجاد Template متناسب با View ها
✔️اضافه کردن صفحه بندی (Pagination)
✔️طراحی مدل های ثبت نظرات وبلاگ
✔️ثبت نظر با استفاده از Form ها
✔️افزودن تگ به مطالب با استفاده از پکیج Taggit
✔️ساخت Custom Template Tag ها
لینک لیست پخش آپارات:
https://www.aparat.com/playlist/10321397
دوره رایگان مقدماتی آموزش جنگو
✔️نصب جنگو
✔️ساخت اولین پروژه django
✔️طراحی مدل ها
✔️آماده سازی پنل ادمین django
✔️آشنایی با Query Set و Shell
✔️ساخت List view و Detail view
✔️ایجاد Template متناسب با View ها
✔️اضافه کردن صفحه بندی (Pagination)
✔️طراحی مدل های ثبت نظرات وبلاگ
✔️ثبت نظر با استفاده از Form ها
✔️افزودن تگ به مطالب با استفاده از پکیج Taggit
✔️ساخت Custom Template Tag ها
لینک لیست پخش آپارات:
https://www.aparat.com/playlist/10321397
❤3👍3
📣تبلیغ رایگان
Python tips and tricks
The Good, Bad and the Ugly
📚توی این کانال فقط قرار هست در مورد core python صحبت کنیم.
👨💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازهکار)👨💻
@Mtio975
https://www.tgoop.com/pythonwithmedev
Python tips and tricks
The Good, Bad and the Ugly
📚توی این کانال فقط قرار هست در مورد core python صحبت کنیم.
👨💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازهکار)👨💻
@Mtio975
https://www.tgoop.com/pythonwithmedev
👍2
وبینار بررسی پلتفرم های فریلنسر داخلی و نحوه گرفتن کار در این پلتفرم ها
در این وبینار قرار است از تجربیات مهندس محمد شکاری بادی در زمینه نحوه فعالیت به عنوان فریلنسر و استفاده از پلتفرم هایی همچون پونیشا و ... استفاده کنیم.
از جمله مواردی که بررسی خواهد شد:
- پیش نیاز ها و نیاز مندی های ورود به این بازار
- میزان تجربه چقدر تاثیر گذار خواهد بود
- از کجا شروع کنیم و چطور
- رزومه نویسی در این پلتفرم ها
- نکاتی در بهتر دیده شدن
- نحوه تعامل با کارفرما
- قیمت گذاری
و...
زمان برگزاری :
پنجشنبه ۳۱ خرداد - ساعت 18:00
ظرفیت: 100نفر
هزینه: رایگان 😁
لینک ثبت نام:
https://thealibigdeli.ir/event/
در این وبینار قرار است از تجربیات مهندس محمد شکاری بادی در زمینه نحوه فعالیت به عنوان فریلنسر و استفاده از پلتفرم هایی همچون پونیشا و ... استفاده کنیم.
از جمله مواردی که بررسی خواهد شد:
- پیش نیاز ها و نیاز مندی های ورود به این بازار
- میزان تجربه چقدر تاثیر گذار خواهد بود
- از کجا شروع کنیم و چطور
- رزومه نویسی در این پلتفرم ها
- نکاتی در بهتر دیده شدن
- نحوه تعامل با کارفرما
- قیمت گذاری
و...
زمان برگزاری :
پنجشنبه ۳۱ خرداد - ساعت 18:00
ظرفیت: 100نفر
هزینه: رایگان 😁
لینک ثبت نام:
https://thealibigdeli.ir/event/
👍3
Forwarded from TorhamDev | تورهام 😳
تا حالا براتون سوال شده جنگو چطوری وقتی یک رابطه one2many یا همون فارنکی میزنید چطوری وقتی فیلد صدا میکنید ابجکت فارنکی بهتون میده؟ یا چطوری کوئری look up هایی که میزنید برای مثال داخل filter رو هندل میکنه؟
مثلا رابطه بین مدل a و b دارید بعد همچنین چیزی مینویسید
a.fk.name
و جنگو مقدار name رو میده یا وقتی فیلتر میزنید
a.objects.filter(fk__name="test")
جنگو اینها رو با استفاده از descriptor در پایتون انجام میده که قابلیتهای خفنی به کلاستون میده، برای مثال وقتی یک attribute از یک کلاس صدا بزنید درجا یک کد ران کنید و خیلی چیزا دیگه که الان طولانی میشه توضیح بدم، در نتیجه پاشید برید داکیومنتشو بخونید :)
https://docs.python.org/3/howto/descriptor.html
@TorhamDevCH
مثلا رابطه بین مدل a و b دارید بعد همچنین چیزی مینویسید
a.fk.name
و جنگو مقدار name رو میده یا وقتی فیلتر میزنید
a.objects.filter(fk__name="test")
جنگو اینها رو با استفاده از descriptor در پایتون انجام میده که قابلیتهای خفنی به کلاستون میده، برای مثال وقتی یک attribute از یک کلاس صدا بزنید درجا یک کد ران کنید و خیلی چیزا دیگه که الان طولانی میشه توضیح بدم، در نتیجه پاشید برید داکیومنتشو بخونید :)
https://docs.python.org/3/howto/descriptor.html
@TorhamDevCH
Python documentation
Descriptor Guide
Author, Raymond Hettinger,, Contact,<python at rcn dot com>,. Contents: Descriptor Guide- Primer- Simple example: A descriptor that returns a constant, Dynamic lookups, Managed attributes, Customiz...
👍6🥱2
جنگولرن
✅نسخه قبلی دوره ساخت فروشگاه اینترنتی با جنگو رایگان شد. سرفصل های دوره قبل: ✔️ ساخت پروژه فروشگاه ✔️پیاده سازی قالب ✔️ ساخت مدل ها و ایجاد ارتباط منطقی بین جداول پایگاه داده ✔️ آشنایی با PostgreSQL ✔️ آماده سازی سبد خرید با Django Session – ✔️ ساخت Context…
✅به صورت کامل آپلود شد
دوره رایگان ساخت فروشگاه اینترنتی با جنگو
✔️ ساخت پروژه فروشگاه
✔️پیاده سازی قالب
✔️ ساخت مدل ها و ایجاد ارتباط منطقی بین جداول پایگاه داده
✔️ آشنایی با PostgreSQL
✔️ آماده سازی سبد خرید با Django Session –
✔️ ساخت Context Processor اختصاصی
✔️ ثبت سفارش مشتری و ارائه شماره سفارش
✔️ راه اندازی درگاه پرداخت اینترنتی
✔️ کانفیگ پکیج django-allauth
✔️ عضویت با django-allauth و Authentication
✔️ گانفیک email جهت ارسال تاییدیه عضویت به کاربر
✔️ ساخت API در Google Developer Console
✔️ ثبت نام در سایت با Google Account
لینک لیست پخش آپارات:
https://www.aparat.com/playlist/10357582
دوره رایگان ساخت فروشگاه اینترنتی با جنگو
✔️ ساخت پروژه فروشگاه
✔️پیاده سازی قالب
✔️ ساخت مدل ها و ایجاد ارتباط منطقی بین جداول پایگاه داده
✔️ آشنایی با PostgreSQL
✔️ آماده سازی سبد خرید با Django Session –
✔️ ساخت Context Processor اختصاصی
✔️ ثبت سفارش مشتری و ارائه شماره سفارش
✔️ راه اندازی درگاه پرداخت اینترنتی
✔️ کانفیگ پکیج django-allauth
✔️ عضویت با django-allauth و Authentication
✔️ گانفیک email جهت ارسال تاییدیه عضویت به کاربر
✔️ ساخت API در Google Developer Console
✔️ ثبت نام در سایت با Google Account
لینک لیست پخش آپارات:
https://www.aparat.com/playlist/10357582
👏9
Forwarded from محمد لرنینگ (آموزش برنامه نویسی)
.
لینک ویدیوی جلسه 18:
https://youtu.be/OuyMAOgwZbc
تو این ویدیو، به سه روش مختلف یک ماشین حساب پایتونی ساختیم و سعی کردیم در هر مرحله پیشرفته ترش کنیم.
جزوه ای که روش تدریس میکنم :
https://github.com/SEYEDBAX/course-notes/tree/main/lesson-18
🔔 حتما حتما یوتیوب رو فالو کنید و ویدیو رو لایک کنید و نوتیف رو روشن بزارید 🫶
https://www.tgoop.com/QaDeveloper
تمرین : طبق مواردی که در انتهای ویدیو گفته شد به کمک شی گرایی ۴ امین ماشین حساب رو هم شما بسازید
✅ @SEYED_BAX | @MakeDeveloper
لینک ویدیوی جلسه 18:
https://youtu.be/OuyMAOgwZbc
تو این ویدیو، به سه روش مختلف یک ماشین حساب پایتونی ساختیم و سعی کردیم در هر مرحله پیشرفته ترش کنیم.
جزوه ای که روش تدریس میکنم :
https://github.com/SEYEDBAX/course-notes/tree/main/lesson-18
https://www.tgoop.com/QaDeveloper
تمرین : طبق مواردی که در انتهای ویدیو گفته شد به کمک شی گرایی ۴ امین ماشین حساب رو هم شما بسازید
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
course-notes/lesson-18 at main · SEYEDBAX/course-notes
Contribute to SEYEDBAX/course-notes development by creating an account on GitHub.
👍1👎1
Media is too big
VIEW IN TELEGRAM
✅دو تا تابع مهم در جنگو به نام های:
prefetch_related & select_related
از لینکدین Ebrahim Kiani
سلام خدمت دوستان عزیز لینکدین👋🏻
امیدوارم حالتون خوب باشه🙂
تو این کلیپ کوتاه آموزشی سعی کردم دو تا تابع مهم در جنگو به نام های:
prefetch_related & select_related
که در پرفورمنس برنامه هامون هم نقش بسزایی دارند رو آموزش بدم.
البته این مباحث را خودم از داخل یکی از مصاحبه هام یاد گرفتم و برای همین کلیپ آن را درست کردم.
پیشاپیش ممنونم از حمایت هاتون🤗
prefetch_related & select_related
از لینکدین Ebrahim Kiani
سلام خدمت دوستان عزیز لینکدین👋🏻
امیدوارم حالتون خوب باشه🙂
تو این کلیپ کوتاه آموزشی سعی کردم دو تا تابع مهم در جنگو به نام های:
prefetch_related & select_related
که در پرفورمنس برنامه هامون هم نقش بسزایی دارند رو آموزش بدم.
البته این مباحث را خودم از داخل یکی از مصاحبه هام یاد گرفتم و برای همین کلیپ آن را درست کردم.
پیشاپیش ممنونم از حمایت هاتون🤗
🔥7
Forwarded from Microfrontend.ir
از هفته بعد تمرکز کانال بر روی داکر و پستگرس خواهد بود و پلی لیستهای جاوا اسکریپت رو هم با سرعت کمتری ادامه میدم. روی یک پلی لیست آموزش Go هم دارم کار میکنم که چون میخوام مثل پلی لیستهای ناقص دیگه نشه تا کامل ضبط نکنم منتشر نمیکنم. برای حمایت از کانال به دوستان خود بگویید :)
https://youtube.com/microfrontend
〰️〰️〰️〰️〰️〰️
© | @microfrontend_ir
https://youtube.com/microfrontend
〰️〰️〰️〰️〰️〰️
© | @microfrontend_ir
❤3👍3🔥1
Forwarded from TorhamDev | تورهام 😳
بیایید به بهانه آپتومایز کردن کوئریهای #جنگو چندتا چیز جدید درباره ORM جنگو یاد بگیریم
شما همیشه وقتی چیزی رو نیاز دارید داخل جنگو همچین کوئری میزنید:
خب این قرار آبجکتهایی که ایدی ۱ تا ۴ دارن بهمون بده. حالا شما میخوایید با اینا یکسری پردازش انجام بدید مثلا بیایید اسم همه رکوردها رو نشون کار برید یا به عبارتی:
و کار شما اینجا تموم میشه و خوشحال میشید. اماااااااا شما یک عالمه پردازش بی جا انجام دادید و یک عالمه منابع الکی خرج کرید. بیایید ببینیم کوئری بالا وقتی sql میشه چه شکلی میشه:
این چیزی که داخل دیتابیس اجرا میشه. متوجه اش شدید؟
اگه نشدید باید بگم شما فقط به فیلد name نیاز داشتید اما تمام فیلدهای اون اون رکوردها رو گرفتید! هیچ وقت هم ازشون استفاده نکردید.
برای حل این مشکل جنگو دوتا راه حل داره:
1. values
2. values_list
با استفاده از این دو میتونید فقط فیلدهایی که میخوایید رو بگیرید. برای مثال:
و حالا کوئری که میسازید همچین چیزی خواهد شد:
و همینطور که میبینید حالا فقط اون فیلدی رو گرفتید که لازمش دارید.
تفاوت بین values و valuse_list تنها در دیتا استراکچر خروجی که به شما میده و داخل کوئری نهایی هردو مثل هم عمل میکنن. برای درک بیشتر:
بله یکی دیکشنری و دومی تاپل :) همچنین اگه فقط فقط یک فیلد میخوایید مثلا name میتونید از flat=True هم استفاده کنید برای بهتر شدن دیتا خروجی:
@TorhamDevCH
شما همیشه وقتی چیزی رو نیاز دارید داخل جنگو همچین کوئری میزنید:
Record.objects.filter(id__in=[1,2,3,4])
خب این قرار آبجکتهایی که ایدی ۱ تا ۴ دارن بهمون بده. حالا شما میخوایید با اینا یکسری پردازش انجام بدید مثلا بیایید اسم همه رکوردها رو نشون کار برید یا به عبارتی:
for r in records:
print(record.name)
و کار شما اینجا تموم میشه و خوشحال میشید. اماااااااا شما یک عالمه پردازش بی جا انجام دادید و یک عالمه منابع الکی خرج کرید. بیایید ببینیم کوئری بالا وقتی sql میشه چه شکلی میشه:
SELECT id,
name,
created_at,
is_deleted
FROM records
WHERE id IN (1, 2, 3, 4);
این چیزی که داخل دیتابیس اجرا میشه. متوجه اش شدید؟
اگه نشدید باید بگم شما فقط به فیلد name نیاز داشتید اما تمام فیلدهای اون اون رکوردها رو گرفتید! هیچ وقت هم ازشون استفاده نکردید.
برای حل این مشکل جنگو دوتا راه حل داره:
1. values
2. values_list
با استفاده از این دو میتونید فقط فیلدهایی که میخوایید رو بگیرید. برای مثال:
Record.objects.filter(id__in=[1,2,3,4]).values('name')
و حالا کوئری که میسازید همچین چیزی خواهد شد:
SELECT name
FROM records
WHERE id IN (1, 2, 3, 4);
و همینطور که میبینید حالا فقط اون فیلدی رو گرفتید که لازمش دارید.
تفاوت بین values و valuse_list تنها در دیتا استراکچر خروجی که به شما میده و داخل کوئری نهایی هردو مثل هم عمل میکنن. برای درک بیشتر:
>>> Record.objects.filter(is_deleted=False).values('id', 'name')
<QuerySet [{'id': 1, 'name': 'First record'}, {'id': 2, 'name': 'Second Record'}, {'id': 3, 'name': 'Third Record'}]>
>>> Record.objects.filter(is_deleted=False).values_list('id', 'name')
<QuerySet [(1, 'First record'), (2, 'Second Record'), (3, 'Third Record')]>
بله یکی دیکشنری و دومی تاپل :) همچنین اگه فقط فقط یک فیلد میخوایید مثلا name میتونید از flat=True هم استفاده کنید برای بهتر شدن دیتا خروجی:
>>> Record.objects.filter(is_deleted=False).values_list('name',flat=True)
<QuerySet ['First record', 'Second Record', 'Third Record']>
@TorhamDevCH
👍14🔥7❤1
Media is too big
VIEW IN TELEGRAM
✅ساخت توکن لینک فعالسازی ایمیل در جنگو
بخشی از آپدیت جدید دوره فروشگاه اینترنتی با جنگو.
این قسمت در مورد اینا صحبت شد:
✔️مفهوم توکن
✔️کد بندی Base64
✔️متد get current site
✔️یکی از دلایل نگهداری امن از secret key جنگو
✔️و...
لینک آپارات:
https://www.aparat.com/v/uskbt0m
هر انتقاد یا پیشنهادی به این قسمت دارید به @miladhzz پیام بدید
لینک خرید این دوره 🫣🤫 :
https://www.daneshjooyar.com/project-django/
تشکر
بخشی از آپدیت جدید دوره فروشگاه اینترنتی با جنگو.
این قسمت در مورد اینا صحبت شد:
✔️مفهوم توکن
✔️کد بندی Base64
✔️متد get current site
✔️یکی از دلایل نگهداری امن از secret key جنگو
✔️و...
لینک آپارات:
https://www.aparat.com/v/uskbt0m
هر انتقاد یا پیشنهادی به این قسمت دارید به @miladhzz پیام بدید
لینک خرید این دوره 🫣🤫 :
https://www.daneshjooyar.com/project-django/
تشکر
👍3
Forwarded from TorhamDev | تورهام 😳
چطور کوئری آپدیت بهتری داخل #جنگو بزنیم؟
روشهای زیادی برای آپدیت کردن یک آجکت یا چندتا آبجکت داخل جنگو وجود داره، ساده ترین حالتی که افراد استفاده میکنن همچین چیزی.
مدل فرضی:
برای مثال اگه کسی بخواد یک آبجکت از این مدل رو آپدیت کنه همچین کار میکنه:
که این اوکیه، بد نیست و آپدیت براتون انجام میده اما یک نکته رو بهش توجه نمیکنید!
زمانی که شما یک آبجکت این شکلی آپدیت میکنید در اصل دارید تمام فیلدها رو آپدیت میکنید :) ولی خب مقدار فیلدهای قبلی همون قبلی ها آپدیت میشه، برای اینکه از این کار جلو گیری کنید باید explicit ( نمیدونم، فکر کنم دقیق تر معنی بده) باشید یعنی، دقیقا بگید کدوم فیلد/فیلدها میخوایید آپدیت کنید. این کار میکنید با استفاده از پارامتر update_fields انجام بدید.
البته باید مراقب باشید که حتما فیلدهایی که میخوایید آپدیت کنید رو داخلش بزارید مگرنه آپدیت نمیشن.
پست بعدی آپدیت کردن چند آبجکت...
@TorhamDevCH
روشهای زیادی برای آپدیت کردن یک آجکت یا چندتا آبجکت داخل جنگو وجود داره، ساده ترین حالتی که افراد استفاده میکنن همچین چیزی.
مدل فرضی:
class Records(models.Model):
name = models.Charfield()
balance = models.InetegerField()
country =models.CharField()
برای مثال اگه کسی بخواد یک آبجکت از این مدل رو آپدیت کنه همچین کار میکنه:
r = Records.objects.get(pk=1)
r.name = "new name"
r.save()
که این اوکیه، بد نیست و آپدیت براتون انجام میده اما یک نکته رو بهش توجه نمیکنید!
زمانی که شما یک آبجکت این شکلی آپدیت میکنید در اصل دارید تمام فیلدها رو آپدیت میکنید :) ولی خب مقدار فیلدهای قبلی همون قبلی ها آپدیت میشه، برای اینکه از این کار جلو گیری کنید باید explicit ( نمیدونم، فکر کنم دقیق تر معنی بده) باشید یعنی، دقیقا بگید کدوم فیلد/فیلدها میخوایید آپدیت کنید. این کار میکنید با استفاده از پارامتر update_fields انجام بدید.
r = Records.objects.get(pk=1)
r.name = "new name"
r.save(update_fields=["name"])
البته باید مراقب باشید که حتما فیلدهایی که میخوایید آپدیت کنید رو داخلش بزارید مگرنه آپدیت نمیشن.
پست بعدی آپدیت کردن چند آبجکت...
@TorhamDevCH
❤9👍6
✅این کد جنگو رو ببینید. کاربر با موبایل میتونه لاگین میکنه.
به هر دلیلی خواستیم بتونه فقط با فیلد موبایل لاگین کنه.
سوال:
وقتی به این راحتی میشه لاگین کرد چه نیازی به ساختن authentication backend داریم؟
اون django_login همون متد login جنگو هست. توی django.contrib.auth
آپدیت سوال:
ببیند مثلا من میخوام ادمین با user, pass توی پنل ادمینم لاگین بشه.
اما کاربرهای من با مثلا موبایل لاگین بشن.
برای لاگین شدن فقط میتونم با کال کردن متد لاگین و دادن user بهش اون user رو لاگین کنم.
پس چه نیازی به ساخت authentication backend کاستوم دارم؟
به هر دلیلی خواستیم بتونه فقط با فیلد موبایل لاگین کنه.
سوال:
وقتی به این راحتی میشه لاگین کرد چه نیازی به ساختن authentication backend داریم؟
اون django_login همون متد login جنگو هست. توی django.contrib.auth
آپدیت سوال:
ببیند مثلا من میخوام ادمین با user, pass توی پنل ادمینم لاگین بشه.
اما کاربرهای من با مثلا موبایل لاگین بشن.
برای لاگین شدن فقط میتونم با کال کردن متد لاگین و دادن user بهش اون user رو لاگین کنم.
پس چه نیازی به ساخت authentication backend کاستوم دارم؟
❤4🔥1
✅در مورد سوال قبلی
ببینید همونطوری که از اسمش پیداست authentication backend کارش authenticate هست.
اما کدی که من نوشتم لاگین کرده.
✔️بکند کارش لاگین کردن نیست. کارش احراز هویته (دقت کنید نه احراز دسترسی. با authorization فرق داره)
یعنی فقط میگه مثلا این موبایلی که دادی این اوکیه و اینم یوزرش هست.
بعد یوزری که میده رو لاگین می کنیم خودمون.
وقتی بکند کاستوم می سازیم. مثلا یه بکند داریم فقط موبایل میگیره. یکی هم پیشفرض سیستم هست با user, pass
وقتی متد authenticate رو (که توی django.contrib.auth هست) صدا می زنیم.
✔️خود جنگو تشخیص میده با کدوم بکند authenticate کنه. البته از لیست بکندهایی که توی تنظیمات هست استفاده میکنه.
✔️و البته signature ع بکند هم مهمه برای این تشخیص و اولین بکندی که باهاشون بخونه رو استفاده میکنه. البته اگه signature شون مثل هم باشه به ترتیبی که قرار دارند authenticate میکنه و اولی که اوکی بشه دیگه ادامه نمیده.
عکس کدهای جنگو هست. ببینید داره for میزنه توی بکندهایی که ما توی settings مشخص می کنیم. خط 68
ببینید همونطوری که از اسمش پیداست authentication backend کارش authenticate هست.
اما کدی که من نوشتم لاگین کرده.
✔️بکند کارش لاگین کردن نیست. کارش احراز هویته (دقت کنید نه احراز دسترسی. با authorization فرق داره)
یعنی فقط میگه مثلا این موبایلی که دادی این اوکیه و اینم یوزرش هست.
بعد یوزری که میده رو لاگین می کنیم خودمون.
وقتی بکند کاستوم می سازیم. مثلا یه بکند داریم فقط موبایل میگیره. یکی هم پیشفرض سیستم هست با user, pass
وقتی متد authenticate رو (که توی django.contrib.auth هست) صدا می زنیم.
✔️خود جنگو تشخیص میده با کدوم بکند authenticate کنه. البته از لیست بکندهایی که توی تنظیمات هست استفاده میکنه.
✔️و البته signature ع بکند هم مهمه برای این تشخیص و اولین بکندی که باهاشون بخونه رو استفاده میکنه. البته اگه signature شون مثل هم باشه به ترتیبی که قرار دارند authenticate میکنه و اولی که اوکی بشه دیگه ادامه نمیده.
عکس کدهای جنگو هست. ببینید داره for میزنه توی بکندهایی که ما توی settings مشخص می کنیم. خط 68
👍4❤1
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://www.tgoop.com/djangolearn_ir/531
https://www.tgoop.com/djangolearn_ir/533
https://www.tgoop.com/djangolearn_ir/573
https://www.tgoop.com/djangolearn_ir/676
https://www.tgoop.com/djangolearn_ir/724
https://www.tgoop.com/djangolearn_ir/808
لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
قسمت های زیر اضافه شدند:
فصل هفتم
✔️ریفکتور کدهای پرداخت
فصل هشتم
✔️فرم ورود با رمز عبور
✔️فرم ثبت نام کاربر
✔️آماده سازی ارسال ایمیل فعالسازی
✔️تولید توکن فعالسازی ایمیل
✔️فعالسازی حساب کاربر
✔️آماده سازی ورود با موبایل
✔️ورود موفق با کد یکبار مصرف
چند قسمت از این دوره رو اینجا ببینید:
https://www.tgoop.com/djangolearn_ir/531
https://www.tgoop.com/djangolearn_ir/533
https://www.tgoop.com/djangolearn_ir/573
https://www.tgoop.com/djangolearn_ir/676
https://www.tgoop.com/djangolearn_ir/724
https://www.tgoop.com/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