جنگولرن
3.78K subscribers
287 photos
73 videos
31 files
553 links
آموزش Django و بستگان
Download Telegram
سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی
Voice message
نمیشه یه جاهایی ش رو بوووق بزارم
ولی نکته قابل تاملی میگه
2
Forwarded from Learning With M
خیلی ها پرسیدن، تو که ۲۲ سال دات نت کار کردی، چرا الان java و golang و php؟
سوال خوبیه.

اگر ما مهندس نرم افزار هستیم، زبان میشه ابزار توسعه نرم افزار و هرچی باشه مهم نیست.

اگر برنامه نویس دات نت یا هر زبان دیگری هستیم و نمی‌خواهیم رهاش کنیم، میشیم برنامه نویس اون زبان.

برنامه نویسی ۳۰ الی ۴۰٪ مهندسی نرم افزاره.

نظر شخصیم اینه که : اگر به زبان برنامه نویسی خاصی وابستگی زیادی دارید، احتمالا به زودی AI با هزینه خیلی کمتر از انسان اونو برامون انجام خواهد داد، ولی اگر مهندسیتون رو تقویت کنید، AI قراره ۳۰ الی ۴۰% کارتون رو که همون برنامه نویسی باشه رو راحت تر کنه.
👍265👎5👏2🤮1🥱1
اضافه کردن یک CustomValidator به ولیدیتور پسورد در پروژه جنگو

برای فیلد پسورد تعداد کاراکتر مشخص کرده و متن پیغامش هم فارسی نوشته و از دیکشنری و ترجمه کردن استفاده نشده

تشکر از عمو جی پی تی
👍81
😂
😁51👏2
ویو LogoutView از نسخه 5.0 جنگو به بعد فقط ریکوئست از نوع post رو قبول میکنه.

یعنی چی؟
یعنی دیگه با لینک دادن بهش لاگ اوت نمیشیم و خطای 405 می بینیم.
باید با post بفرستیم و csrf_token هم ارسال بشه.

این نمودار سلسله مراتب هم از سایت https://ccbv.co.uk/ گرفتم.
👍18😁5
Forwarded from علی بیگدلی
همدلی‌در مسیر یادگیری

از اونجایی که قول داده بودم که با پلتفرم مکتبخونه پیگیر رایگان سازی دوره برای تعداد افراد بیشتری بشم. بالاخره این اتفاق افتاد و الان در طرح بزرگ همدلی مکتبخونه دو دوره جنگو مقدماتی و پیشرفته منو می تونین با ۱۰۰٪ تخفیف تهیه کنین. 😄🌷

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

جنگو مقدماتی:
https://mktb.me/tgk5/
جنگو پیشرفته:
https://mktb.me/vmxs/

۱۰۰ تا دوره محبوب مکتبخونه رایگان شدن
توی حوزه های مختلف از برنامه و نویسی و شبکه و هوش مصنوعی تا مهارت های نرم و زبان و ...

کافیه دوره ها رو توی سبد خریدتون با برداشتن تیک (دوره کامل ) و فقط خرید محتوا اضافه کنین و کد HAMDELI رو وارد کنین و در این صورت می تونین به رایگان از دوره ها استفاده کنین.
29👎2👍1
اگر می خواید AI جاتون رو نگیره سعی کنید Requirement Engineering رو یاد بگیرید و بفهمید.

یک کتاب خفن در موردش
Software Requirements Third Edition - Joy Beatty

متن بالا بخشی از یه پست کانال thisisnabi بود 😁

توضیحات chatgpt:
مهندسی نیازمندی‌ها یا Requirement Engineering بخشی از فرآیند توسعه نرم‌افزار است که به شناسایی، تحلیل، مستندسازی و مدیریت نیازمندی‌های سیستم می‌پردازد. هدف از این علم، اطمینان از این است که نرم‌افزار در نهایت به نیازها و خواسته‌های کاربران و ذینفعان پاسخ می‌دهد.

فرآیند مهندسی نیازمندی‌ها معمولاً شامل مراحل زیر است:

1. شناسایی نیازمندی‌ها**: در این مرحله، نیازمندی‌های واقعی سیستم شناسایی می‌شوند. این کار معمولاً با جمع‌آوری اطلاعات از ذینفعان، مصاحبه‌ها، کارگاه‌ها و بررسی مستندات موجود انجام می‌شود.

2. تحلیل نیازمندی‌ها**: نیازمندی‌ها تحلیل و بررسی می‌شوند تا مشخص شود که آیا آنها قابل فهم، کامل، قابل اندازه‌گیری و قابل تحقق هستند یا خیر.

3. مستندسازی نیازمندی‌ها**: نیازمندی‌ها باید به شکل مستند و مطابق با استانداردهای مشخصی ثبت شوند تا در آینده بتوان به آنها مراجعه کرد.

4. تایید نیازمندی‌ها**: پس از مستندسازی، نیازمندی‌ها باید توسط ذینفعان تأیید شوند تا از صحت و تناسب آنها اطمینان حاصل شود.

5. مدیریت نیازمندی‌ها**: نیازمندی‌ها باید به طور مداوم مدیریت شوند تا تغییرات و اصلاحات لازم در طول فرآیند توسعه نرم‌افزار اعمال شوند.

مهندسی نیازمندی‌ها به عنوان یکی از مراحل کلیدی در توسعه نرم‌افزار شناخته می‌شود و تأثیر زیادی بر کیفیت پروژه و رضایت مشتری دارد.
106👍3👎1👏1
Forwarded from Python BackendHub (Mani)
از کانال های مختلف دیدم پست میذارن که بله تایپینگ کد شما رو بیشتر میکنه کثیف تر میکنه اگه میخواستیم تایپ بزنیم که میرفتیم سمت C و این حرفا. اولا که C تایپ سیستم قوی نداره. تایپ سیستم بسیار ساده ای داره. پس statically typed بودن یا نبودن یک زبون رو خوب/بد بودن تایپ سیستمش تاثیری نمیذاره. پس اگه انتخابتون C هست برای اینکه تایپ سیستم قوی داشته باشین انتخاب درستی نیست!‌

ثانیا تایپینگ خودش یک داکیومنته. مثلا شما فکر کنید من یک سیستم نوشتم که ۱۰ تاسیستم مختلف رو integrate میکنه و یک API واحد میده برای هر ۱۰ تاشون. من یا میتونم ۱۰ صفحه داکیومنت بنویسم که اگه خواستیم یک سیستم جدید اضافه کنیم چه دپندسی هایی وجود داره یا اینکه میتونم یک Enum داشته باشم به اسم Service و همه جا با اون Enum بیام exhaustive check انجام بدم.

مثالش, من اینجا فقط یک سرویس Digikala دارم. و برای دیجی کالا یک رفتاری رو تعریف کردم و چک کردم سرویسی نباشه که این رفتار براش تعریف نشده باشه (`assert_never`)


def do_foo(service: Service):
match service:
case Service.DIGI_KALA: ...
case _: assert_never(service)


وقتی من یک سرویس جدید اضافه کنم به Enum ام اگه من کد رو کمپایل کنم یا تایپ چکر رو کد ران کنم و کدم کمپایل شه, کلی ارور تایپینگ میبینم که میگه شما این دپندنسی رو تعریف نکردی. مثل همین فانکشن. اون موقع به محض اینکه من تمام ایرادات تایپینگ رو برطرف کنم PRام تموم شده.

کد خواناییشو از دست میده؟ نه واقعا!‌شما اگه خوانایی کد رو به تعداد خط ملاک قرار میدین, پس کد ننویسید که خیلی خوانا و تمیز باشه. کد خوانا یعنی من کدی رو بخونم و بفهمم چیکار میکنه و constraint های اون کد چیه و تو موقع استفاده ازش اشتباه نکنم.

یک مثال دیگه بازم تو پست بعدی میزنم
@PyBackendHub
7👍1👎1
سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی
Voice message
فکر نکنید پست قبلی به این جواب داده
👎32😁2
داشتم یه مدل می‌ساختم که باید برای یه فیلدش چند مقدار مشخص تعریف می‌کردم.
طبق عادت قدیمی، رفتم یه لیست (value, label) بسازم… ولی وسط کار چشمم افتاد به models.TextChoices

گفتم خب، یه بار امتحانش کنم… و از همون لحظه فهمیدم این بهترین راهه برای تعریف choice field تو Django

مزیت‌هاش چیه؟

به جای "info" میگی Level.INFO → هم امن‌تره، هم IDE بهت autocomplete می‌ده.
مقدار دیتابیس و برچسب نمایشی رو با هم داری.
می‌تونی با obj.get_level_display() اسم قابل نمایش رو بگیری.
کد ساختاریافته تره
وقتی میشه کد تمیزتر و قابل نگهداری‌تری داشت، چرا هنوز با استرینگ خام کار کنیم؟ 😉

از لینکدین شایان حسین زاده
👍113👎1
امنیت پایدارتر با یک چرخش ساده! 😎

اگه با JWT کار کرده باشی، میدونی که ما یک access token و یک refresh token داریم

اکسس توکن ما که خب عمرش کوتاهه مثلا بعد 10 دقیقه باطل میشه و از طریق رفرش توکن که عمرش بلندتره(مثلا 7 روز) باید یک اکسس توکن و رفرش توکن جدید از سرور درخواست کنیم

🤨 حالا یک مسعله ای هست این وسط ؟!
رفرش توکن شما نباید اینطوری باشه که توی اون 7 روز هربار که ازش استفاده کردی فرت و فرت بهت اکسس توکن بده.

😈 اینطوری اگه هکر عزیز بنا به هر علتی به اون رفرش توکن دسترسی پیدا کنه توی اون 7 روز هزاربار میتونه token بگیره و عشق و حال کنه

☝🏻اینجا دوتا مفهوم داریم به اسم rotate refresh token
و revoke refresh token که خیلی شبیه هم هستن(با فرق کوچولو)

Rotate Token
یعنی هر بار که کاربر از Refresh Token استفاده کرد، یه Access Token جدید و یه Refresh Token جدید صادر می‌کنیم.
توی این حالت، Refresh Token قبلی دیگه نباید قابل استفاده باشه
اینجوریه که میگه: تو بیا رفرش توکن رو توی یک جایی مثلا ردیس یا هرچی، ذخیره کن و وقتی کاربر از اون رفرش توکن استفاده کرد قبلی رو حذف کن و جدیده رو بزار جاش تا یکبار بیشتر نتونه استفاده کنه

Revoke Token
یعنی بی‌اعتبار کردن یک توکن قبل از اینکه تاریخ انقضاش برسه(با expire طبیعی توکن اشتباه نگیری). مثلا وقتی کاربر logout می‌کنه یا Refresh Token جدید گرفته، Refresh Token قبلی رو revoke می‌کنیم.

در واقع میشه یه جورایی گفت :
اRotate یعنی "توکن جدید بده و قبلی رو کنار بذار"
اRevoke یعنی "توکن فعلی رو از کار بنداز"

این لینک زیر هم خیلی مفصل تر توضیح داده

https://auth0.com/docs/secure/tokens/refresh-tokens/refresh-token-rotation


از تلگرام @LearnByLearn
135👍4🔥1👏1