جنگولرن
3.94K subscribers
296 photos
77 videos
32 files
567 links
آموزش Django و بستگان
-مفاهیم پر کاربرد پایتون
-مفاهیم مهندسی نرم افزار
-آشنایی با تجربه حرفه ای ها
-آشنایی با راهکارهای حرفه ای ها برای افزایش پرفورمنس
و...

جهت تبلیغ دایرکت کانال پیام بدید
Download Telegram
معرفی کتاب
Designing APIs with Swagger and OpenAPI

خودم فقط عکسای تو کتابو دیدم. همه ش خروجی swagger و خروجی api بود 😁

ولی در موردش فهمیدم که:
این کتاب بیشتر روی اصول طراحی API تمرکز داره و به زبان برنامه ‌نویسی خاصی وابسته نیست.
همه ‌چی رو از پایه توضیح میده؛ از درخواست های ساده HTTP گرفته تا مستند سازی با OpenAPI.
توش یه پروژه ی نمونه هم هست که کمک می کنه بهتر درک کنی.
برای کسایی که تازه میخوان وارد دنیای API بشن خیلی خوبه، ولی اگه قبلا با Swagger یا OpenAPI کار کردی، ممکنه یکم ابتدایی به نظر بیاد.

تشکر از thisisnabi_dev

شما خوندن این کتاب رو توصیه می کنید؟
👍123😁3👏2
جنگولرن
معرفی کتاب Designing APIs with Swagger and OpenAPI خودم فقط عکسای تو کتابو دیدم. همه ش خروجی swagger و خروجی api بود 😁 ولی در موردش فهمیدم که: این کتاب بیشتر روی اصول طراحی API تمرکز داره و به زبان برنامه ‌نویسی خاصی وابسته نیست. همه ‌چی رو از پایه توضیح…
کلاس دیاگرام جنریک ویوهای جنگو

از کتاب Fluent Python

پیرو پست قبلی، یکی از دوستان پیام داد که ما کتاب های زبان اصلی رو چاپ می کنیم

منم امروز کتاب Fluent Python رو سفارش دادم، چون 15 درصد تخفیف دارن.
فقط چون کتابش تقریبا 1000 صفحه اس، توی دو جلد چاپش کردن.
منم جلد اول رو سفارش دادم.

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

- آدرس کانال اصلی شون: @ITBook_Pub
-  نمونه کار هاشون: @ITBook_Images

راستی
بعضی از کتابهارو توی کانال نذاشتن، و اگه کتاب خاصی مد نظرتون هست، می تونید اسم کتاب، یا فایلش رو براشون بفرستید.
8🆒21🔥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🤔52
دستور flush توی جنگو چکار میکنه؟

این دستور اینجوری اجرا میشه:
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 رو ببین. یه سطر بهش اضافه شده

مقدارش چیه؟؟؟
اگه میدونی یا تست ش کردی، جواب رو کامنت کن 😁😈
134👍2👏1
Forwarded from Security Analysis
This media is not supported in your browser
VIEW IN TELEGRAM
⭕️ بچه ها امسال بیاید مسابقات المپیک رو شرکت کنید با هم بریم بزنیم :)
من هم مثل هرسال توی مسابقات حضور دارم و اگر سوالی ، کاری راهنمایی چیزی فنی داشتید به گروه تلگرامی ما بپیوندید.

به امید دیدار در فینال مسابقات 🔥

@securation
1👎1🔥1😁1
Forwarded from TheAliBigdeli Channel
.wslconfig
96 B
اگه از Docker روی ویندوز با WSL2 استفاده می‌کنین، ممکنه بخواهید مصرف رم و CPU رو محدود کنید تا سیستم کند نشه به خصوص اگر محدودیت RAM دارید که 8 گیگ باشه این مورد خیلی می تونه بهتون کمک کنه.در حالت عادی 80 درصد ریسورس استفاده نشده سیستم رو wsl برای کار خودش در نظر میگیره ولی با این کار محدودیت لازم ایجاد میشه. برای این کار کافیه فایل .wslconfig بسازید یا ویرایش کنید:

مسیر فایل:

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
👍411
چطور توی جنگو، مایگریشن هارو یکی کنیم، بدون اینکه دیتا حذف بشه

منظورم چیه؟
فرض کنید در طول توسعه نرم افزارمون (شاید به دلیل تحلیل اشتباه اولیه یا هر دلیل دیگه ای...) همش تغییراتی توی مدل هامون میدیم.
بعد از مدتی، مایگریشن های زیادی برای هر اپ داریم
و به این فکر میکنیم؛ "کاش همه رو حذف کنم و از اول مایگریشن بزنم"
پس قبلی ها حذف. و یه مایگریشن می زنیم و هر اپ یه 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 میکنه.

نکته مهم: ساختار دیتابیس باید با مایگریشن ها حتما یکی باشه

راستی توی پروداکشن بکاپ بگیر

اگه چیزی اشتباهه، توی کامنت ها بگو لطفا و 👎
وگرنه 👍🏻
👍141👏1
جنگولرن
کلاس دیاگرام جنریک ویوهای جنگو از کتاب Fluent Python پیرو پست قبلی، یکی از دوستان پیام داد که ما کتاب های زبان اصلی رو چاپ می کنیم منم امروز کتاب Fluent Python رو سفارش دادم، چون 15 درصد تخفیف دارن. فقط چون کتابش تقریبا 1000 صفحه اس، توی دو جلد چاپش کردن.…
کتاب Fluent Python همین الان رسید دستم

کیفیت کاغذ و کیفیت چاپش واقعا خوبه

الان درگیر هستم، توضیح دیگه ای لازم بود. همین پست رو ویرایش میکنم.

- آدرس کانال اصلی شون: @ITBook_Pub
-  نمونه کار هاشون: @ITBook_Images

ویرایش:
-دیروز خونه نبودم، وگرنه میخواستن بفرستن
-حاشیه داخلی کتاب خوبه و نیاز به سیمی کردن نداره
-چهار روز بعد از سفارش به دستم رسید، البته من ساکن تهرانم و از تهران برای من ارسال شد
🔥75
تخفیف های 80 درصدی دوره های سایت دانشجویار

دوره فروشگاه جنگو من هم شامل شده

البته اینی که پای لپ تاپ ع، ظاهرا شهرشون یه متر برف باریده تو پاییز 🥶

https://www.daneshjooyar.com/landing/autumn1404/
🥱7😁3👍2
جنگولرن
سری مهندسی نرم‌افزار: پست 10 از لینکدین Saeed Shahrivari Joghan اسکرام چکش طلایی نیست! در پست قبلی اجمالاً راجع به چارچوب بودن اسکرام صحبت کردم. مجدداً تاکید می‌کنم که من طرفدار اسکرام نیستم ولی شدیداً با روال توسعه بی‌برنامه و یلخی هم مشکل دارم. من اخیراً…
سری مهندسی نرم‌افزار: پست 11
از لینکدین Saeed Shahrivari Joghan
قواره کردن کت به سبک خیاطی

این پست راجع به کاستومایز کردن اسکرام هست و طبعاً آخرین قسمت از دنباله اسکرام. در قسمت‌های قبلی مفصل راجع به چارچوب بودن اسکرام و ممنوع بودن دستکاری در اصول اون صحبت شد. اما چطوری میشه اسکرام رو برای تیم خودمون و یا حتی سازمان دل‌پذیر‌تر کنیم؟ خب اسکرام سبکه و میشه با سلیقه خودمون و با حفظ اصولش تا حد زیادی کاستومایزش کنیم. من به چند محور اشاره می‌کنم:

۱- ادغام نقش‌ها: من خیلی از دوستان با تجربه شنیدم که نقش‌هایی مثل «مالک محصول» به درد نمی‌خوره و چرنده و ما چرا باید به یه نفر کلی حقوق ماهیانه بدیم که یه نقش الکی به نام مالک محصول داشته باشه؟ خب اگه شما حتی یه تجربه خیلی محدود در پیاده‌سازی یک سیستم مالی یا سرمایه‌گذاری داشته باشید خیلی راحت درک می‌کنید که در چنین نرم‌افزارهایی به دلیل دانش تخصصی عملاً یک مهندس نرم‌افزار بدون کمک کسی که مالک محصول باشه توانایی دلیور کردن نخواهد داشت. اما در تمام پروژه‌ها واقعا نیاز به یک مالک محصول تمام وقت نیست و خیلی از اوقات یکی از توسعه‌دهنده‌ها میتونه همزمان نقش مالک محصول رو هم ایفا کنه یا برعکس در پروژه‌های خیلی پیچیده ممکنه چندین مالک محصول داشته باشیم. بنابراین به جای حذف نقش‌های مالک محصول و اسکرام مستر میشه عوض یک فرد تمام وقت این نقش‌ها رو به
توسعه‌دهنده یا فرد دیگه‌ای سپرد ولی لطفا هرگز این نقش رو حذف نکنیم (توجه کنید که از واژه نقش استفاده می‌کنم نه فرد)

