Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
820 - Telegram Web
Telegram Web
جنگولرن
دوره مقدماتی آموزش جنگو رایگان شد. ✔️نصب جنگو ✔️ساخت اولین پروژه 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
3👍3
📣تبلیغ رایگان

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/
👍3
تا حالا براتون سوال شده جنگو چطوری وقتی یک رابطه 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
👍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
👏9
.

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

https://youtu.be/OuyMAOgwZbc

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

جزوه ای که روش تدریس میکنم :
https://github.com/SEYEDBAX/course-notes/tree/main/lesson-18


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

https://www.tgoop.com/QaDeveloper

تمرین : طبق مواردی که در انتهای ویدیو گفته شد به کمک شی گرایی ۴ امین ماشین حساب رو هم شما بسازید

@SEYED_BAX | @MakeDeveloper
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👎1
Media is too big
VIEW IN TELEGRAM
دو تا تابع مهم در جنگو به نام های:
prefetch_related & select_related

از لینکدین Ebrahim Kiani

سلام خدمت دوستان عزیز لینکدین👋🏻
امیدوارم حالتون خوب باشه🙂
تو این کلیپ کوتاه آموزشی سعی کردم دو تا تابع مهم در جنگو به نام های:
prefetch_related & select_related
که در پرفورمنس برنامه هامون هم نقش بسزایی دارند رو آموزش بدم.
البته این مباحث را خودم از داخل یکی از مصاحبه هام یاد گرفتم و برای همین کلیپ آن را درست کردم.
پیشاپیش ممنونم از حمایت هاتون🤗
🔥7
Forwarded from Microfrontend.ir
از هفته بعد تمرکز کانال بر روی داکر و پستگرس خواهد بود و پلی لیست‌های جاوا اسکریپت رو هم با سرعت کمتری ادامه می‌دم. روی یک پلی لیست آموزش Go هم دارم کار می‌کنم که چون می‌خوام مثل پلی لیست‌های ناقص دیگه نشه تا کامل ضبط نکنم منتشر نمی‌کنم. برای حمایت از کانال به دوستان خود بگویید :)

https://youtube.com/microfrontend

〰️〰️〰️〰️〰️〰️
© | @microfrontend_ir
3👍3🔥1
بیایید به بهانه آپتومایز کردن کوئری‌های #جنگو چندتا چیز جدید درباره ORM جنگو یاد بگیریم

شما همیشه وقتی چیزی رو نیاز دارید داخل جنگو همچین کوئری میزنید:

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🔥71
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/

تشکر
👍3
چطور کوئری آپدیت بهتری داخل #جنگو بزنیم؟

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

مدل فرضی:

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 کاستوم دارم؟
4🔥1
در مورد سوال قبلی

ببینید همونطوری که از اسمش پیداست authentication backend کارش authenticate هست.
اما کدی که من نوشتم لاگین کرده.

✔️بکند کارش لاگین کردن نیست. کارش احراز هویته (دقت کنید نه احراز دسترسی. با authorization فرق داره)
یعنی فقط میگه مثلا این موبایلی که دادی این اوکیه و اینم یوزرش هست.
بعد یوزری که میده رو لاگین می کنیم خودمون.

وقتی بکند کاستوم می سازیم. مثلا یه بکند داریم فقط موبایل میگیره. یکی هم پیشفرض سیستم هست با user, pass
وقتی متد authenticate رو (که توی django.contrib.auth هست) صدا می زنیم.

✔️خود جنگو تشخیص میده با کدوم بکند authenticate کنه. البته از لیست بکندهایی که توی تنظیمات هست استفاده میکنه.

✔️و البته signature ع بکند هم مهمه برای این تشخیص و اولین بکندی که باهاشون بخونه رو استفاده میکنه. البته اگه signature شون مثل هم باشه به ترتیبی که قرار دارند authenticate میکنه و اولی که اوکی بشه دیگه ادامه نمیده.

عکس کدهای جنگو هست. ببینید داره for میزنه توی بکندهایی که ما توی settings مشخص می کنیم. خط 68
👍41
آپدیت کردن چند آبجکت به صورت همزمان در #جنگو

فریم‌ورک #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
اگه هنوز سراغ این کتاب ۹۷ چیز که باید هر برنامه‌نویسی بدونه، نرفتید یه چند تا موردش که جالب بود برام رو می‌ذارم شاید علاقه‌مند شدین:

در مورد ۹ام، می‌گه که وقتی یه مشکلی وجود داره در نظر بگیرید که اون مشکل توی کد شماست نه سیستم‌عامل و کامپایلر. اگرچه کامپایلر و سیستم‌عامل و کتاب‌خونه هم ممکنه باگ داشته باشن ولی اونا رو هزاران نفر دیگه هم استفاده میکنن و خیلی بعیده باگ شناخته‌نشده‌ای داشته باشن در حالی که کد خودتون رو احتمالا تازه نوشتین و کاربرای کمتری هم داره.
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
👍91
جلسه ۱۰ - شی گرایی در پایتون.pdf
880.2 KB
جزوه جلسه ۱۰ با تشکر از اقا مهدی

@SEYED_BAX | @MakeDeveloper
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/
1
Media is too big
VIEW IN TELEGRAM
نکاتی در مورد دلیل استفاده از authentication backends در جنگو

توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️مشکل لاگین نشدن کاربران جدید
✔️روش استفاده از 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
2025/07/10 04:46:48
Back to Top
HTML Embed Code: