Forwarded from alikz
Syntax | سینتکس
Voice message
خیلی ممنون
فقط یه نکته ای میخواستم بگم
اینکه تو هر ریکوئست چک بشه آپدیت بودن توکن کاربر به نظرم بازم مفهوم و علت بوجود اومدن jwt رو زیر سوال میبره
این فرق خاصی از نظر پرفورمنس و فشار سیستم با حالت چک کردن سشن کاربر تو هر درخواست و دراوردن اطلاعات کاربر نداره
بالاخره کوئری زدی هر چقدرم سبک
حالا فرقیم نداره با ردیس چک میکنی یا مستقیم از دیتابیس میخونی
تو هر دوتا کیس داری کوئری میزنی
بنظرم jwt باید برای سیستم هایی استفاده شه عمدتا که امنیت و سطح دسترسی کاربر لازم نباشه در لحظه اعمال و چک شه
اگه استفاده شه هم همه جای سیستم کوئری نزنی دیتابیس
مثلا یجا یکی میخواد یه رکورد از جدولای کاربر رو پاک کنه
خب اوکی تو موقع پیدا کردن اون رکورد علاوه بر id اون چک میکنی userId هم داخل توکن کاربر باشه
حالا اگه این تیکه از اپ برات خیلی مهمه
کل دیتا یوزرم میگیریو چک میکنی که آیا واقعا الان میتونه ای ریسورس رو دستکاری کنه یا نه
فقط یه نکته ای میخواستم بگم
اینکه تو هر ریکوئست چک بشه آپدیت بودن توکن کاربر به نظرم بازم مفهوم و علت بوجود اومدن jwt رو زیر سوال میبره
این فرق خاصی از نظر پرفورمنس و فشار سیستم با حالت چک کردن سشن کاربر تو هر درخواست و دراوردن اطلاعات کاربر نداره
بالاخره کوئری زدی هر چقدرم سبک
حالا فرقیم نداره با ردیس چک میکنی یا مستقیم از دیتابیس میخونی
تو هر دوتا کیس داری کوئری میزنی
بنظرم jwt باید برای سیستم هایی استفاده شه عمدتا که امنیت و سطح دسترسی کاربر لازم نباشه در لحظه اعمال و چک شه
اگه استفاده شه هم همه جای سیستم کوئری نزنی دیتابیس
مثلا یجا یکی میخواد یه رکورد از جدولای کاربر رو پاک کنه
خب اوکی تو موقع پیدا کردن اون رکورد علاوه بر id اون چک میکنی userId هم داخل توکن کاربر باشه
حالا اگه این تیکه از اپ برات خیلی مهمه
کل دیتا یوزرم میگیریو چک میکنی که آیا واقعا الان میتونه ای ریسورس رو دستکاری کنه یا نه
🔥3👍2❤1
Forwarded from Mr.Grayhat [S.R]
Syntax | سینتکس
خیلی ممنون فقط یه نکته ای میخواستم بگم اینکه تو هر ریکوئست چک بشه آپدیت بودن توکن کاربر به نظرم بازم مفهوم و علت بوجود اومدن jwt رو زیر سوال میبره این فرق خاصی از نظر پرفورمنس و فشار سیستم با حالت چک کردن سشن کاربر تو هر درخواست و دراوردن اطلاعات کاربر نداره…
👍7
Forwarded from BiGGyWiLi
Syntax | سینتکس
Voice message
به به ویس های آموزنده
الان آرایشگاه ام
برم خونه گوش میدم😁
الان آرایشگاه ام
برم خونه گوش میدم😁
👎6😁3
Forwarded from Alireza-Fa
Syntax | سینتکس
Voice message
فقط من یجاش فرق داره
اگه اطلاعات یوزر اپدیت شد.
اون اکسس توکن رو با کلید «استرینگ اکسس توکن» و تایم اوت هم مقداری که یه اکسس توکن میتونه معتبر باشه ذخیره میکنم.
بعد تو هر درخواست میدلور چک میکنه اگه اکسس توکنه توی کش بود نامعتبر هستش و باید رفرش کنه
اگه اطلاعات یوزر اپدیت شد.
اون اکسس توکن رو با کلید «استرینگ اکسس توکن» و تایم اوت هم مقداری که یه اکسس توکن میتونه معتبر باشه ذخیره میکنم.
بعد تو هر درخواست میدلور چک میکنه اگه اکسس توکنه توی کش بود نامعتبر هستش و باید رفرش کنه
👍1
Forwarded from Mr.Grayhat [S.R]
Syntax | سینتکس
فقط من یجاش فرق داره اگه اطلاعات یوزر اپدیت شد. اون اکسس توکن رو با کلید «استرینگ اکسس توکن» و تایم اوت هم مقداری که یه اکسس توکن میتونه معتبر باشه ذخیره میکنم. بعد تو هر درخواست میدلور چک میکنه اگه اکسس توکنه توی کش بود نامعتبر هستش و باید رفرش کنه
لقمه دور سر پیچاندنه
👍5
Forwarded from Alireza-Fa
Syntax | سینتکس
لقمه دور سر پیچاندنه
فهمیدم مشکلشو
روشی که گفتی رو پیادش میکنم
روشی که گفتی رو پیادش میکنم
Syntax | سینتکس
Voice message
صحبت خودمونی درباره JWT و راهنمایی های خوب آقا سعید
حتما گوش بدید کلی نکته مهم گفته شده
حتما گوش بدید کلی نکته مهم گفته شده
👍8🔥1
1712416705304.pdf
489.2 KB
ممکنه تو مصاحبه ازتون در مورد Caching بپرسند
یا حتی بخواهید که برای سایتتون Caching راه بندازید تا سریع تر لود بشه
یا ممکنه Cache داشته باشه و تو invalidate کردن مشکل بخورید
تو این داکیومنت به صورت ساده Caching رو توضیح داده
@gopher_academy
#cache
@Syntax_fa
یا حتی بخواهید که برای سایتتون Caching راه بندازید تا سریع تر لود بشه
یا ممکنه Cache داشته باشه و تو invalidate کردن مشکل بخورید
تو این داکیومنت به صورت ساده Caching رو توضیح داده
@gopher_academy
#cache
@Syntax_fa
👍8🙏2
Media is too big
VIEW IN TELEGRAM
- آموزش دیزاین پترن prototype در پایتون
- توضیح درمورد یکی از دلایل اصلی کندی پایتون
- توصیح درمورد shallow copy و deep copy
[Hossein ramezan pour]
#design_pattern #prototype
@Syntax_fa
- توضیح درمورد یکی از دلایل اصلی کندی پایتون
- توصیح درمورد shallow copy و deep copy
[Hossein ramezan pour]
#design_pattern #prototype
@Syntax_fa
👍7👎1
Syntax | سینتکس
Photo
لوگو جدیدمونو طراح گرافیک تیممون زده.
اگه پروژه ای دارید می تونه براتون انجام بده و کارشم عالیه
آیدی جهت ارتباط:
https://news.1rj.ru/str/enznin
اگه پروژه ای دارید می تونه براتون انجام بده و کارشم عالیه
آیدی جهت ارتباط:
https://news.1rj.ru/str/enznin
Telegram
Nazanin Einabadi
🔥9👍3
توضیح درباره Htmx
htmx چیست؟
یک کتابخانه جاوا اسکریپت است که امکان دسترسی به ویژگیهای مدرن مرورگرها را مستقیماً از طریق HTML فراهم میکند. این کتابخانه با استفاده از ویژگیهایی مانند AJAX، CSS Transitions، WebSockets و Server Sent Events، توسعه رابط کاربری مدرن را با سادگی و قدرت هایپرتکست امکانپذیر میسازد.
نصب htmx
برای استفاده از htmx، میتوانید از CDN استفاده کنید یا فایل
به عنوان مثال:
مثالهای htmx
در زیر چند مثال از کاربرد htmx آورده شده است:
AJAX
این دکمه با استفاده از ویژگیهای
مثال 2:
بارگزاری lazy
این مثال نشان میدهد که چگونه میتوان محتوایی را با استفاده از
برای مثالهای بیشتر و جزئیات کاملتر، میتوانید به مستندات htmx مراجعه کنید.
Documentation:
https://htmx.org/docs
Examples:
https://htmx.org/examples/
(6) آشنایی با HTMX – دیگر به جاوا اسکریپت نیازی ندارید! - راکت.
https://roocket.ir/articles/htmx
#htmx
@Syntax_fa
htmx چیست؟
یک کتابخانه جاوا اسکریپت است که امکان دسترسی به ویژگیهای مدرن مرورگرها را مستقیماً از طریق HTML فراهم میکند. این کتابخانه با استفاده از ویژگیهایی مانند AJAX، CSS Transitions، WebSockets و Server Sent Events، توسعه رابط کاربری مدرن را با سادگی و قدرت هایپرتکست امکانپذیر میسازد.
نصب htmx
برای استفاده از htmx، میتوانید از CDN استفاده کنید یا فایل
htmx.min.js را به پروژه خود اضافه کنید. به عنوان مثال:
<noscript src="https://unpkg.com/htmx.org@1.9.11"></noscript>
مثالهای htmx
در زیر چند مثال از کاربرد htmx آورده شده است:
AJAX
<!-- دکمهای که با کلیک کردن، یک درخواست AJAX ارسال میکند -->
<button hx-post="/clicked" hx-swap="outerHTML">کلیک کنید</button>
این دکمه با استفاده از ویژگیهای
hx-post و hx-swap، به htmx میگوید که با کلیک کردن روی دکمه، یک درخواست AJAX به آدرس /clicked ارسال کند و محتوای دکمه را با پاسخ HTML جایگزین کند¹.مثال 2:
بارگزاری lazy
<!-- محتوایی که به صورت lazy بارگذاری میشود -->
<div hx-get="/lazy-content" hx-trigger="revealed">
More content...
</div>
این مثال نشان میدهد که چگونه میتوان محتوایی را با استفاده از
hx-get و hx-trigger به صورت lazy بارگذاری کرد، به طوری که هنگامی که کاربر به انتهای صفحه میرسد، محتوای جدید بارگذاری میشود.برای مثالهای بیشتر و جزئیات کاملتر، میتوانید به مستندات htmx مراجعه کنید.
Documentation:
https://htmx.org/docs
Examples:
https://htmx.org/examples/
(6) آشنایی با HTMX – دیگر به جاوا اسکریپت نیازی ندارید! - راکت.
https://roocket.ir/articles/htmx
#htmx
@Syntax_fa
👍8
در اکثر پروژه های نرم افزاری این که یک مشکلی چطور حل میشه اصلا برای کارفرما مهم نیست، اونا به دنبال نتیجه و راهکار هستند. راهکاری که درد و مشکلشون رو رفع کنه.
اگر در ارتباط با کارفرما بیش از حد به مسائل فنی و جزئیات پیاده سازی بپردازید، اون رو می ترسونید و به شکایت کارفرما نزدیکتر خواهید شد.
✅ 10 توصیه مهم هم از من بشنوید برای اینکه ارتباط بهتری با کارفرما بگیرید و در نهایت حال خوب شما و اون بیشتر باشه:
1. اول از همه، وقت بذارید تا بفهمید کارفرما دقیقاً چی از شما میخواد. این یعنی سؤالات دقیق بپرسید و با تمام وجود گوش کنید، فعالانه گوش کنید!
2. به جای اینکه فقط یک طرفه صحبت کنید، سعی کنید یک گفتگوی دو طرفه شکل بدید. خیلی مهمه که کارفرما حس کنه نظرش براتون ارزشمنده. اینا نقش سوال پرسیدن های هدفمند خیلی کلیدی هست.
3. سعی کنید از اصطلاحات فنی زیاد استفاده نکنید. بیشتر سعی کنید با زبان ساده حرف بزنید تا همه بتوانند منظور شما را به راحتی درک کنند. من همیشه گفتم که هر چی فنی تر صحبت کنی کارفرما رو بیشتر می ترسونی!
4. روی این تمرکز کنید که چطور راهحلهاتون میتونند به کارفرما کمک کنند تا به اهدافش برسه. در نهایت باید درد اون برطرف شه.
5. به کارفرما گزینههای مختلفی ارائه بدید و برای هر کدوم مزایا و معایب رو شرح بدهید تا بتونه یک تصمیم آگاهانه بگیره. می خواید کاریزماتیک تر باشی، نظر قاطعانه خودتون در مورد گزینه ای که برای کارفرما بهتر هست رو هم مطرح کنید.
6. توی جلسات به موقع حاضر بشید، ارائههاتون رو منظم و حرفهای انجام بدهید و باز اینجا مراقب باشید فنی گویی بیش از حد نداشته باشید!
7. از کارفرما بخواید تا در طول فرایند، نظراتش رو با شما به اشتراک بذاره. این طوری اونها حس میکنن که واقعاً بهشون اهمیت میدید.
8. داستانهایی بگید که نشون میده راه حلهای شما چطور تونسته در گذشته مشکلات مشابهی رو حل کنه. داستان گویی در اینجا هوشمندانه ترین روش ایجاد اعتبار و دلگرم کردن کارفرما از کارا بودن راهکار شماست.
9. صبور باشید و برای پاسخگویی به سؤالات، همیشه آماده باشید.
10. و در آخر اینکه، نشون بدید که شما به دنبال یادگیری و بهبود مداوم هستید تا بتونید بهترین خدمات رو به کارفرما ارائه بدید.
link
#note
@Syntax_fa
اگر در ارتباط با کارفرما بیش از حد به مسائل فنی و جزئیات پیاده سازی بپردازید، اون رو می ترسونید و به شکایت کارفرما نزدیکتر خواهید شد.
✅ 10 توصیه مهم هم از من بشنوید برای اینکه ارتباط بهتری با کارفرما بگیرید و در نهایت حال خوب شما و اون بیشتر باشه:
1. اول از همه، وقت بذارید تا بفهمید کارفرما دقیقاً چی از شما میخواد. این یعنی سؤالات دقیق بپرسید و با تمام وجود گوش کنید، فعالانه گوش کنید!
2. به جای اینکه فقط یک طرفه صحبت کنید، سعی کنید یک گفتگوی دو طرفه شکل بدید. خیلی مهمه که کارفرما حس کنه نظرش براتون ارزشمنده. اینا نقش سوال پرسیدن های هدفمند خیلی کلیدی هست.
3. سعی کنید از اصطلاحات فنی زیاد استفاده نکنید. بیشتر سعی کنید با زبان ساده حرف بزنید تا همه بتوانند منظور شما را به راحتی درک کنند. من همیشه گفتم که هر چی فنی تر صحبت کنی کارفرما رو بیشتر می ترسونی!
4. روی این تمرکز کنید که چطور راهحلهاتون میتونند به کارفرما کمک کنند تا به اهدافش برسه. در نهایت باید درد اون برطرف شه.
5. به کارفرما گزینههای مختلفی ارائه بدید و برای هر کدوم مزایا و معایب رو شرح بدهید تا بتونه یک تصمیم آگاهانه بگیره. می خواید کاریزماتیک تر باشی، نظر قاطعانه خودتون در مورد گزینه ای که برای کارفرما بهتر هست رو هم مطرح کنید.
6. توی جلسات به موقع حاضر بشید، ارائههاتون رو منظم و حرفهای انجام بدهید و باز اینجا مراقب باشید فنی گویی بیش از حد نداشته باشید!
7. از کارفرما بخواید تا در طول فرایند، نظراتش رو با شما به اشتراک بذاره. این طوری اونها حس میکنن که واقعاً بهشون اهمیت میدید.
8. داستانهایی بگید که نشون میده راه حلهای شما چطور تونسته در گذشته مشکلات مشابهی رو حل کنه. داستان گویی در اینجا هوشمندانه ترین روش ایجاد اعتبار و دلگرم کردن کارفرما از کارا بودن راهکار شماست.
9. صبور باشید و برای پاسخگویی به سؤالات، همیشه آماده باشید.
10. و در آخر اینکه، نشون بدید که شما به دنبال یادگیری و بهبود مداوم هستید تا بتونید بهترین خدمات رو به کارفرما ارائه بدید.
link
#note
@Syntax_fa
👍11
چند نکته طلایی موقعی که دارید از django orm استفاده می کنید.
(قسمت اول)
1. کوئری ست هارو کاربردی بزنید:
از filters و annotations و aggregation استفاده کنید تا فیلد هایی که نیاز دراید رو با کمترین سربار دریافت کنید.
همچنین از متد defer و only برای محدود کردن فیلد هایی که قراره از دیتابیس بگیرید استفاده کنید تا optimize تر بشه کوئری شما و همچنین مصرف مموری نیز کمتر بشه.
2. ایندکس کردن:
استفاده کردن از ایندکس کلید افزایش کارامدی و سرعت کوئری های شما هستش.
هر فیلدی که قراره زیاد توی Where استفاده کنید رو پیشنهاد میشه ایندکس کنید.
همچنین ممکنه ایندکس کردن مخرب هم باشه. به این لینک سر بزنید:
https://python.plainenglish.io/mastering-the-art-of-meeting-database-indexing-needs-8b891e74794b
3. کوئری ها بصورت defer اجرا میشن!!
جنگو orm از این روش استفاده می کند تا کوئری ها تنها زمانی اجرا بشن که شما بهشون نیاز دارید. یعنی وقتی شما مینویسید
users = User.objects.all()
این کوئری اجرا نمیشود، تا زمانی که شما از مقدار users استفاده کنید.
همچنین اگه شما حواستون نباشه ممکنه یک اشتباه خیلی بزرگ انجام بدید. به مثال زیر دقت کنید:
تو این مثال هربار که blog.author رو میزنیم، یک hint سمت دیتابیس زده میشه.
4. از select_related و prefetch_related استفاده کنید.
این دو متد میتونن وقتی که توی مدلتون related دارید، تعداد کوئری هایی که سمت دیتابیس زده میشن رو خیلی کاهش بدن.
از select_related زمانی استفاده میشه که شما یک تک رابطه دارید. و از prefetch_related زمانی استفاده میشه که شما چندین رابطه دارید. مثلا:
5. از n + 1 اجتناب کنید!
مشکل n + 1 زمانی اتفاق میوفته که شما میخواید مجموعه از آبجکت هارو بگیرید. مثلا فرض کنید مدل پست رو داریم. مدل پست n تا کامنت داره.
زمانی که شما میخواید تک تک کامنت هارو بگیرید و اطلاعاتش رو نشون بدید با n + 1 مواجه میشوید.
یک یعنی کوئری که برای گرفتن پست زده شده، و n تعداد کوئری هایی که برای گرفتن کامنت ها زده شده. از این قبیل مشکلات رو خیلی راحت میتونیم با select_related و prefetch_related برطرف کنیم و با یک کوئری اطلاعات تمامی کامنت هارو هم بگیریم(این رو هم در نظر بگیرید هر چقدر کامنت ها بیشتر باشه، کوئری که میزنیم سنگین تر میشه).
link
#django #orm
@Syntax_fa
(قسمت اول)
1. کوئری ست هارو کاربردی بزنید:
از filters و annotations و aggregation استفاده کنید تا فیلد هایی که نیاز دراید رو با کمترین سربار دریافت کنید.
همچنین از متد defer و only برای محدود کردن فیلد هایی که قراره از دیتابیس بگیرید استفاده کنید تا optimize تر بشه کوئری شما و همچنین مصرف مموری نیز کمتر بشه.
# Fetches specific fields to avoid unneccessory fields fetch and store into the memory
blogs = Blog.objects.only('noscript', 'is_active').filter(category='tech')
2. ایندکس کردن:
استفاده کردن از ایندکس کلید افزایش کارامدی و سرعت کوئری های شما هستش.
هر فیلدی که قراره زیاد توی Where استفاده کنید رو پیشنهاد میشه ایندکس کنید.
# Adding an index to the "category" column for faster searches via category
class Blog(models.Model):
noscript = models.CharField(max_length=100)
category = models.CharField(max_length=50, db_index=True)
# ...
همچنین ممکنه ایندکس کردن مخرب هم باشه. به این لینک سر بزنید:
https://python.plainenglish.io/mastering-the-art-of-meeting-database-indexing-needs-8b891e74794b
3. کوئری ها بصورت defer اجرا میشن!!
جنگو orm از این روش استفاده می کند تا کوئری ها تنها زمانی اجرا بشن که شما بهشون نیاز دارید. یعنی وقتی شما مینویسید
users = User.objects.all()
این کوئری اجرا نمیشود، تا زمانی که شما از مقدار users استفاده کنید.
همچنین اگه شما حواستون نباشه ممکنه یک اشتباه خیلی بزرگ انجام بدید. به مثال زیر دقت کنید:
# Queries are executed when data is actually needed, minimizing unnecessary hits
blogs = Blog.objects.all()
for blog in blogs:
print(blog.author) # Each blog's author query is executed here
تو این مثال هربار که blog.author رو میزنیم، یک hint سمت دیتابیس زده میشه.
4. از select_related و prefetch_related استفاده کنید.
این دو متد میتونن وقتی که توی مدلتون related دارید، تعداد کوئری هایی که سمت دیتابیس زده میشن رو خیلی کاهش بدن.
از select_related زمانی استفاده میشه که شما یک تک رابطه دارید. و از prefetch_related زمانی استفاده میشه که شما چندین رابطه دارید. مثلا:
# Reduces database queries using select_related when accessing related objects
blogs = Blog.objects.select_related('author').all()
for blog in blogs:
print(blog.author)
# Retrieves related objects in separate queries using prefetch_related, improving performance
authors = Author.objects.prefetch_related('blogs').all()
for author in authors:
for blog in author.blogs.all():
print(post)
5. از n + 1 اجتناب کنید!
مشکل n + 1 زمانی اتفاق میوفته که شما میخواید مجموعه از آبجکت هارو بگیرید. مثلا فرض کنید مدل پست رو داریم. مدل پست n تا کامنت داره.
زمانی که شما میخواید تک تک کامنت هارو بگیرید و اطلاعاتش رو نشون بدید با n + 1 مواجه میشوید.
یک یعنی کوئری که برای گرفتن پست زده شده، و n تعداد کوئری هایی که برای گرفتن کامنت ها زده شده. از این قبیل مشکلات رو خیلی راحت میتونیم با select_related و prefetch_related برطرف کنیم و با یک کوئری اطلاعات تمامی کامنت هارو هم بگیریم(این رو هم در نظر بگیرید هر چقدر کامنت ها بیشتر باشه، کوئری که میزنیم سنگین تر میشه).
# Using prefetch_related to fetch related comments efficiently
blogs = Blog.objects.prefetch_related('comments').all()
for blog in blogs:
for comment in blog.comments.all():
print(comment)
link
#django #orm
@Syntax_fa
🔥11
Syntax | سینتکس
چند نکته طلایی موقعی که دارید از django orm استفاده می کنید. (قسمت اول) 1. کوئری ست هارو کاربردی بزنید: از filters و annotations و aggregation استفاده کنید تا فیلد هایی که نیاز دراید رو با کمترین سربار دریافت کنید. همچنین از متد defer و only برای محدود کردن…
چند نکته طلایی موقعی که داری از django orm استفاده می کنی.
(قسمت دوم)
6. افزایش پرفورمنس با استفاده از کش کردن.
کش کردن باعث میشه تعداد کوئری هایی که سمت دیتابیس میزنیم کاهش پیدا کنه. همچنین ریسپانس تایم دریافت اطلاعات خیلی کمتر بشه.
براش کش کردن می تونید از کش فریم ورک built-in جنگو استفاده کنید.
7. وقتی صحبت از آپدیت کردن و دیلیت کردن چندین row می شه، جنگو دو متد به اسم delete و update در اختیار ما قرار داده تا با پرفورمنس بهتر و سربار کمتر عملیات آپدیت و دیلیت کردن رو انجام بدیم.
8. بررسی و آنالیز کردن:
برای بررسی و دیباگ کردن، ابزار های زیادی در جنگو وجود دارد. مانند django debug toolbar. آنالیز کردن کوئری ها باعث میشه متوجه باتل نک ها شویم و بتونیم پرفومنس کوئری هارو افزایش بدیم.
9. از متد explain جنگو orm استفاده کن!!
همیشه از این متد استفاده کنید تا مطمئن شوید کوئری sql که orm برای شما ساخته است بهینه است و همان چیزی است که شما می خواهید.
10. عملیات هارو داخل دیتابیس انجام بده، نه توی زبان برنامه نویسی!!
کار های پایه رو میتونی با متد filter و exclude جنگو orm انجام بدی.
انجام یک سری عملیات ها روی فیلد هارو با F expression انجام بده
از annotation و aggregation استفاده کن
link
#django #orm
@Syntax_fa
(قسمت دوم)
6. افزایش پرفورمنس با استفاده از کش کردن.
کش کردن باعث میشه تعداد کوئری هایی که سمت دیتابیس میزنیم کاهش پیدا کنه. همچنین ریسپانس تایم دریافت اطلاعات خیلی کمتر بشه.
براش کش کردن می تونید از کش فریم ورک built-in جنگو استفاده کنید.
from django.core.cache import cache
# Retrieve posts from cache, if available
cached_posts = cache.get('all_posts')
if cached_posts is None:
cached_posts = list(Post.objects.all())
cache.set('all_posts', cached_posts)
7. وقتی صحبت از آپدیت کردن و دیلیت کردن چندین row می شه، جنگو دو متد به اسم delete و update در اختیار ما قرار داده تا با پرفورمنس بهتر و سربار کمتر عملیات آپدیت و دیلیت کردن رو انجام بدیم.
# Updating multiple posts' status in a single query
Blog.objects.filter(category='draft').update(status='published')
8. بررسی و آنالیز کردن:
برای بررسی و دیباگ کردن، ابزار های زیادی در جنگو وجود دارد. مانند django debug toolbar. آنالیز کردن کوئری ها باعث میشه متوجه باتل نک ها شویم و بتونیم پرفومنس کوئری هارو افزایش بدیم.
9. از متد explain جنگو orm استفاده کن!!
همیشه از این متد استفاده کنید تا مطمئن شوید کوئری sql که orm برای شما ساخته است بهینه است و همان چیزی است که شما می خواهید.
10. عملیات هارو داخل دیتابیس انجام بده، نه توی زبان برنامه نویسی!!
کار های پایه رو میتونی با متد filter و exclude جنگو orm انجام بدی.
انجام یک سری عملیات ها روی فیلد هارو با F expression انجام بده
از annotation و aggregation استفاده کن
link
#django #orm
@Syntax_fa
👍11