۲- تغییر در سرمونی‌ها: میشه جلسات پلنینگ رو به چند جلسه کوتاه‌تر شکست یا برای پیش‌برد بهتر در یه قسمت طولانی‌تر با کمک چند عضو تیم عمده کار رو انجام داد و بعد در یک جلسه کوتاه‌تر با شرکت تمام اعضای تیم کار رو جمع کرد که باعث خستگی افراد نشه. خیلی اوقات میشه جلسات رترو رو در قالب یک جلسه به صرف چای یا قهوه انجام داد تا کسالت کمتر بشه یا حتی خیلی کوتاه در عرض ۱۰ دقیقه در انتهای جلسه ریویو برگزارش کرد.

۳- تغییر در آرتیفکت‌ها: برای مثال اگه انجام تخمین برای وزن‌دهی به آیتم‌های بک‌لاگ با استفاده از اعداد براتون سخته میشه از سایز‌های تیشرت استفاده کرد. یا میشه تعریف done رو برای هر تیم شخصی‌سازی کرد.

در آخر مجدداً جمع‌بندی می‌کنم که اسکرام چکش طلایی نیست و به درد تمام پروژه‌ها نمی‌خوره اما از اون طرف هم اگه یه نفر بیاد بگه اسکرام در پیته و قدیمی شده و کلاً به درد نخوره به نظرم حرف ناپخته‌ای زده. اسکرام برای همه پروژه‌ها مناسب نیست ولی در طیف خوبی از پروژه‌ها خوب پاسخ می‌ده و معمولاً اگه از این افراد منتقد بپرسی خب اگه اسکرام رو اجرا نکنیم چیکار کنیم؟ جواب قانع‌کننده‌ای ندارند یا یه روش من‌در‌آوردی از خودشون ارائه میدن که قابل اتکا نیست. اسکرام بر خلاف چیزی که مشهوره یه چارچوب نسبتا سبکه و تا حد خوبی میشه با حفظ اصول کاستومایزش کرد اما از اون سمت هم نباید به خود چارچوب دست بزنیم مثل قواره کردن یه کت.
1👍1
کمی در باب UUID

توی اکثر سیستم‌های اطلاعاتی، چه در مورد پیام‌های مورد تبادل بین سرویس‌های یک نرم‌افزار مبتنی بر مایکروسرویس صحبت کنیم، چه در مورد داده‌های دیتابیس، نیاز به یک روش مطمئن برای شناسایی منحصربه‌فرد داده‌ها وجود داره. استفاده از شناسه‌های ترتیبی (Sequential Integers) مثل Auto-Increment توی دیتابیس‌ها ساده و سریعه ولی توی محیط‌های توزیع‌شده که چندین سرور به طور همزمان ID تولید می‌کنن، برای جلوگیری از تکرار، نیاز به هماهنگی مرکزی دارن که خودش گلوگاه مقیاس‌پذیریه (Scalability).

برای پاسخ به این نیاز، UUID (Universally Unique Identifier) به وجود اومده. UUID‌ها شناسه‌های 128 بیتی (۳۶ کاراکتر) هستن که بدون نیاز به هماهنگی مرکزی، منحصر به فرد بودن رو در سطح جهانی تضمین می‌کنن. سال ۲۰۲۴، استاندارد رسمی RFC 9562 نسخه‌ی ۷ رو معرفی کرده: ۴۸ بیتِ اول «تایم‌استمپ یونیکس بر حسب میلی‌ثانیه»، بقیه بیت‌ها تصادفیِ امن. نتیجه؟ شناسه‌ها زمان‌مرتب و در عین حال یونیک هستن. چرا زمان‌مرتب بودن این شناسه‌ها مهمه؟ چون مثلا توی نسخه ۴، شناسه کاملا تصادفیه و اگر به ترتیب بخواهیم مرتب کنیم احتمال اینکه شناسه‌ای که الان تولید می‌کنید بعد از شناسه‌ای که دو ساعت پیش یا دو سال پیش تولید کردید قرار بگیره زیاده. این یعنی شروع مشکل. چه مشکلی؟ ایندکس جداول یا سری‌های زمانی.

