جنگولرن
4.1K subscribers
305 photos
85 videos
33 files
593 links
آموزش Django و بستگان
-مفاهیم پر کاربرد پایتون
-مفاهیم مهندسی نرم افزار
-آشنایی با تجربه حرفه ای ها
-آشنایی با راهکارهای حرفه ای ها برای افزایش پرفورمنس
و...

جهت تبلیغ دایرکت کانال پیام بدید. پست 24 ساعته یک میلیون تومن.
Download Telegram
Forwarded from Milad Hatami
Media is too big
VIEW IN TELEGRAM
⭕️💢کافه جنگو💢⭕️

آموزش جنگو پایتون
جلسه : سوم
موضوع این جلسه: ساختار جنگو، ساخت اولین اپ و آشنایی با urls

رشته: فنی پایه 11 کتب جدید

پایه: 11 فنی و 11 و 12 کاردانش

درس: وب

سطح: متوسط

مدرس: مهندس حاتمی

🔻🔻🔻🔻🔻🔻

#کافه_دانش
#کافه_جنگو
#جلسه_3
#سطح_متوسط_پیشرفته
#توسعه_وب
#یادگیری_مفاهیم_وب
#دبیرخانه_کشوری_رایانه
#مستقر_در_استان_زنجان
#کانال_شاد_دبیرخانه_رایانه
@Yvt_computer
#کافه_دانش
t.iss.one/Zncd_ir_Cafe
#آدرس_سایت_دبیرخانه_رایانه
ZNCD.ir
👍31
جنگولرن
⭕️💢کافه جنگو💢⭕️ آموزش جنگو پایتون جلسه : سوم موضوع این جلسه: ساختار جنگو، ساخت اولین اپ و آشنایی با urls رشته: فنی پایه 11 کتب جدید پایه: 11 فنی و 11 و 12 کاردانش درس: وب سطح: متوسط مدرس: مهندس حاتمی 🔻🔻🔻🔻🔻🔻 #کافه_دانش #کافه_جنگو #جلسه_3 #سطح_متوسط_پیشرفته…
ویدئو جلسه سوم - ساختار جنگو، ساخت اولین اپ و آشنایی با urls

لینک آپارت این ویدئو:
https://aparat.com/v/itu3kk2

این ویدئو رو برای همکاران آموزش و پرورش ساختم.
کلاس به صورت آنلاین بود.
بیش از 30 نفر در کلاس شرکت داشتن. و استقبال خوبی شد، خداروشکر.

توی این ویدئو که برای همکاران هنرستانی برگزار شد، اولین اپلیکیشن جنگو رو ساختیم.
ابتدا با جداول جنگو در دیتابیس sqlite آشنا شدیم. بعدش رفتیم سراغ ORM جنگو و در ادامه تونستیم لیست کاربران و همچنین جزییات کاربر رو نمایش بدیم.
با مثال کاربران با urls و templates آشنا شدیم. و فهمیدیم که هر اپ میتونه اجزای مخصوص خودش رو داشته باشه.
آخر کلاس هم پرسش و پاسخ داشتیم.
توی این دوره قراره بر اساس کتاب Django 5 By Example پیش بریم. ولی مفاهیمی فراتر از کتاب رو قطعا پوشش خواهیم داد.
تمرکز این دوره بر پرسش و پاسخ خواهد بود. که بتونیم به همکاران راهنمایی بدیم.


اگه نکته ای یا انتقادی دارید، توی کامنت ها بنویسید لطفا
یا به @miladhzz پیام بدید
👏41
مسیر ساخت WAF در ترب؛ نگاهی به چالش‌ها و تجربه‌های به‌دست آمده

مسیر طراحی و پیاده‌سازی WAF در ترب، سفری بود از ابزارهای آماده و متنوع تا ساخت یک سیستم اختصاصی و متناسب با نیازهای خودمان. در ابتدا با راه‌حل‌هایی مانند OPNsense و iptables تلاش کردیم تا جلوی درخواست‌های مشکوک را بگیریم. این روش‌ها ساده و سریع بودند، اما در مقیاس بالا مشکلاتی مثل کندی، دشواری در عیب‌یابی و محدودیت در نمایش خطا به کاربر داشتند.

در ادامه، با استفاده از Traefik سعی کردیم کنترل ترافیک را به لایه‌ی ۷ منتقل کنیم تا بتوانیم رفتار کاربران را دقیق‌تر تحلیل کنیم و در صورت نیاز، با نمایش چالش (challenge) از صحت درخواست‌ها مطمئن شویم. این روش هر چند مزیت‌هایی داشت، اما در برابر رشد ترافیک و حملات DDoS پایداری کافی نداشت و نگه‌داری از قوانینش در مقیاس بالا سخت بود.

در نهایت، با مهاجرت به Envoy و توسعه‌ی سیستمی بر پایه‌ی فیلتر External Processing، امکان پیاده‌سازی WAF برای ترب فراهم شد. در این معماری جدید، وظایف مدیریت قوانین و اعمال قوانین از هم جدا شدند (control plane و data plane)، قوانین با ساختاری ساده ولی کارآمد مدیریت می‌شوند، و عملکرد سیستم در تست‌ها نشان داد که افزایش زمان پاسخ‌گویی ناچیز و قابل قبول است.

استفاده از فرمت mmdb برای ذخیره‌ی قوانین IP باعث شد تا مصرف منابع به شکل چشم‌گیری کاهش یابد و انتقال قوانین از control plane به data plane سریع‌تر انجام شوند. به این ترتیب، WAF جدید توانست بدون فدا کردن سرعت یا پایداری، جایگزین مناسب و قابل توسعه‌ای برای زیرساخت‌های قبلی باشد.

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

لینک پست
33
Forwarded from tech-afternoon (Amin Mesbahi)
💡♻️ مفهوم و کاربرد API-First Development

توسعه‌ی نرم‌افزار رو میشه مثل ساختمون، بدون نقشه و طرح معماری ساخت! نگید نمیشه؛ چون خیلیا می‌سازن و شده! 😂 تیم‌ها شروع می‌کنن به دیوارکشی (توسعه فرانت‌اند و بک‌اند)، ولی وقتی می‌رسن به اتصالات (Integration)، می‌بینن لوله‌کشی و سیم‌کشی (API) شبیه خونه‌ی پت‌ومت در اومده که از پریز برق آب میاد، لوله برق داره یا درِ پارکینگ به جای کوچه، به پذیرایی همسایه باز می‌شه؛ ساختمونه هم بین ساختمون‌های مجاورش شبیه جوجه کلاغ وسط صد تا جوجه اردکه!

رویکرد سال‌های دور (دلار هزار تومنی) این بود که API یه "محصول جانبی" برای ارتباط با سایر سیستم‌ها محسوب می‌شد؛ یعنی اول بک‌اند نوشته می‌شد، بعد یه قسمتی از اون رو به‌صورت API در معرض استفاده قرار می‌دادن. ریشه‌های این روش، عموما توی خاک سیستم‌های داده‌محور (Data-First) رشد می‌کرد؛ و کمتر "مصرف‌کننده‌محور" (Consumer-Centric) بود.
از طرفی زیاد دیدیم که تیم‌ها معطل هم برای آماده شدن API می‌مونن! یا اعصابشون سر تغییراتی که تیم مقابل روی APIهاش بعد از تفاهم اولیه داده خورد می‌شه! فرانت می‌گه "API تون درست کار نمی‌کنه"، بکند می‌گه "شما درست صداش نمی‌زنین"، و QA هم وسط این دعوا نرخ تعیین می‌کنه! یه بخش بزرگ از این سردردها از نداشتن یه زبون مشترک و قرارداد واضح بین تیم‌هاست.

از طرف دیگه، خیلی وقت‌ها می‌بینیم که بکند کدش رو نوشته، بعد مستندات رو می‌نویسه، بعد معلوم می‌شه مصرف‌کننده یه چیز دیگه می‌خواسته! حالا برگردیم و دوباره بنویسیم؟ یا همینجوری با کثیف‌کاری وصلش کنیم؟ شنیدن جمله "ما بعداً مستندات رو کامل می‌کنیم!" چیز غریب و نادری نیست! ولی واقعیت اینه که توی تیم‌های بالغ، اول API Spec رو می‌نویسن، بعد کد. اگر هم خیلی بالغ باشن، این Spec رو به عنوان یه قرارداد (Contract) بین تیم‌ها در نظر می‌گیرن و با ابزارهای خودکار، صحت پیاده‌سازی و انطباق عینی با طرح و نقشه‌ی اولیه رو کنترل می‌کنن.

🧭 مفهوم API-First یعنی چی؟

مفهوم API-First یعنی قبل از نوشتن کد، اول API رو طراحی کنیم (عموما توسط معمار این اتفاق می‌افته) یعنی بشینیم، فکر کنیم، بنویسیم که چه endpointهایی داریم، چه input/output هایی، چه status codeهایی، چه headerهایی... و همه‌ی این‌ها رو توی یه فایل OpenAPI Spec یا مشابهش ثبت کنیم.
این یعنی API ما از ابتدا مستند شده، با بیزنس، با پروداکت، با تیم‌های همکار می‌شه سناریوسازی و مرور کرد؛ تغییر داد و منطبقش کرد با نیاز واقعی؛ و بعد به کد! بعتر هم برای تغییرات، اول API Spec تغییر می‌کنه و بعد کد. چه اتفاق میوفته؟

- پیش‌بینی‌پذیری: همه می‌دونن قراره چه داده‌ای رد و بدل بشه.
- موازی‌سازی توسعه: تیم‌های مختلف می‌تونن هم‌زمان پیش برن؛ یکی Mock بسازه، یکی پیاده‌سازی واقعی.
- مستندسازی خودکار: چون API از اول با استانداردهایی مثل OpenAPI تعریف میشه، مستندات همیشه با واقعیت هم‌راستا می‌مونن.
- کیفیت بالاتر: چون قبل از کدنویسی، درباره طراحی و naming و consistency فکر می‌کنی.

اینطوری API Spec شما اولا توی سورس‌کنترل نگهداری می‌شه، همواره نسخه تست، استیج رو به صورت live در دسترسی داریم، API Owner هر دامنه مشخصه؛ هر کی عشقش کشید به هر شکلی یه API نمی‌نویسه، breaking changeها و کانفلیکت‌ها قبل از تغییر در API آشکار می‌شن و کلی مزیت دیگه که از حوصله پست تلگرامی خارجه.

رویکرد API-First فقط یک روش نیست، یک تغییر فرهنگی در سازمان، و تغییر استراتژیک در توسعه نرم‌افزاره. این رویکرد، API رو از یک "افزونه" به یک "محصول اصلی" تبدیل می‌کنه که برای تجربه توسعه‌دهنده، سرعت و کیفیت نهایی خیلی حیاتیه. وقتی API-First باشیم، سیستم‌های ما در برابر تغییرات مقاوم‌تر، انعطاف‌پذیرتر و آماده‌تر برای Integration Economy خواهند بود. یکی از شرکت‌هایی که بر اساس رویکرد API First کار می‌کنه زالاندو است که اتفاقا خیلی سخاوتمندانه، یا به توصیف دقیق‌تر، هوشمندانه، دستورالعمل و راهنمای خودش رو سال‌هاست به صورت کدباز منتشر کرده و به نظر من بسیار مستند پخته و خوبیه.

پیشنهاد می‌کنم API رو با ساده‌سازی‌هایی که go, fastAPI, flask, .NET یه موضوع خیلی ساده نبینیم، طراحی و نگهداری بد، مصیبت‌های خودش رو در بلندمدت نشون می‌ده، موقع اینتگریشن‌های بعدی نشون می‌ده و اون وقته که متوجه می‌شیم ای کاش از ابتدا مشورت گرفته بودیم و صرف «کار کردن» API به خودمون نمره قبولی نمی‌دادیم! حتمن این روش پرهزینه‌تر و نیازمند زمان‌ آماده‌سازی و توسعه بیشتریه، ولی عملا سرمایه‌گذاری زمان رشد و اینتگریشن خواهد بود.

Zalando RESTful API and Event Guidelines
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍41
نکته‌ای برای نام‌گذاری مقادیر بولین و وضعیت‌ها:

برای مقادیر بولین، اسم رو به شکل سؤال بنویس تا خوندنش طبیعی‌تر بشه 👇
به جای active بنویس is_active
به جای verified بنویس is_verified
به جای access بنویس has_access
به جای edit بنویس can_edit یا is_editable
به جای deleted بنویس is_deleted

اگه حالت‌ها بیش از دو تا هستن (مثلاً pending / approved / rejected)،
از Enum استفاده کن تا کد خواناتر و ایمن‌تر بشه.

همچنین می‌تونی بعضی وضعیت‌ها رو با property‌ها نمایش بدی:
@property
def should_be_canceled(self):
return self.status in ["pending", "failed"]


✍🏻@thealibigdeli_channel
👍1111
Forwarded from Milad Hatami
Media is too big
VIEW IN TELEGRAM
⭕️💢کافه جنگو💢⭕️

آموزش جنگو پایتون
جلسه : چهارم
موضوع این جلسه: آشنایی با مدیریت url و آشنایی با مدلها

رشته: فنی پایه 11 کتب جدید

پایه: 11 فنی و 11 و 12 کاردانش

درس: وب

سطح: متوسط

مدرس: مهندس حاتمی

🔻🔻🔻🔻🔻🔻

#کافه_دانش
#کافه_جنگو
#جلسه_4
#سطح_متوسط_پیشرفته
#توسعه_وب
#یادگیری_مفاهیم_وب
#دبیرخانه_کشوری_رایانه
#مستقر_در_استان_زنجان
#کانال_شاد_دبیرخانه_رایانه
@Yvt_computer
#کافه_دانش
t.iss.one/Zncd_ir_Cafe
#آدرس_سایت_دبیرخانه_رایانه
ZNCD.ir
3👍1
جنگولرن
⭕️💢کافه جنگو💢⭕️ آموزش جنگو پایتون جلسه : چهارم موضوع این جلسه: آشنایی با مدیریت url و آشنایی با مدلها رشته: فنی پایه 11 کتب جدید پایه: 11 فنی و 11 و 12 کاردانش درس: وب سطح: متوسط مدرس: مهندس حاتمی 🔻🔻🔻🔻🔻🔻 #کافه_دانش #کافه_جنگو #جلسه_4 #سطح_متوسط_پیشرفته…
ویدئو جلسه چهارم - آشنایی با مدیریت url و آشنایی با مدلها + پرسش و پاسخ

برای همکاران هنرآموز کامپیوتر

لینک آپارت این ویدئو:
https://www.aparat.com/v/dbv8ael

توی این ویدئو که برای همکاران هنرستانی برگزار شد، با url resolver آشنا شدیم.
با استفاده از urls.py تونستیم بین صفحات بچرخیم و با استفاده از نامگذاری path ها کار رو راحت تر کردیم. در ادامه با استفاده از کتاب، مدل Post رو نوشتیم و با مفهوم migrate و کار دستور makemigrations آشنا شدیم.آخر کلاس هم پرسش و پاسخ داشتیم.
توی این دوره قراره بر اساس کتاب Django 5 By Example پیش بریم. ولی مفاهیمی فراتر از کتاب رو قطعا پوشش خواهیم داد.
تمرکز این دوره بر پرسش و پاسخ خواهد بود. که بتونیم به همکاران راهنمایی بدیم.


اگه نکته ای یا انتقادی دارید، توی کامنت ها بنویسید لطفا
یا به @miladhzz پیام بدید
4
django.pdf
621.2 KB
سلام دوستان! 👋
امروز یه ترفند خیلی جالب یاد گرفتم. 😍فقط با یه دستور کل مدل‌های Django رو دیاگرام کردم.

یعنی دقیقاً ببینی که هر مدل چطور به بقیه وصله، روابطش چیه، ForeignKey کجاها داری و خلاصه ساختار دیتابیس رو به‌صورت تصویری ببینی!

📌 اگه این آموزش برات مفید بود، حتماً بنویس تا آموزش‌های بیشتری از Django و ابزارهای کاربردی بذارم 💻

از لینکدین Elmira Nikrudi
🔥235👍4
اینارو ببین:
کد اول:
def f1(a):
print(a)
print(b)

f1(10)

کد دوم:
b = 6
def f2(a):
print(a)
print(b)
b = 9

f2(10)

اگه میگی هر دو خطا میخورن 👍
اگه میگی فقط اولی خطا 👎
اگه میگی فقط دومی خطا 🤔

از کتاب Fluent Python
👎57👍422🤔1🆒1
Audio
ویس مصاحبه با صفا صفری، محقق امنیت

صفا تازگی ها طلای مسابقات ملی مهارت رو گرفته و در حال تمرین برای مسابقات جهانی هست.

مصاحبه توی هنرستان شهید دبیریان، منطقه 16 تهران به صورت آنلاین برگزار شد

این بار سوالات بچه هارو حذف نکردم و اتفاقا گفتگو قشنگی شد.

لینک ویدئو:
https://www.aparat.com/v/fnh1y35

