✅یه نکته امنیتی در جنگو
این کد 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://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/
🤫اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.
قسمت های زیر اضافه شدند:
فصل هشتم
✔️بررسی مشکلات کد ورود یکبار مصرف
✔️ورود با ایمیل و رمز عبور
✔️تکمیل ورود با موبایل و کد یکبار مصرف
چند قسمت از این دوره رو اینجا ببینید:
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/
👍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://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.daneshjooyar.com/project-django/
توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️روش نصب django-allauth
✔️چرا از این پکیج استفاده کردیم
✔️اگر بخواهیم خودمان لاگین با گوگل رو بنویسیم چه چیزهایی باید بدونیم
✔️تنظیمات این پکیج
✔️قابلیت های این پکیج
لینک آپارات:
https://aparat.com/v/tpt8277
لینک یوتیوب:
https://youtu.be/akX6ZRfOogU
چند قسمت دیگه از این دوره رو اینجا ببینید:
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.daneshjooyar.com/project-django/
❤4👏1
Forwarded from محمد لرنینگ (آموزش برنامه نویسی)
.
لینک ویدیوی جلسه ۲۳:
https://youtu.be/SKXTwi4UylU
تو این ویدیو، از بیسیک ترین تا پیشرفته ترین مباحث تایپینگ پایتون صحبت کردیم و در نهایت هم چند مثال از pydantic و کاربرد هاش زدیم. دیدن این ویدیو برای هر برنامه نویسی واجبه
🔔 حتما حتما یوتیوب رو فالو کنید و ویدیو رو لایک کنید و نوتیف رو روشن بزارید 🫶
https://www.tgoop.com/QaDeveloper
✅ @SEYED_BAX | @MakeDeveloper
لینک ویدیوی جلسه ۲۳:
https://youtu.be/SKXTwi4UylU
تو این ویدیو، از بیسیک ترین تا پیشرفته ترین مباحث تایپینگ پایتون صحبت کردیم و در نهایت هم چند مثال از pydantic و کاربرد هاش زدیم. دیدن این ویدیو برای هر برنامه نویسی واجبه
https://www.tgoop.com/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
✅دوره غیر رایگان ساخت فروشگاه اینترنتی با جنگو آپدیت شد.
اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.
قسمت های زیر اضافه شدند:
فصل هشتم
✔️معرفی پکیج django-allauth جهت لاگین با حساب گوگل
✔️ساخت پروژه در کنسول برنامه نویس گوگل
✔️تکمیل لاگین با حساب گوگل
چند قسمت از این دوره رو اینجا ببینید:
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.tgoop.com/djangolearn_ir/830
لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.
قسمت های زیر اضافه شدند:
فصل هشتم
✔️معرفی پکیج django-allauth جهت لاگین با حساب گوگل
✔️ساخت پروژه در کنسول برنامه نویس گوگل
✔️تکمیل لاگین با حساب گوگل
چند قسمت از این دوره رو اینجا ببینید:
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.tgoop.com/djangolearn_ir/830
لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
Forwarded from Ninja Learn | نینجا لرن
#پست_جدید
توی پست قبلی درمورد lazy بودن کوری ست ها صحبت کردیم
⭕ توی این پست میخوایم درموردش عمیق تر بشیم
توجه❗️
تمام مثال های این پست با توجه به معماری MVT در نظر گرفته شده است.
به مثال زیر توجه کنید 👇
خب بنظرتون توی این مرحله کوری ست evaluate میشه؟ ❓
خیر هیچوقت در این مرحله evaluate نمیشه و توی تمپلیت وقتی که داریم روش یه عملیتای انجام میدیم evaluate میشه ( جلوتر توضیح میدم)
به این مثال توجه کنید 👇
همونطور که میبینید دراین کد ما اومدیم درون تمپلیت روی users حلقه for زدیم و اسامی کاربران رو گرفتیم
با توجه به lazy بودن کوری ست ها که در پست قبل توضیح دادم در مرحله حلقه زدن عملیات evaluation صورت میگیره و کوری ست تبدیل به کد sql میشه و به دیتا بیس فرستاده میشه و ریزالت رو برمیگردونه
پس بازم اینجا اثبات شد فقط وقتی کوری ست اجرا میشه که بهش نیاز پیدا کنیم
#جنگو #کوری_ست #lazy_querysets
@ninja_learn_ir
توی پست قبلی درمورد lazy بودن کوری ست ها صحبت کردیم
⭕ توی این پست میخوایم درموردش عمیق تر بشیم
توجه❗️
تمام مثال های این پست با توجه به معماری MVT در نظر گرفته شده است.
به مثال زیر توجه کنید 👇
def get_users_list(request):
users = User.objects.all()
return render(request, "panel/ users.html", {"users": users})
خب بنظرتون توی این مرحله کوری ست evaluate میشه؟ ❓
خیر هیچوقت در این مرحله evaluate نمیشه و توی تمپلیت وقتی که داریم روش یه عملیتای انجام میدیم evaluate میشه ( جلوتر توضیح میدم)
به این مثال توجه کنید 👇
{% for user in users %}
<h1> {{user.name}} </h1>
{% endfor %}
همونطور که میبینید دراین کد ما اومدیم درون تمپلیت روی users حلقه for زدیم و اسامی کاربران رو گرفتیم
با توجه به lazy بودن کوری ست ها که در پست قبل توضیح دادم در مرحله حلقه زدن عملیات evaluation صورت میگیره و کوری ست تبدیل به کد sql میشه و به دیتا بیس فرستاده میشه و ریزالت رو برمیگردونه
پس بازم اینجا اثبات شد فقط وقتی کوری ست اجرا میشه که بهش نیاز پیدا کنیم
#جنگو #کوری_ست #lazy_querysets
@ninja_learn_ir
Telegram
Ninja Learn | نینجا لرن 🥷
#پست_جدید
حتما شنیدید که کوری ست ها در جنگو تنبل/lazy هستند 🤔
⭕تواین پست میخوایم درموردش صحبت کنیم⭕
منظور ازاینکه کوری ها تنبل هستند دقیقا چیه؟ ❓
منظور از این حرف اینه که تا وقتی که واقعا به داده ها نیاز پیدا نشه ارزیابی نمیشن (کوری ست evaluate…
حتما شنیدید که کوری ست ها در جنگو تنبل/lazy هستند 🤔
⭕تواین پست میخوایم درموردش صحبت کنیم⭕
منظور ازاینکه کوری ها تنبل هستند دقیقا چیه؟ ❓
منظور از این حرف اینه که تا وقتی که واقعا به داده ها نیاز پیدا نشه ارزیابی نمیشن (کوری ست evaluate…
❤4👍4
✅در جنگو از ()timezone.now برا ی مقدار پیشفرض یه فیلد استفاده نکن.
اگه این کارو کنی جنگو warning زیر رو میده:
WARNINGS:
Profile.login_date: (fields.W161) Fixed default value provided.
HINT: It seems you set a fixed date / time / datetime value as default for this field. This may not be what you want. If you want to have the current date as default, use
✔️و میگه از django.utils.timezone.now استفاده کن
✔️اگه وارنینگی که میده رو نادیده بگیرید با هربار makemigrations یه فایل migrations برای شما میسازه
✔️توی استفاده هم مشکلاتی به وجود میاره و تایم ها تکراری میشن
اگه این کارو کنی جنگو warning زیر رو میده:
WARNINGS:
Profile.login_date: (fields.W161) Fixed default value provided.
HINT: It seems you set a fixed date / time / datetime value as default for this field. This may not be what you want. If you want to have the current date as default, use
django.utils.timezone.now
✔️و میگه از django.utils.timezone.now استفاده کن
✔️اگه وارنینگی که میده رو نادیده بگیرید با هربار makemigrations یه فایل migrations برای شما میسازه
✔️توی استفاده هم مشکلاتی به وجود میاره و تایم ها تکراری میشن
👍7❤2😁2
Forwarded from Ninja Learn | نینجا لرن (Mohammad Eslami)
#پست_جدید
💎 فیکسچر (fixure) در جنگو 💎
❓ فیکسچر چیه؟
فیکسچر یه جور دادهی از پیش تعریف شدهس که قبل از اجرای تستهامون به دیتابیس اضافه میشه. این دادهها میتونن هر چیزی باشن؛ از یه کاربر ساده گرفته تا یه محصول پیچیده توی فروشگاه آنلاینمون.
❓ چرا بهش نیاز داریم؟
1️⃣ تستهای دقیقتر: با داشتن دادههای مشخص، میتونیم تستهای دقیقتری بنویسیم و مطمئن بشیم که همه چیز طبق انتظار کار میکنه.
2️⃣ تستهای سریعتر: به جای اینکه هر بار قبل از اجرای تستها، دادههای مورد نیازمون رو به صورت دستی وارد دیتابیس کنیم، با استفاده از فیکسچر این کار رو یک بار انجام میدیم و در تستهای بعدی از همون دادهها استفاده میکنیم.
3️⃣ تکرارپذیری تستها: با استفاده از فیکسچر، میتونیم مطمئن باشیم که هر بار که تستهامون رو اجرا میکنیم، نتیجه یکسانی خواهیم داشت.
✅ ساختن یه فیکسچر
برای ساختن یه فیکسچر، یه فایل با پسوند json یا yaml ایجاد میکنیم و دادههای مورد نظرمون رو به صورت ساختیافته در اون تعریف میکنیم.
مثال با فرمت JSON:
در این مثال، ما دو رکورد برای مدلهای Product و Category تعریف کردیم.
✅ استفاده از فیکسچر در تستها
در این مثال، ما به کلاس تستمون گفتیم که قبل از اجرای هر تستی، فیکسچر products.json رو لود کنه. بعد، در تست test_product_detail، محصول با id برابر با ۱ رو پیدا میکنیم و مطمئن میشیم که نام محصول درسته.
✅ دستورات لازم و ساخت و لود کردن فیکسچر
1️⃣ ساختن یه فیکسچر با دستور dumpdata
دستور dumpdata بهت اجازه میده که دادههای موجود در دیتابیس رو به صورت یک فایل JSON یا YAML خروجی بگیری. این فایل خروجی رو میتونی به عنوان فیکسچر استفاده کنی.
2️⃣ استفاده از فیکسچر با دستور loaddata
دستور loaddata بهت اجازه میده که دادههای موجود در یک فایل فیکسچر رو به دیتابیس اضافه کنی.
✅ مثال عملی
فرض کن یه وبسایت فروشگاهی داریم و میخوایم یه تست بنویسیم که بررسی کنه آیا محصولی با نام خاص در دیتابیس وجود داره یا نه. اول از همه، با استفاده از دستور dumpdata از مدل Product یه فیکسچر میگیریم:
سپس، در تستمون، این فیکسچر رو لود میکنیم و محصول مورد نظر رو جستجو میکنیم:
⭕️ نکات کلیدی فیکسچر به زبان ساده
ساختار فیکسچر: فیکسچرت باید شبیه به همون چیزی باشه که توی دیتابیس داری. مثلاً اگه یه مدل محصول داری، فیکسچرت هم باید یه محصول رو تعریف کنه.
اسمگذاری فیکسچر: به فیکسچرت یه اسم بامعنا بده تا بفهمی توش چه دادههایی داری. مثلاً products.json یعنی توش اطلاعات محصولها هست.
مدیریت فیکسچر: وقتی تستهای زیادی مینویسی، باید یه جوری فیکسچرهات رو مرتب کنی تا گم نشی. میتونی از فولدرهای مختلف یا ابزارهای مخصوص استفاده کنی.
✅ جمعبندی
فیکسچر یه ابزار خیلی خفنه که بهت کمک میکنه تستهای بهتری بنویسی. با فیکسچر، میتونی دادههای از پیش تعریف شدهای رو به دیتابیس اضافه کنی و تست کنی که همه چیز درست کار میکنه. انگار داری یه محیط آزمایشی برای برنامهت میسازی.
⭕️ توجه: برای اطلاعات بیشتر و مثال های عملی تر، میتونید به مستندات رسمی جنگو مراجعه کنین.
#جنگو #تست #فیکسچر #برنامه_نویسی
💎 فیکسچر (fixure) در جنگو 💎
❓ فیکسچر چیه؟
فیکسچر یه جور دادهی از پیش تعریف شدهس که قبل از اجرای تستهامون به دیتابیس اضافه میشه. این دادهها میتونن هر چیزی باشن؛ از یه کاربر ساده گرفته تا یه محصول پیچیده توی فروشگاه آنلاینمون.
❓ چرا بهش نیاز داریم؟
1️⃣ تستهای دقیقتر: با داشتن دادههای مشخص، میتونیم تستهای دقیقتری بنویسیم و مطمئن بشیم که همه چیز طبق انتظار کار میکنه.
2️⃣ تستهای سریعتر: به جای اینکه هر بار قبل از اجرای تستها، دادههای مورد نیازمون رو به صورت دستی وارد دیتابیس کنیم، با استفاده از فیکسچر این کار رو یک بار انجام میدیم و در تستهای بعدی از همون دادهها استفاده میکنیم.
3️⃣ تکرارپذیری تستها: با استفاده از فیکسچر، میتونیم مطمئن باشیم که هر بار که تستهامون رو اجرا میکنیم، نتیجه یکسانی خواهیم داشت.
✅ ساختن یه فیکسچر
برای ساختن یه فیکسچر، یه فایل با پسوند json یا yaml ایجاد میکنیم و دادههای مورد نظرمون رو به صورت ساختیافته در اون تعریف میکنیم.
مثال با فرمت JSON:
[
{
"model": "myapp.Product",
"pk": 1,
"fields": {
"name": "گوشی موبایل سامسونگ",
"price": 5000000
}
},
{
"model": "myapp.Category",
"pk": 1,
"fields": {
"name": "گوشی موبایل"
}
}
]
در این مثال، ما دو رکورد برای مدلهای Product و Category تعریف کردیم.
✅ استفاده از فیکسچر در تستها
from django.test import TestCase
from .models import Product
class ProductTestCase(TestCase):
fixtures = ['products.json']
def test_product_detail(self):
product = Product.objects.get(pk=1)
self.assertEqual(product.name, 'گوشی موبایل سامسونگ')
در این مثال، ما به کلاس تستمون گفتیم که قبل از اجرای هر تستی، فیکسچر products.json رو لود کنه. بعد، در تست test_product_detail، محصول با id برابر با ۱ رو پیدا میکنیم و مطمئن میشیم که نام محصول درسته.
✅ دستورات لازم و ساخت و لود کردن فیکسچر
1️⃣ ساختن یه فیکسچر با دستور dumpdata
دستور dumpdata بهت اجازه میده که دادههای موجود در دیتابیس رو به صورت یک فایل JSON یا YAML خروجی بگیری. این فایل خروجی رو میتونی به عنوان فیکسچر استفاده کنی.
# برای خروجی گرفتن از همه مدلها به صورت JSON:Bash
python manage.py dumpdata app_name.ModelName --format json --indent 2 --output my_fixture.json
# برای خروجی گرفتن از یک مدل خاص به صورت YAML:
python manage.py dumpdata app_name.ModelName --format yaml--indent 2 --output my_fixture.yaml
2️⃣ استفاده از فیکسچر با دستور loaddata
دستور loaddata بهت اجازه میده که دادههای موجود در یک فایل فیکسچر رو به دیتابیس اضافه کنی.
# برای بارگذاری دادههای یک فایل JSON:
python manage.py loaddata my_fixture.json
# برای بارگذاری دادههای یک فایل YAML:
python manage.py loaddata products.yaml
✅ مثال عملی
فرض کن یه وبسایت فروشگاهی داریم و میخوایم یه تست بنویسیم که بررسی کنه آیا محصولی با نام خاص در دیتابیس وجود داره یا نه. اول از همه، با استفاده از دستور dumpdata از مدل Product یه فیکسچر میگیریم:
python manage.py dumpdata app_name.Product --format json --indent 2 --output product.json
سپس، در تستمون، این فیکسچر رو لود میکنیم و محصول مورد نظر رو جستجو میکنیم:
from django.test import TestCase
from .models import Product
class ProductTestCase(TestCase):
fixtures = ['products.json']
def test_product_exists(self):
product = Product.objects.get(name='گوشی موبایل سامسونگ')
self.assertIsNotNone(product)
⭕️ نکات کلیدی فیکسچر به زبان ساده
ساختار فیکسچر: فیکسچرت باید شبیه به همون چیزی باشه که توی دیتابیس داری. مثلاً اگه یه مدل محصول داری، فیکسچرت هم باید یه محصول رو تعریف کنه.
اسمگذاری فیکسچر: به فیکسچرت یه اسم بامعنا بده تا بفهمی توش چه دادههایی داری. مثلاً products.json یعنی توش اطلاعات محصولها هست.
مدیریت فیکسچر: وقتی تستهای زیادی مینویسی، باید یه جوری فیکسچرهات رو مرتب کنی تا گم نشی. میتونی از فولدرهای مختلف یا ابزارهای مخصوص استفاده کنی.
✅ جمعبندی
فیکسچر یه ابزار خیلی خفنه که بهت کمک میکنه تستهای بهتری بنویسی. با فیکسچر، میتونی دادههای از پیش تعریف شدهای رو به دیتابیس اضافه کنی و تست کنی که همه چیز درست کار میکنه. انگار داری یه محیط آزمایشی برای برنامهت میسازی.
⭕️ توجه: برای اطلاعات بیشتر و مثال های عملی تر، میتونید به مستندات رسمی جنگو مراجعه کنین.
#جنگو #تست #فیکسچر #برنامه_نویسی
Django Project
Fixtures | Django documentation
The web framework for perfectionists with deadlines.
🔥4👍3
✅دوره غیر رایگان ساخت فروشگاه اینترنتی با جنگو
اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.
چند قسمت رایگان از این دوره رو اینجا ببینید:
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.tgoop.com/djangolearn_ir/830
لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.
چند قسمت رایگان از این دوره رو اینجا ببینید:
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.tgoop.com/djangolearn_ir/830
لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
🥱4👍1
این پست و کامنت هاش در مورد Logging در جنگو رو ببینید
کامنت های جالبی داره
https://www.linkedin.com/posts/hmdkhsrvee_django-logging-middleware-ugcPost-7223723826218434560-UHNU?utm_source=share&utm_medium=member_desktop
کامنت های جالبی داره
https://www.linkedin.com/posts/hmdkhsrvee_django-logging-middleware-ugcPost-7223723826218434560-UHNU?utm_source=share&utm_medium=member_desktop