فرض کنین یه کتاب دارید که شماره صفحاتش کاملا رندوم ولی یکتا باشه. در حالت عادی که شماره صفحات مرتب و دنبال هم هستن وقتی دنبال صفحه ۱۳۷ کتاب می‌گردید، اول یه جای کتاب رو باز می‌کنید و می‌بینید مثلا ۱۸۹ است، چون مطمئنید شماره ۱۳۷ قبلش است دیگه صفحات بعدی رو نگاه نمی‌کنید، یه جا قبل‌تر رو باز می‌کنید می‌بینید ۱۲۵ است، دیگه قبل‌تر و نمی‌گردید و چند صفحه جلوتر، ۱۳۷ رو پیدا می‌کنید. این یعنی پیدا کردن سریع‌تر مطالب. حالا اگر شماره صفحات رندوم باشه، هر بار که مرتبش کنیم با اولین مقدار جدید، نظم به هم می‌ریزه و پیدا کردن صفحات دشوار می‌شه.

مرور نسخه‌ها تا به امروز:

نسخه v1: مبتنی بر زمان و MAC Address  » ترتیبی بر اساس زمان، یونیک جهانی » ولی افشای آدرس MAC (مشکل حریم خصوصی)

نسخه v2: مبتنی بر Domain محلی و Security  » رزرو شده برای DCE Security » کاربری و استفاده بسیار محدود.

نسخه v3: مبتنی بر نام (MD5 Hashing)  » همیشه برای یک "نام" و "دامین" مقدار یکسان تولید می‌شه.  » از هش قدیمی MD5 استفاده می‌کنه که منسوخ شده.

نسخه v4:  کاملاً تصادفی، یونیک جهانی با بالاترین میزان تصادفی بودن. » نامرتب؛ عملکرد ایندکس دیتابیس (B-tree) رو به شدت کاهش می‌دهه. » متاسفانه همچنان رایج، اما برای Primary Key نامناسب.

نسخه v5:  مبتنی بر نام (SHA-1 Hashing)  مشابه v3، اما از هش بهتر SHA-1 استفاده می‌کنه » فقط برای مواردی که نیاز به تکرارپذیری UUID است، مناسبه.   » بهتر از v3، برای تولید شناسه‌های ثابت از URL یا نام.

نسخه v6: مشابه v1 ولی با ترتیب زمانی بهتر » مرتب زمانی، ولی بدون افشای MAC
» هنوز نسخه draft است، » کاربردش جایگزینی v1 در آینده

نسخه v7: مبتنی بر زمان یونیکس + مقدار تصادفی » مرتب بر اساس زمان و در عین حال یونیک جهانی + عملکرد بهینه دیتابیس »   بهینه برای Primary Key خصوصا توی سیستم‌های توزیع‌شده و سری‌های زمانی »  امکان افزودن کسریِ زیرِ میلی‌ثانیه و/یا کانتر هم برای تضمین مرتب‌بودن در همان میلی‌ثانیه پیش‌بینی شده.

نسخه v8: فضای سفارشی/تجربی برای نیازهای خاص.

📌 نسخه UUIDv7 به صورت بومی توی PostgreSQL 18 و SQL Server 2025 و پایتون ۳.۱۴ و دات‌نت ۹ و گو هم gofrs/uuid v5 پشتیبانی می‌شه ولی MySQL و MariaDB و جاوا هنوز نسخه بومی رو پیاده نکردن.

تِک افترنون
🔥171👍1👎1
به نظر شما، اینکه Everything in Python is an object نقطه قوت ع پایتون ع یا ضعفش؟
Anonymous Poll
32%
هنوز درکش نکردم، نمیتونم نظر بدم
64%
نقطه قوت
5%
نقطه ضعف