تشکر از صفا
🔥103
جنگولرن
اینارو ببین: کد اول: def f1(a): print(a) print(b) f1(10) کد دوم: b = 6 def f2(a): print(a) print(b) b = 9 f2(10) اگه میگی هر دو خطا میخورن 👍 اگه میگی فقط اولی خطا 👎 اگه میگی فقط دومی خطا 🤔 از کتاب Fluent Python
نظر فنی یکی از دوستان در مورد این پست (به نظر ایشون دانستن این مفاهیم مهمه):

قانون LEGB یکم سو تفاهم هست درش. بعضیا فکر میکنن این قانون داره میگه اگه local نبود پس میره enclosing رو "میگرده"،‌اگه نبود میره global رو "میگرده" تا پیدا کنه و انتظار دارن مثال دوم کار بکنه و اولین b رو از global بیاره و بعد که تعریف شد تو local اگه بازم b رو خواستیم از local بیاره حالا. در صورتی که چنین چیزی نیست در حالت کلی(اخرش تو پرانتز گفتم). ما باید bytecode تولید شده رو ببینیم و بعد بگیم چه رفتاری داره. یعنی میشد که اونجوری هم پیاده سازی بشه ولی efficient نیست اصلا حالا جلوتر میگم چرا.

اسکوپ متغیر ها در زمان compile مشخص میشه نه runtime و این قانون داره اولویت ها رو مشخص میکنه که تو "compile time" چطور resolve بشن. وقتی کامپایلر یه assignment میبینه داخل فانکشن، اون متغیر رو mark میکنه که local هست و تو runtime وقتی شما اون متغیر رو بخواید "فقط" توی namespace عه local دنبالش میگرده اگه بود میاره اگه نبود error میده.
متغیر ها توی global توی یک دیکشنری ذخیره میشن، ولی توی local توی آرایه هستن خیلی سریعتر هستن چون با ایندکس بهش دسترسی پیدا میکنید نه دیکشنری lookup. یعنی جاش مشخصه اصلا کجاست تو آرایه. اونتو یا متغیر هست که میاره یا نیست که میگه:
UnboundLocalError: cannot access local variable 'b' where it is not associated with a value
وقتی اون آرایه رو گشت و نبود دیگه گشتن رو متوقف میکنه و پروسه تموم میشه برای این efficient تره. یا وقتی mark شد که global هست دیگه نمیاد اول local رو بگرده ببینه نیست بعد بره تازه global رو بگرده.

بایت کد های یک فانکشن رو بدون ران کردنش نگاه کنید میبینید LOAD_FAST و LOAD_GLOBAL داره. LOAD_FAST منظورش local variable هست که با index عه اون یکی هم اسمش مشخصه.

(من یه ذره موقع توضیح دادن تغییر دادم نحوه ی سرچ کردن متغیر رو رو چون شامل حال سوال شما نمیشه و توضیحاتی که دادم اینجا درسته، ولی یه جاهایی هم هست که واقعا "گشتن" داریم که سر builtin که مثلا تو LOAD_GLOBAL سرچ میشه یا LOAD_NAME که سرچ میکنه چند تا name space رو میگرده تا پیدا کنه. سر local و enclosing هیچوقت اینطوری نیست)

تشکر از سروش که همیشه دقیق کمک میکنه ❤️
👍73
Forwarded from TondTech (مسعود بیگی)
یه وقت نیاد که دیر بشه..
👍10👏3
Forwarded from Milad Hatami
Media is too big
VIEW IN TELEGRAM
⭕️💢کافه جنگو💢⭕️

آموزش جنگو پایتون
جلسه : پنجم
موضوع این جلسه: ادامه کار با مدل های وبلاگ و آشنایی با ORM جنگو

رشته: فنی پایه 11 کتب جدید

پایه: 11 فنی و 11 و 12 کاردانش

درس: وب

سطح: متوسط

مدرس: مهندس حاتمی

🔻🔻🔻🔻🔻🔻

#کافه_دانش
#کافه_جنگو
#جلسه_5
#سطح_متوسط_پیشرفته
#توسعه_وب
#یادگیری_مفاهیم_وب
#دبیرخانه_کشوری_رایانه
#مستقر_در_استان_زنجان
#کانال_شاد_دبیرخانه_رایانه
@Yvt_computer
#کافه_دانش
t.iss.one/Zncd_ir_Cafe
#آدرس_سایت_دبیرخانه_رایانه
ZNCD.ir