جنگولرن
با لود نشدن فایل های استاتیک و سرو کردنشون توی وب سرور مشکل دارید؟ و هر بار یادتون میره راه درستش چیه؟
نکته هایی در مورد فایل های استاتیک جنگو - بخش اول
داکیومنت محترم جنگو صراحتا گفته:
توی development (یعنی وقتی Debug=True هست) جنگو خودش فایل های استاتیک رو سرو میکنه.
به شرط اینکه اپ django.contrib.staticfiles توی INSTALLED_APPS باشه.
بعد گفته که STATIC_URL رو اینجوری تعریف کنید (پیش فرض اینه)
این چکار میکنه، هر وقت از تمپلت تگ static توی تمپلت ها استفاده می کنیم، مسیر فایل های استاتیک با این شروع میشه.
دقت کن آخرش یه اسلش هست، اگه آخرش اسلش رو نذاری، این خطارو میده و کلا پروژه ران نمیشه:
The STATIC_URL setting must end with a slash
خب حالا اگه این بخشی از تمپلت ما باشه، باید اول static رو لود کنیم. و بعدش از تمپلت تگ static استفاده کنیم:
جای اون static پایینی مسیر قرار میگیره.
مثلا سایتم ali.com باشه میشه:
ali.com/static/css/style.css
اگه اینارو میدونی یه 🥱 بزار
وگرنه هر چی دوس داری بزار 😅
ادامه دارد...
داکیومنت محترم جنگو صراحتا گفته:
توی development (یعنی وقتی Debug=True هست) جنگو خودش فایل های استاتیک رو سرو میکنه.
به شرط اینکه اپ django.contrib.staticfiles توی INSTALLED_APPS باشه.
بعد گفته که STATIC_URL رو اینجوری تعریف کنید (پیش فرض اینه)
STATIC_URL = "static/"
این چکار میکنه، هر وقت از تمپلت تگ static توی تمپلت ها استفاده می کنیم، مسیر فایل های استاتیک با این شروع میشه.
دقت کن آخرش یه اسلش هست، اگه آخرش اسلش رو نذاری، این خطارو میده و کلا پروژه ران نمیشه:
The STATIC_URL setting must end with a slash
خب حالا اگه این بخشی از تمپلت ما باشه، باید اول static رو لود کنیم. و بعدش از تمپلت تگ static استفاده کنیم:
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
جای اون static پایینی مسیر قرار میگیره.
مثلا سایتم ali.com باشه میشه:
ali.com/static/css/style.css
اگه اینارو میدونی یه 🥱 بزار
وگرنه هر چی دوس داری بزار 😅
ادامه دارد...
🥱58❤10🔥4
جنگولرن
با لود نشدن فایل های استاتیک و سرو کردنشون توی وب سرور مشکل دارید؟ و هر بار یادتون میره راه درستش چیه؟
نکته هایی در مورد فایل های استاتیک جنگو - بخش دوم
خب ما STATIC_URL رو مشخص کردیم.
حالا جنگو کجا باید دنبال فایل های استاتیک ما باشه؟
یکی از دوستان، توی کامنت ها نوشته:
جنگو انتظار داره هر app فایل های استاتیک خودش رو داشته باشه.
مثل اپ ع admin که اونم خودش یه فولدر به اسم static داره. و توی اون فولدر یه فولدر به اسم admin . استاتیک هاش اونجا هستن.
پس اگه اسم اپ ما shop هست. فایل های استاتیک اینجوری میشن:
shop/static/css/style.css
چرا؟
چون توی تمپلت اینجوری نوشته بودم، توی پست قبلی (بخش اول):
مثال داکیومنت جنگو اسم اپ رو توی تمپلت آورده (این مثالش):
و گفته فولدر ها باید اینجوری باشن، اسم اپ بعد static اومده:
my_app/static/my_app/example.jpg
✔️جنگو اول STATICFILES_DIRS رو میگرده بعد app هارو میگرده، یعنی اگه استایل مشترکی توی این فولدرها باشه، اولویت با STATICFILES_DIRS هست.
احتمالا کاربرد STATICFILES_DIRS رو متوجه شدید؟
بله، برای اینه که اگه فایل استاتیکی داریم که نمیخواهیم توی اپ خاصی باشه (مثلا دلیل مون اینه که مشترک هستن بین همه اپ ها)، پس توی این آرایه میزایمش، مثال جنگو اینه:
حالا یه نکته مهم:
✔️نباید STATIC_ROOT برابر با یکی از مسیرهای آرایه STATICFILES_DIRS باشه. وگرنه این خطارو میده:
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
چرا؟
چون بعدا که میخواهیم دستور collectstatic رو اجرا کنیم، قاطی میکنه دیگه. چون این دستور همه static هارو یکجا جمع میکنه، که بدیم وب سرور serve شون کنه.
پس STATIC_ROOT برای مشخص کردن مسیر همه فایل های استاتیک، هنگام دیپلوی هست. (وقتی میخوایم پروژه رو ببریم روی اینترنت)
مقدار پیش فرض STATIC_ROOT برابر None هست. و اگه بخواهیم collectstatic کنیم باید بهش مقدار بدیم (اسم یا مسیر یه فولدر، اسلش آخرش هم نمیخواد 😁 )
زیاد شد، بقیه بعدا...
یه سوال بپرسم: چه زمانی لازمه اینکارو کنیم؟
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
اگه همه این نکات رو میدونستی یه 🥱
وگرنه هر چی دلت خواست
اسپانسر این پست 👈 لینک
خب ما STATIC_URL رو مشخص کردیم.
حالا جنگو کجا باید دنبال فایل های استاتیک ما باشه؟
یکی از دوستان، توی کامنت ها نوشته:
من دقیقا همینکارو میکنم لود نمیکنه
باید حتما تو
STATICFILES_DIRS
تعریف کنم تا لود شه
جنگو انتظار داره هر app فایل های استاتیک خودش رو داشته باشه.
مثل اپ ع admin که اونم خودش یه فولدر به اسم static داره. و توی اون فولدر یه فولدر به اسم admin . استاتیک هاش اونجا هستن.
پس اگه اسم اپ ما shop هست. فایل های استاتیک اینجوری میشن:
shop/static/css/style.css
چرا؟
چون توی تمپلت اینجوری نوشته بودم، توی پست قبلی (بخش اول):
href="{% static 'css/style.css' %}"
مثال داکیومنت جنگو اسم اپ رو توی تمپلت آورده (این مثالش):
{% load static %}
<img src="{% static 'my_app/example.jpg' %}" alt="My image">
و گفته فولدر ها باید اینجوری باشن، اسم اپ بعد static اومده:
my_app/static/my_app/example.jpg
✔️جنگو اول STATICFILES_DIRS رو میگرده بعد app هارو میگرده، یعنی اگه استایل مشترکی توی این فولدرها باشه، اولویت با STATICFILES_DIRS هست.
احتمالا کاربرد STATICFILES_DIRS رو متوجه شدید؟
بله، برای اینه که اگه فایل استاتیکی داریم که نمیخواهیم توی اپ خاصی باشه (مثلا دلیل مون اینه که مشترک هستن بین همه اپ ها)، پس توی این آرایه میزایمش، مثال جنگو اینه:
STATICFILES_DIRS = [
BASE_DIR / "static",
"/var/www/static/",
]
حالا یه نکته مهم:
✔️نباید STATIC_ROOT برابر با یکی از مسیرهای آرایه STATICFILES_DIRS باشه. وگرنه این خطارو میده:
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
چرا؟
چون بعدا که میخواهیم دستور collectstatic رو اجرا کنیم، قاطی میکنه دیگه. چون این دستور همه static هارو یکجا جمع میکنه، که بدیم وب سرور serve شون کنه.
پس STATIC_ROOT برای مشخص کردن مسیر همه فایل های استاتیک، هنگام دیپلوی هست. (وقتی میخوایم پروژه رو ببریم روی اینترنت)
مقدار پیش فرض STATIC_ROOT برابر None هست. و اگه بخواهیم collectstatic کنیم باید بهش مقدار بدیم (اسم یا مسیر یه فولدر، اسلش آخرش هم نمیخواد 😁 )
زیاد شد، بقیه بعدا...
یه سوال بپرسم: چه زمانی لازمه اینکارو کنیم؟
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
اگه همه این نکات رو میدونستی یه 🥱
وگرنه هر چی دلت خواست
اسپانسر این پست 👈 لینک
🔥15👍6🥱6❤4
توی پروژه هایی که برای مشتری انجام میدید، برای سئو کاری می کنید؟
Final Results
16%
خودم همه کارهای جنگو و سئو رو انجام میدم
20%
بخش هایی که به جنگو ارتباط داره رو من انجام میدم، بقیه کارهای سئو ، همکارم
5%
برای مشتری وردپرس میزنم که سئو ش خوب بشه
25%
پول خوب برای سئو نمیدن، منم چیزی نمیگم
33%
سئو چیه؟؟؟
😁1
Forwarded from TheAliBigdeli Channel
🎉 روز برنامهنویس مبارک!
بی شیرینی که نمیشه 😅 پس بذاریم یه کم خودمونی جشن بگیریم...
ما برنامهنویسها یه دنیای خاص داریم. پر از شببیداری، کلی باگ و خطا که آخرش با یه «آها گرفتم!» تموم میشه. هیچکس نمیدونه پشت هر اپلیکیشنی که استفاده میکنن، چقدر کد و تلاش خوابیده.
گاهی ساعتها زل میزنیم به مانیتور برای پیدا کردن یه نقطهویرگول جاافتاده، اما همون لحظهای که مشکل حل میشه، همه سختیاش شیرین میشه.
خودمونیتر بخواین بگم، چند تا ویژگی خاص هم داریم که همه جا شوخیشو میکنن:
☕️ قهوه توی خونمونه
😴 باگهامونو حتی تو خواب دیباگ میکنیم
⏰ تقویممون پر از ددلاینه
🔍 رفیق صمیمیمون گوگل و استکاورفلوئه (که جدیدا از GPT دلخور شدن!)
😅 وقتی کدمون درست کار میکنه، خودمونم باور نمیکنیم
به همین بهونه، مکتبخونه یه طرح ویژه برای روز برنامه نویس گذاشته که فقط ۲ روز فعاله. بهترین فرصته برای ما برنامهنویسها که روی خودمون سرمایهگذاری کنیم و مهارتامونو ببریم چند لِول بالاتر.
📌 لینک طرح و دورهها:
https://mktb.me/quqf/
📢 @thealibigdeli_channel
بی شیرینی که نمیشه 😅 پس بذاریم یه کم خودمونی جشن بگیریم...
ما برنامهنویسها یه دنیای خاص داریم. پر از شببیداری، کلی باگ و خطا که آخرش با یه «آها گرفتم!» تموم میشه. هیچکس نمیدونه پشت هر اپلیکیشنی که استفاده میکنن، چقدر کد و تلاش خوابیده.
گاهی ساعتها زل میزنیم به مانیتور برای پیدا کردن یه نقطهویرگول جاافتاده، اما همون لحظهای که مشکل حل میشه، همه سختیاش شیرین میشه.
خودمونیتر بخواین بگم، چند تا ویژگی خاص هم داریم که همه جا شوخیشو میکنن:
☕️ قهوه توی خونمونه
😴 باگهامونو حتی تو خواب دیباگ میکنیم
⏰ تقویممون پر از ددلاینه
🔍 رفیق صمیمیمون گوگل و استکاورفلوئه (که جدیدا از GPT دلخور شدن!)
😅 وقتی کدمون درست کار میکنه، خودمونم باور نمیکنیم
به همین بهونه، مکتبخونه یه طرح ویژه برای روز برنامه نویس گذاشته که فقط ۲ روز فعاله. بهترین فرصته برای ما برنامهنویسها که روی خودمون سرمایهگذاری کنیم و مهارتامونو ببریم چند لِول بالاتر.
📌 لینک طرح و دورهها:
https://mktb.me/quqf/
📢 @thealibigdeli_channel
❤8🔥4
جنگولرن
توی پروژه هایی که برای مشتری انجام میدید، برای سئو کاری می کنید؟
تگ کنونیکال یا Canonical چیه؟
تگ canonical در واقع یک تگ ع link ع که خاصیت rel="canonical" داره. (یکم به هم ریخت)
به صورت کلی، برای این ازش استفاده میکنن، که به ربات های search engine ها، نسخه اصلی مطلب رو معرفی کنن.
یعنی چی؟
فرض کنید یه محتوا دارید، که توی دو تا لینک قرار داره، مثال ساده ش اینه که مثلا سایت شما هم http باز بشه، هم https
پس مطلبی که دارید، دو تا آدرس داره.
با کنونیکال میشه بگیم، کدوم مطلب اصلی هست.
توی سایت websima (این لینک) خیلی کامل توضیح داده که چه مواقعی ممکنه ما مطلب یکسان با لینک های متفاوت داشته باشیم.
ارتباطش به جنگو چیه؟
شما به عنوان برنامه نویس جنگو باید اینو هندل کنید.
پس خوبه یه حداقل هایی ازش بدونید.
البته که سئو کار باید توضیح بده چی میخواد 😁
میدونستی؟ 🥱 بزار
این پست اسپانسر نداره، شما 🫵🏼 می تونید اسپانسرش بشید 😈
تگ canonical در واقع یک تگ ع link ع که خاصیت rel="canonical" داره. (یکم به هم ریخت)
به صورت کلی، برای این ازش استفاده میکنن، که به ربات های search engine ها، نسخه اصلی مطلب رو معرفی کنن.
یعنی چی؟
فرض کنید یه محتوا دارید، که توی دو تا لینک قرار داره، مثال ساده ش اینه که مثلا سایت شما هم http باز بشه، هم https
پس مطلبی که دارید، دو تا آدرس داره.
با کنونیکال میشه بگیم، کدوم مطلب اصلی هست.
توی سایت websima (این لینک) خیلی کامل توضیح داده که چه مواقعی ممکنه ما مطلب یکسان با لینک های متفاوت داشته باشیم.
ارتباطش به جنگو چیه؟
شما به عنوان برنامه نویس جنگو باید اینو هندل کنید.
پس خوبه یه حداقل هایی ازش بدونید.
البته که سئو کار باید توضیح بده چی میخواد 😁
میدونستی؟ 🥱 بزار
این پست اسپانسر نداره، شما 🫵🏼 می تونید اسپانسرش بشید 😈
👍15✍5❤1🥱1
بی ربط به جنگو، ولی به درد بخور
حرفه ای ها نخونن 😁
از لینکدین Manoocher Eshrati
حتماً براتون پیش اومده که ویندوز هنگ کنه، صفحه سیاه بشه، یا پروژکتور/مانیتور دوم شناخته نشه... و همه دارن نگاهتون میکنن که "چیکار کنیم؟!" 😅
💡 کافیه این ترکیب کلید رو بزنید:
Win + Ctrl + Shift + B
این دستور، درایور گرافیک رو ریاستارت میکنه، بدون اینکه نیاز باشه سیستم رو ریبوت کنید یا لاگاوت بزنید.
یعنی در کمتر از ۲ ثانیه، صفحه برمیگرده و انگار هیچی نشده!
Ctrl + Shift + Esc
باز کردن سریع Task Manager
Win + Ctrl + ← / →
جابهجایی بین دسکتاپهای مجازی.
Win + ↑ / ↓ / ← / →
تغییر اندازه و اسنپ کردن پنجره به گوشهها.
Win + Pause/Break
باز کردن پنجره System (مشخصات سیستم).
Win + , (کاما)
Peek Desktop (نمایش سریع دسکتاپ تا وقتی کلید رو نگهداشتی).
بله، درسته ویندوز برای ما مبتدی هاس 🤓
ای ویندوزی ع آماتور، اینو save کن، به درد میخوره
حرفه ای ها نخونن 😁
از لینکدین Manoocher Eshrati
حتماً براتون پیش اومده که ویندوز هنگ کنه، صفحه سیاه بشه، یا پروژکتور/مانیتور دوم شناخته نشه... و همه دارن نگاهتون میکنن که "چیکار کنیم؟!" 😅
💡 کافیه این ترکیب کلید رو بزنید:
Win + Ctrl + Shift + B
این دستور، درایور گرافیک رو ریاستارت میکنه، بدون اینکه نیاز باشه سیستم رو ریبوت کنید یا لاگاوت بزنید.
یعنی در کمتر از ۲ ثانیه، صفحه برمیگرده و انگار هیچی نشده!
اینارو هم خودم اضافه کنم:
Ctrl + Shift + Esc
باز کردن سریع Task Manager
Win + Ctrl + ← / →
جابهجایی بین دسکتاپهای مجازی.
Win + ↑ / ↓ / ← / →
تغییر اندازه و اسنپ کردن پنجره به گوشهها.
Win + Pause/Break
باز کردن پنجره System (مشخصات سیستم).
Win + , (کاما)
Peek Desktop (نمایش سریع دسکتاپ تا وقتی کلید رو نگهداشتی).
بله، درسته ویندوز برای ما مبتدی هاس 🤓
ای ویندوزی ع آماتور، اینو save کن، به درد میخوره
👍15
چرا در محیط پروداکشن نباید از سیستم cache پیشفرض جنگو استفاده کنیم؟
جواب:
چون برای پروداکشن مناسب نیست، برای development مناسبه.
چون آقای داکیومنت جنگو میگه:
Note that each process will have its own private cache instance, which means no cross-process caching is possible. This also means the local memory cache isn’t particularly memory-efficient, so it’s probably not a good choice for production environments. It’s nice for development.
راحت تر بگم:
به صورت پیشفرض، اگه backend برای cache تعریف نکنیم، خودش روی LocMemCache تنظیم شده.
و اگه مثلا اینجوری چیزی رو کش کنیم:
روی لوکال و با runserver اوکیه همه چی😎
اما اگه پروژه رو ببریم روی سرور و مثلا از nginx و gunicorn استفاده کنیم، چون معمولا چندین worker process ساخته میشه
و هر process کش خودش رو داره، پس ممکنه دستور ع:
به دنیا سلام نکنه 😢
پس چکار میکنن؟
از بکندهای دیگه برای کش استفاده میشه، اینا بکندهای دیگه هستن
FileBasedCache
DatabaseCache
PyMemcacheCache
RedisCache
توصیه: برای هر پروژه ای، لازم نیست حتما بری سراغ ردیس. دیتابیس کش هم برای پروژه هایی که بزرگ نیستن خوبه.
میدونستی؟ 🥱 بزار
این پست اسپانسر نداره، شما 🫵🏼 می تونید اسپانسرش بشید 😈
جواب:
چون برای پروداکشن مناسب نیست، برای development مناسبه.
چون آقای داکیومنت جنگو میگه:
Note that each process will have its own private cache instance, which means no cross-process caching is possible. This also means the local memory cache isn’t particularly memory-efficient, so it’s probably not a good choice for production environments. It’s nice for development.
راحت تر بگم:
به صورت پیشفرض، اگه backend برای cache تعریف نکنیم، خودش روی LocMemCache تنظیم شده.
و اگه مثلا اینجوری چیزی رو کش کنیم:
cache.set("my_key", "hello, world!", 30)
روی لوکال و با runserver اوکیه همه چی😎
اما اگه پروژه رو ببریم روی سرور و مثلا از nginx و gunicorn استفاده کنیم، چون معمولا چندین worker process ساخته میشه
و هر process کش خودش رو داره، پس ممکنه دستور ع:
cache.get("my_key")
به دنیا سلام نکنه 😢
پس چکار میکنن؟
از بکندهای دیگه برای کش استفاده میشه، اینا بکندهای دیگه هستن
FileBasedCache
DatabaseCache
PyMemcacheCache
RedisCache
توصیه: برای هر پروژه ای، لازم نیست حتما بری سراغ ردیس. دیتابیس کش هم برای پروژه هایی که بزرگ نیستن خوبه.
میدونستی؟ 🥱 بزار
این پست اسپانسر نداره، شما 🫵🏼 می تونید اسپانسرش بشید 😈
👍32✍10❤7🆒3🔥2🥱2
Forwarded from Webinarfarsi | Soheib Kiani | وبینار فارسی
اخیرا یه سری آگهی در خصوص جذب نیرو اون هم به صورت «فقط سرباز امریه» گذاشتی، گفتم به عنوان کسی که همین الان امریه هست یه سری توضیحاتی رو بدم اگه صلاح دونستی با اعضا به اشتراک بذاری که مشکلی پیش نیاد.
نکته اول اینکه امریه به اون شکل مرسومش (امریه دانشبنیان) در حال حاضر شدنی نیست و با اینکه خبردرمانی شد و گفتن که مشکل حل شده، ولی من توی گروه سرباز دانشبنیان هستم و باید بگم که الان دو ماهه کسی قادر به ثبتنام نیست و معاونت هم به صورت خصوصی اگه سوال کنین میگه که فعلا ظرفیت تموم شده و مشغول مذاکره هستن.
در نتیجه اگر شرکتی ادعا میکنه میتونه سرباز امریه بگیره، یا دروغ هست و یا واقعا رابطهی قویای داره که همچنان به واسطه اون رابطه میتونه سرباز بگیره (که شدنی هم هست، یکی از دوستای من در فرآیندشه)
و اما در خصوص شرکتهایی که به صورت آزادانه و عمومی میگن «فقط» سرباز امریه میگیریم، چه در شرایط قبل که امریه راحتتر بود و چه الان که سخت شده: ترجیحا سمتشون نرن.
امریه شدن یه بحثی هست که کاملا ریسکی و شانسیه و وقتی شما به امید امریه شدن وارد یه شرکت میشین یعنی به اون شرکت اعتماد کردین که ظرفیتش و بُرشی که داره رو به شما اختصاص بده. پس باید بدونین که قراره یکی از این سه حالت پیش بیاد:
- یا اون شرکت واقعا برای شما احترام قائله و میخواد به شما کمک کنه که سربازی رو راحتتر طی کنین، و خب در این صورت احتمالا باید خیلی نیروی خفن و مهرهی کلیدی برای اون شرکت باشین
- اون شرکت داره شما رو گول میزنه و از اونجا که شما باید چند ماهی (حدود یک سال، حداقل) سابقه داشته باشین تا امریه بشین، تو این مدت شما رو به بیگاری میگیره (با حقوق و مزایای پایین) و در نهایت شما رو اخراج میکنه یا به هر بهونه امریه نمیکنه و مجبورتون میکنه تا خودتون از شرکت برید
- اون شرکت شما رو امریه خواهد کرد ولی با حقوق سرباز و مزایای پایین که بعضی وقتها این شرکتها آنچنان سطحشون پایین هست که میگی کاش میرفتم ۱۸ ماه بالای برجک ولی ۲۴ ماه نمیومدم سربازی برای این شرکت
~Ali Rashidi
نکته اول اینکه امریه به اون شکل مرسومش (امریه دانشبنیان) در حال حاضر شدنی نیست و با اینکه خبردرمانی شد و گفتن که مشکل حل شده، ولی من توی گروه سرباز دانشبنیان هستم و باید بگم که الان دو ماهه کسی قادر به ثبتنام نیست و معاونت هم به صورت خصوصی اگه سوال کنین میگه که فعلا ظرفیت تموم شده و مشغول مذاکره هستن.
در نتیجه اگر شرکتی ادعا میکنه میتونه سرباز امریه بگیره، یا دروغ هست و یا واقعا رابطهی قویای داره که همچنان به واسطه اون رابطه میتونه سرباز بگیره (که شدنی هم هست، یکی از دوستای من در فرآیندشه)
و اما در خصوص شرکتهایی که به صورت آزادانه و عمومی میگن «فقط» سرباز امریه میگیریم، چه در شرایط قبل که امریه راحتتر بود و چه الان که سخت شده: ترجیحا سمتشون نرن.
امریه شدن یه بحثی هست که کاملا ریسکی و شانسیه و وقتی شما به امید امریه شدن وارد یه شرکت میشین یعنی به اون شرکت اعتماد کردین که ظرفیتش و بُرشی که داره رو به شما اختصاص بده. پس باید بدونین که قراره یکی از این سه حالت پیش بیاد:
- یا اون شرکت واقعا برای شما احترام قائله و میخواد به شما کمک کنه که سربازی رو راحتتر طی کنین، و خب در این صورت احتمالا باید خیلی نیروی خفن و مهرهی کلیدی برای اون شرکت باشین
- اون شرکت داره شما رو گول میزنه و از اونجا که شما باید چند ماهی (حدود یک سال، حداقل) سابقه داشته باشین تا امریه بشین، تو این مدت شما رو به بیگاری میگیره (با حقوق و مزایای پایین) و در نهایت شما رو اخراج میکنه یا به هر بهونه امریه نمیکنه و مجبورتون میکنه تا خودتون از شرکت برید
- اون شرکت شما رو امریه خواهد کرد ولی با حقوق سرباز و مزایای پایین که بعضی وقتها این شرکتها آنچنان سطحشون پایین هست که میگی کاش میرفتم ۱۸ ماه بالای برجک ولی ۲۴ ماه نمیومدم سربازی برای این شرکت
~Ali Rashidi
👍12👏3❤2
Webinarfarsi | Soheib Kiani | وبینار فارسی
اخیرا یه سری آگهی در خصوص جذب نیرو اون هم به صورت «فقط سرباز امریه» گذاشتی، گفتم به عنوان کسی که همین الان امریه هست یه سری توضیحاتی رو بدم اگه صلاح دونستی با اعضا به اشتراک بذاری که مشکلی پیش نیاد. نکته اول اینکه امریه به اون شکل مرسومش (امریه دانشبنیان)…
نکته جالبی گفته.
لذا مراقب باشید
لذا مراقب باشید
👍9
توی معماری سیستم یک اصطلاحی داریم به اسم؛
distributed monolithic
که خب یک anti-pattern هست برای معماری micro-service اول هفته با یک شرکتی برای مشاوره صحبت کردیم (کارشون رو قبول نکردم ولی یک قرارداد کوچک بستم برای اینکه بگم مشکل فعلی سیستم کجاس)
معماری سیستم مثلاً قرار بوده micro-service باشه؛ در نگاه اول هم هست و حتی از تمام ابزارهای لازم هم داره استفاده میشه اما به اشتباه.
کل سیستم رو امروز کنار هم چیدم و روی یک سرور بالا آوردم (بجای چندتا سرور) و تبدیلش کردم به multi app monolithic اولش خیلی ناراحت و نگران بودند که پرفورمنس خراب میشه و ازین حرفا ولی بعد توی تستها دیدند که حداقل ۲ برابر سرعت پاسخ و تعداد درخواستهایی که هندل میشه بیشتره.
البته من مطمئن بودم که اینطوری میشه به سه دلیل :
۱- به وضوح anti pattern رو میدیدم
۲- تعداد درخواستهای بین سرویسها زیاد بود
۳- خیلی از زمان پروفایلنگ، برای درخواست بین سرویسها هدر میرفت روی نتورک. (که خب حتی async هم نبود که حداقل cpu هدر نره)
این موضوع دلیلی شد؛ بیام چندتا تعریف اشتباه که دائم میشنوم رو انتقال بدم:
۱- توی ماکروسرویس هر سرویس باید دیتابیس جدا داشته باشه.
این تعریف درسته، اما تفسیر غلط ازش زیاده؛ مثلاً ۹۹٪ فکر میکنند این یعنی برای هر سرویس باید یک سرور Postgres جدا داشته باشند، نه لزوماً مفهوم این تعریف اینه که:
مثلاً سرویس auth شما نره دیتای سرویس payment رو بخونه حتی اگر جفتشون روی یک دیتابیس هستند (فقط دوتا تیبل جداشده) و برای گرفتن دیتای مورد نیازش به سرویس payment درخواست بده
۲- هر تابع، متد یا ... باید single responsibility داشته باشه.
بله درسته، این یکی از موارد مهم هست اما تفسیر اشتباه ازش زیاده، مثلاً:
فرض کنید سرویس payment بالا، بعد از اینکه پرداخت انجام شد باید به بخش انبارداری تیکت بزنیم که پرداخت موفق بوده موجودی رو کم کن، به بخش حسابداری بزنیم که فاکتور صادر شده پرداخت شد و مثلاً به بخش ارسال کالا هم بگیم چیو بستهبندی و ارسال کنه به چه آدرسی ...
اینو دیدم که میگم، به طرف میگم، خب عالی توابع اینکارها رو بذار یکجا داخل یک تابع و درخواست بده اگر مشکلی توی پرداخت پیش اومد همه باهم باید rollback بخوره (توجه به بحث قبل شما حق نداری، تیبل سرویسهای دیگه رو دستکاری کنی)؛ برگشته میگه پس Single Responsiblity چی میشه ؟
یک ساعت داشتم براش توضیح میدم؛ که این تابع SRP رو رعایت میکنه چون تو فقط داری میگی من پول رو پرداخت کردم موفق بود یا نه.
۳- ماکروسرویس بهتره ...
نه چون یک چیزی سختتر هست پیادهسازیش لزوماً بهتر نیست، بسیار بسیار پروژه دیدم که گفتم خب همهی چیزایی که اینا لازم دارن اگر monolithic بود، هم سریعتر بود هم سرعت توسعهاش بیشتر بود هم نیاز به این همه دولوپر نداشت.
چندتا برداشت اشتباه دیگه هم بود که متأسفانه یادم نیست دیگه، ولی تبدیل سیستم به یک monolithic واقعی توی این پروژه نتایج خیلی بهتری داشت.
حتی برای مرحله بعدی هم پیشنهاد کردم اول سراغ
Load balance
و بالا آوردن چندتا instance از همین monolithic برند، بعد برای تبدیل به micro-sercive از یکی که معماری رو واقعاً بلد هست کمک بگیرند نه کسی که پوشه پوشه کردن فایلای پایتونش رو فقط یاد گرفته.
نهایتاً؛ البته من میدونم خیلی از این برداشتهای اشتباه از کجا میاد.
منابع ترجمه شده به فارسی.
ترجمه اشتباه لغوی یک کلمه، باعث میشه معنی یک جمله بطور کامل عوض بشه.
@pyHints ✍🏻
distributed monolithic
که خب یک anti-pattern هست برای معماری micro-service اول هفته با یک شرکتی برای مشاوره صحبت کردیم (کارشون رو قبول نکردم ولی یک قرارداد کوچک بستم برای اینکه بگم مشکل فعلی سیستم کجاس)
معماری سیستم مثلاً قرار بوده micro-service باشه؛ در نگاه اول هم هست و حتی از تمام ابزارهای لازم هم داره استفاده میشه اما به اشتباه.
کل سیستم رو امروز کنار هم چیدم و روی یک سرور بالا آوردم (بجای چندتا سرور) و تبدیلش کردم به multi app monolithic اولش خیلی ناراحت و نگران بودند که پرفورمنس خراب میشه و ازین حرفا ولی بعد توی تستها دیدند که حداقل ۲ برابر سرعت پاسخ و تعداد درخواستهایی که هندل میشه بیشتره.
البته من مطمئن بودم که اینطوری میشه به سه دلیل :
۱- به وضوح anti pattern رو میدیدم
۲- تعداد درخواستهای بین سرویسها زیاد بود
۳- خیلی از زمان پروفایلنگ، برای درخواست بین سرویسها هدر میرفت روی نتورک. (که خب حتی async هم نبود که حداقل cpu هدر نره)
این موضوع دلیلی شد؛ بیام چندتا تعریف اشتباه که دائم میشنوم رو انتقال بدم:
۱- توی ماکروسرویس هر سرویس باید دیتابیس جدا داشته باشه.
این تعریف درسته، اما تفسیر غلط ازش زیاده؛ مثلاً ۹۹٪ فکر میکنند این یعنی برای هر سرویس باید یک سرور Postgres جدا داشته باشند، نه لزوماً مفهوم این تعریف اینه که:
مثلاً سرویس auth شما نره دیتای سرویس payment رو بخونه حتی اگر جفتشون روی یک دیتابیس هستند (فقط دوتا تیبل جداشده) و برای گرفتن دیتای مورد نیازش به سرویس payment درخواست بده
۲- هر تابع، متد یا ... باید single responsibility داشته باشه.
بله درسته، این یکی از موارد مهم هست اما تفسیر اشتباه ازش زیاده، مثلاً:
فرض کنید سرویس payment بالا، بعد از اینکه پرداخت انجام شد باید به بخش انبارداری تیکت بزنیم که پرداخت موفق بوده موجودی رو کم کن، به بخش حسابداری بزنیم که فاکتور صادر شده پرداخت شد و مثلاً به بخش ارسال کالا هم بگیم چیو بستهبندی و ارسال کنه به چه آدرسی ...
اینو دیدم که میگم، به طرف میگم، خب عالی توابع اینکارها رو بذار یکجا داخل یک تابع و درخواست بده اگر مشکلی توی پرداخت پیش اومد همه باهم باید rollback بخوره (توجه به بحث قبل شما حق نداری، تیبل سرویسهای دیگه رو دستکاری کنی)؛ برگشته میگه پس Single Responsiblity چی میشه ؟
یک ساعت داشتم براش توضیح میدم؛ که این تابع SRP رو رعایت میکنه چون تو فقط داری میگی من پول رو پرداخت کردم موفق بود یا نه.
۳- ماکروسرویس بهتره ...
نه چون یک چیزی سختتر هست پیادهسازیش لزوماً بهتر نیست، بسیار بسیار پروژه دیدم که گفتم خب همهی چیزایی که اینا لازم دارن اگر monolithic بود، هم سریعتر بود هم سرعت توسعهاش بیشتر بود هم نیاز به این همه دولوپر نداشت.
چندتا برداشت اشتباه دیگه هم بود که متأسفانه یادم نیست دیگه، ولی تبدیل سیستم به یک monolithic واقعی توی این پروژه نتایج خیلی بهتری داشت.
حتی برای مرحله بعدی هم پیشنهاد کردم اول سراغ
Load balance
و بالا آوردن چندتا instance از همین monolithic برند، بعد برای تبدیل به micro-sercive از یکی که معماری رو واقعاً بلد هست کمک بگیرند نه کسی که پوشه پوشه کردن فایلای پایتونش رو فقط یاد گرفته.
نهایتاً؛ البته من میدونم خیلی از این برداشتهای اشتباه از کجا میاد.
منابع ترجمه شده به فارسی.
ترجمه اشتباه لغوی یک کلمه، باعث میشه معنی یک جمله بطور کامل عوض بشه.
@pyHints ✍🏻
👍9✍3❤1🔥1
جنگولرن
با لود نشدن فایل های استاتیک و سرو کردنشون توی وب سرور مشکل دارید؟ و هر بار یادتون میره راه درستش چیه؟
نکته هایی در مورد فایل های استاتیک جنگو – بخش سوم - آخر
توی دو بخش قبل گفتبم جنگو چطور فایل های استاتیک رو مدیریت میکنه.
حالا میخواهیم ببینیم توی development و production چه فرقی هست؟
وقتی debug=true باشه (یعنی حالت development) جنگو خودش فایل های استاتیک رو سرو میکنه.
این برای تست کافیه، ولی روی سرور واقعی (production) اصلاً توصیه نمیشه. چون هم کند ع هم امن نیست. (توضیح اینو توی کامنت همین پست میزارم)
توی production باید (بهتره) وب سرور (مثل nginx یا apache) فایل های استاتیک رو سرو کنن.
برای همین دستور collectstatic رو اجرا میکنیم تا همه فایل ها توی یه پوشه (همون STATIC_ROOT) جمع بشن و بعد اون مسیر رو برای وب سرور مشخص می کنیم.
فرض کن STATIC_ROOT ما اینه:
توی nginx معمولا اینجوری می نویسیم:
اینجا alias ینی:
هر وقت کاربر آدرس /static/... خواست، nginx برو سراغ پوشه staticfiles/ و ادامه مسیر رو اونجا پیدا کن.
مثلا:
تبدیل میشه به:
یه دستور دیگه هم هست به اسم root:
اینجا مسیر /static/ از URL حذف نمیشه و میچسبه به آخر root.
مثلا همون آدرس ع بالا:
میشه:
فرق شون چی شد؟
اون alias - بخش location (یعنی /static/) رو کنار می ذاره.
اون root - بخش location رو نگه میداره و به مسیر اضافه می کنه.
کلمه اون رو گذاشتم اولشون که راست چین بشن این دو تا خط بالایی 😁
برای همین ما معمولا برای static files از alias استفاده میکنیم.
اسپانسر این پست 👈 لینک
توی دو بخش قبل گفتبم جنگو چطور فایل های استاتیک رو مدیریت میکنه.
حالا میخواهیم ببینیم توی development و production چه فرقی هست؟
وقتی debug=true باشه (یعنی حالت development) جنگو خودش فایل های استاتیک رو سرو میکنه.
این برای تست کافیه، ولی روی سرور واقعی (production) اصلاً توصیه نمیشه. چون هم کند ع هم امن نیست. (توضیح اینو توی کامنت همین پست میزارم)
توی production باید (بهتره) وب سرور (مثل nginx یا apache) فایل های استاتیک رو سرو کنن.
برای همین دستور collectstatic رو اجرا میکنیم تا همه فایل ها توی یه پوشه (همون STATIC_ROOT) جمع بشن و بعد اون مسیر رو برای وب سرور مشخص می کنیم.
فرض کن STATIC_ROOT ما اینه:
/home/youruser/myproject/staticfiles/
توی nginx معمولا اینجوری می نویسیم:
location /static/ {
alias /home/youruser/myproject/staticfiles/;
}
اینجا alias ینی:
هر وقت کاربر آدرس /static/... خواست، nginx برو سراغ پوشه staticfiles/ و ادامه مسیر رو اونجا پیدا کن.
مثلا:
/static/css/style.css
تبدیل میشه به:
/home/youruser/myproject/staticfiles/css/style.css
یه دستور دیگه هم هست به اسم root:
location /static/ {
root /home/youruser/myproject/;
}
اینجا مسیر /static/ از URL حذف نمیشه و میچسبه به آخر root.
مثلا همون آدرس ع بالا:
/static/css/style.css
میشه:
/home/youruser/myproject/static/css/style.css
فرق شون چی شد؟
اون alias - بخش location (یعنی /static/) رو کنار می ذاره.
اون root - بخش location رو نگه میداره و به مسیر اضافه می کنه.
برای همین ما معمولا برای static files از alias استفاده میکنیم.
اسپانسر این پست 👈 لینک
❤14👍3👏2
Forwarded from TheAliBigdeli Channel
خوب بالاخره اینم تموم شد یه مینی دوره برای آشنایی با amqp و سیستم message queue
https://thealibigdeli.ir/courses/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84-amqp-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86
📢 @thealibigdeli_channel
https://thealibigdeli.ir/courses/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84-amqp-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86
📢 @thealibigdeli_channel
🔥7
معرفی کتاب
Designing APIs with Swagger and OpenAPI
خودم فقط عکسای تو کتابو دیدم. همه ش خروجی swagger و خروجی api بود 😁
ولی در موردش فهمیدم که:
این کتاب بیشتر روی اصول طراحی API تمرکز داره و به زبان برنامه نویسی خاصی وابسته نیست.
همه چی رو از پایه توضیح میده؛ از درخواست های ساده HTTP گرفته تا مستند سازی با OpenAPI.
توش یه پروژه ی نمونه هم هست که کمک می کنه بهتر درک کنی.
برای کسایی که تازه میخوان وارد دنیای API بشن خیلی خوبه، ولی اگه قبلا با Swagger یا OpenAPI کار کردی، ممکنه یکم ابتدایی به نظر بیاد.
تشکر از thisisnabi_dev
شما خوندن این کتاب رو توصیه می کنید؟
Designing APIs with Swagger and OpenAPI
خودم فقط عکسای تو کتابو دیدم. همه ش خروجی swagger و خروجی api بود 😁
ولی در موردش فهمیدم که:
این کتاب بیشتر روی اصول طراحی API تمرکز داره و به زبان برنامه نویسی خاصی وابسته نیست.
همه چی رو از پایه توضیح میده؛ از درخواست های ساده HTTP گرفته تا مستند سازی با OpenAPI.
توش یه پروژه ی نمونه هم هست که کمک می کنه بهتر درک کنی.
برای کسایی که تازه میخوان وارد دنیای API بشن خیلی خوبه، ولی اگه قبلا با Swagger یا OpenAPI کار کردی، ممکنه یکم ابتدایی به نظر بیاد.
تشکر از thisisnabi_dev
شما خوندن این کتاب رو توصیه می کنید؟
👍12❤3😁3👏2
جنگولرن
معرفی کتاب Designing APIs with Swagger and OpenAPI خودم فقط عکسای تو کتابو دیدم. همه ش خروجی swagger و خروجی api بود 😁 ولی در موردش فهمیدم که: این کتاب بیشتر روی اصول طراحی API تمرکز داره و به زبان برنامه نویسی خاصی وابسته نیست. همه چی رو از پایه توضیح…
کلاس دیاگرام جنریک ویوهای جنگو
از کتاب Fluent Python
پیرو پست قبلی، یکی از دوستان پیام داد که ما کتاب های زبان اصلی رو چاپ می کنیم
منم امروز کتاب Fluent Python رو سفارش دادم، چون 15 درصد تخفیف دارن.
فقط چون کتابش تقریبا 1000 صفحه اس، توی دو جلد چاپش کردن.
منم جلد اول رو سفارش دادم.
به دستم برسه در مورد هزینه و سرعت ارسال و کیفیت و... ش یه پست میزارم.
- آدرس کانال اصلی شون: @ITBook_Pub
- نمونه کار هاشون: @ITBook_Images
راستی
بعضی از کتابهارو توی کانال نذاشتن، و اگه کتاب خاصی مد نظرتون هست، می تونید اسم کتاب، یا فایلش رو براشون بفرستید.
از کتاب Fluent Python
پیرو پست قبلی، یکی از دوستان پیام داد که ما کتاب های زبان اصلی رو چاپ می کنیم
منم امروز کتاب Fluent Python رو سفارش دادم، چون 15 درصد تخفیف دارن.
فقط چون کتابش تقریبا 1000 صفحه اس، توی دو جلد چاپش کردن.
منم جلد اول رو سفارش دادم.
به دستم برسه در مورد هزینه و سرعت ارسال و کیفیت و... ش یه پست میزارم.
- آدرس کانال اصلی شون: @ITBook_Pub
- نمونه کار هاشون: @ITBook_Images
راستی
بعضی از کتابهارو توی کانال نذاشتن، و اگه کتاب خاصی مد نظرتون هست، می تونید اسم کتاب، یا فایلش رو براشون بفرستید.
❤8🆒2✍1🔥1
تابع get_FOO_display در جنگو چیه؟
بهترین روش برای توضیح این تابع، مثاله:
و نتیجه:
گرفتی کارش چیه؟ یس 👍🏻 اور نو 👎
بهترین روش برای توضیح این تابع، مثاله:
from django.db import models
class Person(models.Model):
SHIRT_SIZES = {
"S": "Small",
"M": "Medium",
"L": "Large",
}
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=2, choices=SHIRT_SIZES)
و نتیجه:
>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large'
گرفتی کارش چیه؟ یس 👍🏻 اور نو 👎
👍48🤔5❤2
دستور flush توی جنگو چکار میکنه؟
این دستور اینجوری اجرا میشه:
چکار میکنه؟
همه دیتاهای دیتابیس، بجز دیتاهای جدول migrations رو پاک میکنه. در واقع TRUNCATE میکنه.
سوال: TRUNCATE چیه؟
دستور TRUNCATE ربطی به جنگو نداره و دستور SQL هست. اینجوری معمولا نوشته میشه
فلان هم اسم جدولی هست که میخوای truncate کنی. این دستور همه دیتای جدول رو حذف میکنه، با این تفاوت که مثل DELETE لاگ نمیشه و خیلی سریع هست. لذا خطرناک هم هست . و البته identity یا همون Auto Increment رو ریست میکنه.
برای دیدن کد ع sql ع دستور flust می تونید بنویسید:
راستی بعد از flush ، جنگو post_migrate میکنه.
نظر عمو جی پی تی در مورد post_migrate:
این post_migrate جالبه
اینجوری تستش کنید:
یه migrate الکی بزنید، پیغام میده که چیزی برای مایگریت نیست، اما کارهایی روی دیتابیس کرده.
مثلا برو و توی جدول auth_permission یکی از codename هارو تغییر بده. مثلا یه عدد آخرش اضافه کن.
بعد دوباره migrate رو بزن و باز میگه چیزی برای مایگریت نیست.
حالا برو جدول auth_permission رو ببین. یه سطر بهش اضافه شده
مقدارش چیه؟؟؟
اگه میدونی یا تست ش کردی، جواب رو کامنت کن 😁😈
این دستور اینجوری اجرا میشه:
python manage.py flush
چکار میکنه؟
همه دیتاهای دیتابیس، بجز دیتاهای جدول migrations رو پاک میکنه. در واقع TRUNCATE میکنه.
سوال: TRUNCATE چیه؟
دستور TRUNCATE ربطی به جنگو نداره و دستور SQL هست. اینجوری معمولا نوشته میشه
TRUNCATE TABLE felan
فلان هم اسم جدولی هست که میخوای truncate کنی. این دستور همه دیتای جدول رو حذف میکنه، با این تفاوت که مثل DELETE لاگ نمیشه و خیلی سریع هست. لذا خطرناک هم هست . و البته identity یا همون Auto Increment رو ریست میکنه.
برای دیدن کد ع sql ع دستور flust می تونید بنویسید:
python manage.py sqlflush
راستی بعد از flush ، جنگو post_migrate میکنه.
نظر عمو جی پی تی در مورد post_migrate:
سیگنال post_migrate برای این طراحی شده که بعد از هر بار همگامسازی دیتابیس (migrate یا flush)، دادهها و تنظیمات لازم دوباره ساخته بشن.
چیزهایی که معمولا انجام میده:
ایجاد پرمیشنها برای تمام مدلها (هر بار بعد از flush، جدول auth_permission دوباره پر میشه).
ساخت گروهها یا دادههای پیشفرض که بعضی اپلیکیشنها نیاز دارن.
مثلا جنگو برای اپلیکیشن auth، همیشه پرمیشنهای add, change, delete, view رو دوباره ایجاد میکنه.
اجرای هر سیگنالی که تو پروژه به post_migrate وصل کردی.
مثلا اگر خودت کدی نوشتی که بعد از post_migrate یه کاربر پیشفرض یا دادهی خاص بسازه، اون هم دوباره اجرا میشه.
این post_migrate جالبه
اینجوری تستش کنید:
یه migrate الکی بزنید، پیغام میده که چیزی برای مایگریت نیست، اما کارهایی روی دیتابیس کرده.
مثلا برو و توی جدول auth_permission یکی از codename هارو تغییر بده. مثلا یه عدد آخرش اضافه کن.
بعد دوباره migrate رو بزن و باز میگه چیزی برای مایگریت نیست.
حالا برو جدول auth_permission رو ببین. یه سطر بهش اضافه شده
مقدارش چیه؟؟؟
اگه میدونی یا تست ش کردی، جواب رو کامنت کن 😁😈
❤13✍4👍2👏1
Forwarded from Security Analysis
This media is not supported in your browser
VIEW IN TELEGRAM
⭕️ بچه ها امسال بیاید مسابقات المپیک رو شرکت کنید با هم بریم بزنیم :)
من هم مثل هرسال توی مسابقات حضور دارم و اگر سوالی ، کاری راهنمایی چیزی فنی داشتید به گروه تلگرامی ما بپیوندید.
به امید دیدار در فینال مسابقات 🔥
@securation
من هم مثل هرسال توی مسابقات حضور دارم و اگر سوالی ، کاری راهنمایی چیزی فنی داشتید به گروه تلگرامی ما بپیوندید.
به امید دیدار در فینال مسابقات 🔥
@securation
❤1👎1🔥1😁1
Forwarded from TheAliBigdeli Channel
.wslconfig
96 B
اگه از Docker روی ویندوز با WSL2 استفاده میکنین، ممکنه بخواهید مصرف رم و CPU رو محدود کنید تا سیستم کند نشه به خصوص اگر محدودیت RAM دارید که 8 گیگ باشه این مورد خیلی می تونه بهتون کمک کنه.در حالت عادی 80 درصد ریسورس استفاده نشده سیستم رو wsl برای کار خودش در نظر میگیره ولی با این کار محدودیت لازم ایجاد میشه. برای این کار کافیه فایل .wslconfig بسازید یا ویرایش کنید:
مسیر فایل:
نمونه تنظیمات:
بعد از ذخیره فایل، WSL و Docker رو ریستارت کنید:
حالا Docker روی WSL با منابع محدودتر اجرا میشه و سیستم روانتر کار میکنه.
📢 @thealibigdeli_channel
#tips
مسیر فایل:
C:\Users\<YourUserName>\.wslconfig
نمونه تنظیمات:
[wsl2]
memory=1GB # ram limit
processors=3 # processor limit
swap=4GB # swap incase ran out of ram
pageReporting=true
swapFile=C:\\swap\\wsl_swap.vhdx # placement for swap (better to use ssd)
بعد از ذخیره فایل، WSL و Docker رو ریستارت کنید:
wsl --shutdown
حالا Docker روی WSL با منابع محدودتر اجرا میشه و سیستم روانتر کار میکنه.
📢 @thealibigdeli_channel
#tips
👍4❤1✍1
چطور توی جنگو، مایگریشن هارو یکی کنیم، بدون اینکه دیتا حذف بشه
منظورم چیه؟
فرض کنید در طول توسعه نرم افزارمون (شاید به دلیل تحلیل اشتباه اولیه یا هر دلیل دیگه ای...) همش تغییراتی توی مدل هامون میدیم.
بعد از مدتی، مایگریشن های زیادی برای هر اپ داریم
و به این فکر میکنیم؛ "کاش همه رو حذف کنم و از اول مایگریشن بزنم"
پس قبلی ها حذف. و یه مایگریشن می زنیم و هر اپ یه 0001_initial براش میمونه و خلوت میشه.
مشکل:
حالا باید migrate کنیم.
اما خطا میده.
من که مبتدی هستم، خیلی راحت دیتابیس sqlite رو حذف میکنم. و دوباره migrate میکنم و...
⚠️قبل از ادامه باید بگم:
شاید واقعا نیاز به این کار نباشه.
مثلا شما جدول django_migrations رو ببینید، خود جنگو همه رو یکی نکرده
مثلا برای اپ auth تعداد 12 مایگریشن زده شده
پس بد هم نمیشه که مایگریشن هارو داشته باشم، فقط وقتی migrate می کنیم، به ترتیب تغییرات اعمال میشن
ادامه مشکل:
اگه دیتا توی دیتابیس داشته باشم که برام مهم باشه چی؟
یا دیتابیسم توی پروداکشن باشه چی؟
نمیشه که دیتابیس رو حذف کنم.
چندتا راه هست (من اینارو بلدم):
یکی squashmigrations : که چندتا مایگریشن رو یکی میکنه.
یکی makemigrations --merge که میگرده اگه conflict یی باشه، یکی شون میکنه.
✔️یکی دیگه که خواستم بهش برسم، حذف کردن مایگریشن ها به صورت دستی،
بعد makemigrations که همه initial_0001 بشن
بعد حذف کردن اطلاعات جدول django_migrations
بعد استفاده از migrate --fake-initial هست
من توی محیط پروداکشن از migrate --fake استفاده کردم. وقتی initial رو بزنید آخرش، فقط initial هارو FAKE میکنه.
نکته مهم: ساختار دیتابیس باید با مایگریشن ها حتما یکی باشه
راستی توی پروداکشن بکاپ بگیر
اگه چیزی اشتباهه، توی کامنت ها بگو لطفا و 👎
وگرنه 👍🏻
منظورم چیه؟
فرض کنید در طول توسعه نرم افزارمون (شاید به دلیل تحلیل اشتباه اولیه یا هر دلیل دیگه ای...) همش تغییراتی توی مدل هامون میدیم.
بعد از مدتی، مایگریشن های زیادی برای هر اپ داریم
و به این فکر میکنیم؛ "کاش همه رو حذف کنم و از اول مایگریشن بزنم"
پس قبلی ها حذف. و یه مایگریشن می زنیم و هر اپ یه 0001_initial براش میمونه و خلوت میشه.
مشکل:
حالا باید migrate کنیم.
اما خطا میده.
من که مبتدی هستم، خیلی راحت دیتابیس sqlite رو حذف میکنم. و دوباره migrate میکنم و...
⚠️قبل از ادامه باید بگم:
شاید واقعا نیاز به این کار نباشه.
مثلا شما جدول django_migrations رو ببینید، خود جنگو همه رو یکی نکرده
مثلا برای اپ auth تعداد 12 مایگریشن زده شده
پس بد هم نمیشه که مایگریشن هارو داشته باشم، فقط وقتی migrate می کنیم، به ترتیب تغییرات اعمال میشن
ادامه مشکل:
اگه دیتا توی دیتابیس داشته باشم که برام مهم باشه چی؟
یا دیتابیسم توی پروداکشن باشه چی؟
نمیشه که دیتابیس رو حذف کنم.
چندتا راه هست (من اینارو بلدم):
یکی squashmigrations : که چندتا مایگریشن رو یکی میکنه.
یکی makemigrations --merge که میگرده اگه conflict یی باشه، یکی شون میکنه.
✔️یکی دیگه که خواستم بهش برسم، حذف کردن مایگریشن ها به صورت دستی،
بعد makemigrations که همه initial_0001 بشن
بعد حذف کردن اطلاعات جدول django_migrations
من توی محیط پروداکشن از migrate --fake استفاده کردم. وقتی initial رو بزنید آخرش، فقط initial هارو FAKE میکنه.
نکته مهم: ساختار دیتابیس باید با مایگریشن ها حتما یکی باشه
راستی توی پروداکشن بکاپ بگیر
اگه چیزی اشتباهه، توی کامنت ها بگو لطفا و 👎
وگرنه 👍🏻
👍14❤1👏1
جنگولرن
کلاس دیاگرام جنریک ویوهای جنگو از کتاب Fluent Python پیرو پست قبلی، یکی از دوستان پیام داد که ما کتاب های زبان اصلی رو چاپ می کنیم منم امروز کتاب Fluent Python رو سفارش دادم، چون 15 درصد تخفیف دارن. فقط چون کتابش تقریبا 1000 صفحه اس، توی دو جلد چاپش کردن.…
کتاب Fluent Python همین الان رسید دستم
کیفیت کاغذ و کیفیت چاپش واقعا خوبه
الان درگیر هستم، توضیح دیگه ای لازم بود. همین پست رو ویرایش میکنم.
- آدرس کانال اصلی شون: @ITBook_Pub
- نمونه کار هاشون: @ITBook_Images
ویرایش:
-دیروز خونه نبودم، وگرنه میخواستن بفرستن
-حاشیه داخلی کتاب خوبه و نیاز به سیمی کردن نداره
-چهار روز بعد از سفارش به دستم رسید، البته من ساکن تهرانم و از تهران برای من ارسال شد
کیفیت کاغذ و کیفیت چاپش واقعا خوبه
الان درگیر هستم، توضیح دیگه ای لازم بود. همین پست رو ویرایش میکنم.
- آدرس کانال اصلی شون: @ITBook_Pub
- نمونه کار هاشون: @ITBook_Images
ویرایش:
-دیروز خونه نبودم، وگرنه میخواستن بفرستن
-حاشیه داخلی کتاب خوبه و نیاز به سیمی کردن نداره
-چهار روز بعد از سفارش به دستم رسید، البته من ساکن تهرانم و از تهران برای من ارسال شد
🔥7❤5
تخفیف های 80 درصدی دوره های سایت دانشجویار
دوره فروشگاه جنگو من هم شامل شده
البته اینی که پای لپ تاپ ع، ظاهرا شهرشون یه متر برف باریده تو پاییز 🥶
https://www.daneshjooyar.com/landing/autumn1404/
دوره فروشگاه جنگو من هم شامل شده
البته اینی که پای لپ تاپ ع، ظاهرا شهرشون یه متر برف باریده تو پاییز 🥶
https://www.daneshjooyar.com/landing/autumn1404/
🥱7😁3👍2