Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
907 - Telegram Web
Telegram Web
Forwarded from ITShield
دوره های🔥 رایگانی 🔥که در حال برگزاریه و تو کانال @itshield داره قرار میگیره:

⭐️دوره  اسمبلی (به هدف مقدمه برای مهندسی معکوس و تحلیل بدافزار)
https://www.tgoop.com/itshieldassembly
⭐️دوره رایگان پایتون برای نفوذگر سطح مقدمات
https://www.tgoop.com/itshield/1452
⭐️دوره  پایتون برای تست نفوذ پیشرفته (دوره مقدماتیش تموم شده که تو همین کانال  @itshield قرار گرفته)
https://www.tgoop.com/PythonForPentester
⭐️دوره برنامه نویسی سی پلاس پلاس (به هدف ابزار امنیتی نوشتن)
https://www.tgoop.com/CPlusPlus4Pentester
⭐️ دوره جرم شناسی ویندوز (For 500)
https://www.tgoop.com/for500
⭐️ دوره اتوماسیون صنعتی
https://www.tgoop.com/ICS_ITShield

😎پکیج رایگان ccna
https://www.tgoop.com/itshield/1322
🤓پکیج رایگان MCSE
https://www.tgoop.com/itshield/1326
🤓دوره رایگان ISMS
#isms
🥸دوره رایگان مقدمات SOC
#soc
🥸مینی دوره مهندسی اجتماعی
#مهندسی_اجتماعی
🥸 دوره جمع آوری اطلاعات برای تست نفوذ وب
#web_recon
🔥ماژول دوم دوره CEH
#CEH
یه سری دوره دیگه هم هست  که باید سرچ بزنین پیدا کنین
نکته هزینه شرکت در این دوره ها اینه که روی لینک زیر کلیک کنین و فاتحه برای عزیزان من بفرستین :
https://fatehe-online.ir/g/13486
🤓یه سری دوره و مباحث آموزشی رایگان دیگه هم هست که با سرچ و ... تو کانال بدست میاد
👆اینها رو تا میتونین نشر بدین تا کسی بخاطر یادگیری مقدمات هزینه نکنه
رایگان بودن دوره ها باعث نشده سطحی تدریسشون کنم و واقعا به اندازه دوره تجاری و حتی گاهی بیشتر بهشون اهتمام داشتم و دارم
👍1
Forwarded from Django Expert (Majid A.M)
مقاله جدیدم در وبسایت داکبورد با موضوع نکات امنیتی که باید در جنگو رعایت کنیم منتشر شد✌️❤️💣

برای مشاهده کلیک کنید

امروزه جنگو یک فریم‌ورک محبوب وب است که توسط بسیاری از برنامه نویسات برای ساخت وب اپلیکیشن‌های امن و مقیاس‌پذیر استفاده می‌شود و از آن در پروژه های بسیار بزرگی مانند اینستاگرام استفاده میشود🔥🔥

در این مقاله، به بررسی نکات امنیتی که باید در پروژه های جنگویی خود رعایت کنیم میپردازیم تا بتوانیم اپلیکیشن های تحت وب خود را تا سطح بالایی ایمن و از داده های مربوط به آن حفاظت کنیم👌🤌

@shahriaarrr12
@duckboardnet
👍3🔥1
کد تخفیف ۸۰ درصدی

دوره غیر رایگان ساخت فروشگاه اینترنتی با جنگو

اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.

چند قسمت از این دوره رو اینجا ببینید:
https://www.tgoop.com/djangolearn_ir/531
https://www.tgoop.com/djangolearn_ir/533
https://www.tgoop.com/djangolearn_ir/573
https://www.tgoop.com/djangolearn_ir/676
https://www.tgoop.com/djangolearn_ir/724
https://www.tgoop.com/djangolearn_ir/808
https://www.tgoop.com/djangolearn_ir/830

لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
3
جنگولرن
خب دوستان پیرو نظرسنجی بالا 👆🏻 هر کسی تمایل داره کدهاش توسط اعضای کانال جنگولرن بررسی بشه. ✔️و ظرفیت دریافت انتقادات مهلک رو داره (که باعث پیشرفت میشه قطعا) به صورت خصوصی با من در ارتباط باشه. آیدی من @miladhzz ✔️بعضی کدهارو هم می تونیم به صورت "برنامه…
سلام به همه

پیرو این پست

✔️اگه کد یا پروژه ای دارید و می‌خواهید دوستان در موردش نظر بدهند.

لکن برای من بفرستید. آیدی من @miladhzz

✔️اگه کسی قبلاً فرستاده و یادم رفته، بهم یادآوری کنه لطفا
🔥3
دومین پروژه برای کد ریویو

✔️پروژه جنگویی هست

اگه نظری دارید و نمیخواهید توی کامنت های این پست بنویسیدش خصوصی برام بفرستید. آیدی من @miladhzz

نکته: هر نظری اوکیه. فقط بی احترامی یا تحقیر و امثالهم نباشه. ممنون

✔️توضیحاتش:
این پروژه یک Api برای پنل پشتیبانی هست ممنون میشم اگر نگاهش کنید و بگید که چه مشکلاتی داره و چه ویژگی دیگر بهتر هست براش بگذارم

لینک:
https://github.com/yaser11138/Ticket-Api
👍1
Media is too big
VIEW IN TELEGRAM
بخشی از آپدیت جدید دوره ساخت فروشگاه اینترنتی با جنگو

✔️ تبدیل ویو فانکشن بیس به کلاس بیس در جنگو

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

توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️آشنایی با کلاس View
✔️ویوهای جنریک و نحوه ارث بری شون
✔️آشنایی با متد as_view
✔️آشنایی مختصر با متد dispatch

لینک ویدئو در آپارات:
https://www.aparat.com/v/ifby9eo
لینک ویدئو در یوتیوب:
https://youtu.be/hefA2sEby7c

هر مشکل یا ابهامی دیدید. خصوصی به @miladhzz پیام بدید
👍1
Forwarded from Python Hints
وقتی با افراد باقی تیم‌های شرکت‌هایی که باهاشون کار می‌کنم صحبت می‌کنم؛ همیشه سعی می‌کنم با دقت بسیار منتظر کلمات کلیدی باشم.
مثلا امروز متوجه شدم؛ یکی ازین شرکت‌ها داره روی django-ninja کار می‌کنه پروژه‌های جدید که بیشتر هم کوتاه مدت لازم هست (نهایتا ۳-۶ ماه) رو دارند میبرند روی این فریمورک بجای استفاده از drf یک تیم برای fastapi هم داریم ولی drf, django از خیلی سال پیش توی شرکت بوده و جا افتاده اما نداشتن Async, ... باعث شده دنیال جایگزین باشند؛ چندماه قبل دنبال golang هم رفتند اما به دلیل زیاد شدن هزینه‌ها توسط شرکت مادر تایید نشد (چون باید ۲ تا تیم ساخته می‌شد؛ نگهداری پروژه‌های بزرگ قدیمی؛ جابجایی برخی از پروژه‌های فعلی و البته توسعه پروژه‌های جدید روی golang )

اما پروژه django-ninja با توجه به آنچه من از این بچه‌ها شنیدم احتمال داره فریمورک جایگزین برای drf باشه؛ بد نیست اگر فرصت دارید شبی ۱-۲ ساعت نیم نگاهی به داکیومنت این پروژه داشته باشید.
پارسال گفتم هرکی سمت Async نره؛ توی تیم بازنده‌های پایتون خواهد بود.

Django-Ninja Rest Framework Github

خواستم تاکید کنم: توجه کنید که گفتم اگر وقت خالی دارید؛ ۱-۲ ساعت نیم نگاه داشته باشید.
👍73🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
شغل تو در امانه...
از لینکدین Ali Bayat
👏9👍2🤔2
📕 کتاب REST API Design Rulebook

📌 فصل سوم: Interaction Design with HTTP

📍پارت: دوم

#کتاب

💎 استاتوس کدهای ریسپانس (Response Status Codes) 💎

‏REST API‌ ها از قسمت Status-Line توی ریسپانس HTTP استفاده می‌کنن تا به کلاینت‌ها نتیجه درخواستشون رو اعلام کنن. استاندارد RFC 2616، ساختار Status-Line رو به این شکل تعریف کرده:
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF


‏HTTP حدود ۴۰ تا کد وضعیت استاندارد داره که برای بیان نتیجه درخواست‌های کلاینت استفاده میشه. این کدها به ۵ دسته اصلی تقسیم می‌شن که توی جدول زیر توضیح دادم:

⭕️ دسته‌بندی کدهای وضعیت:
1. 1xx: اطلاعاتی – اطلاعاتی در مورد سطح پروتکل انتقال میده.
2. 2xx: موفقیت‌آمیز – درخواست کلاینت با موفقیت قبول شده.
3. 3xx: تغییر مسیر – کلاینت باید یه کار اضافی انجام بده تا درخواست کامل بشه.
4. 4xx: خطای کلاینت – خطاهای این دسته مربوط به اشتباهات کلاینت هست.
5. 5xx: خطای سرور – سرور مسئولیت این خطاها رو قبول می‌کنه.


⭕️ قوانین استفاده از کدهای وضعیت:

⭕️ کد 200 (OK): برای موفقیت کلی
این کد معمولاً همون چیزیه که کلاینت انتظار داره ببینه. یعنی درخواست با موفقیت انجام شده و نیازی به استفاده از کد خاص دیگه‌ای از سری ۲xx نیست. برعکس کد 204، وقتی 200 برگرده، باید یه بدنه پاسخ (response body) هم داشته باشه.

⭕️ کد 200 (OK) نباید برای اعلام خطا استفاده بشه
همیشه باید از کدهای وضعیت HTTP درست استفاده کنید. به‌خصوص، نباید برای سازگار شدن با کلاینت‌های ساده‌تر از قواعد استاندارد API صرف‌نظر کرد.

⭕️ کد 201 (Created): برای ایجاد موفقیت‌آمیز منابع جدید
هر وقت که یه API یه منبع جدید برای درخواست کلاینت ایجاد می‌کنه (مثلاً توی یه کالکشن یا فروشگاه)، باید از کد 201 استفاده کنه. حتی اگر منبع جدید از طریق یه عمل کنترلر ایجاد بشه، باز هم 201 کد درستی برای پاسخ هست.

⭕️ کد 202 ("Accepted") باید برای شروع موفقیت‌آمیز یک عملیات غیرهمزمان استفاده بشه
کد 202 یعنی درخواست کلاینت قراره به صورت غیرهمزمان (آسنکرون) پردازش بشه. این کد به کلاینت میگه که درخواستش معتبر به نظر می‌رسه، اما ممکنه بعداً موقع پردازش به مشکل بخوره. این کد معمولاً برای عملیات‌هایی که زمان زیادی می‌برن استفاده می‌شه.
کنترلرها می‌تونن 202 رو برگردونن، اما منابع دیگه نباید این کار رو بکنن.

⭕️ کد 204 ("No Content") باید زمانی استفاده بشه که بدنه پاسخ (response body) خالیه
کد 204 معمولاً وقتی استفاده میشه که API به درخواست‌های PUT، POST یا DELETE پاسخ میده ولی قصد نداره که توی پاسخ، پیام یا داده‌ای برگردونه.
حتی در پاسخ به درخواست GET هم میشه از 204 استفاده کرد تا بگه منبع درخواست‌شده وجود داره، ولی چیزی برای نمایش نداره.

⭕️ کد 301 ("Moved Permanently") برای تغییر مکان دائمی منابع استفاده بشه
- کد 301 وقتی استفاده میشه که مدل منابع توی API تغییر بزرگی کرده و یه آدرس جدید برای منبع به کلاینت اختصاص داده شده. توی این حالت، آدرس جدید باید توی هدر "Location" به کلاینت اعلام بشه.

⭕️ از کد 302 ("Found") نباید استفاده بشه
کد 302 همیشه اشتباه فهمیده شده و برنامه‌نویسا توی پیاده‌سازیش اشتباه کردن. مشکل اصلی اینجاست که کلاینت‌ها به‌طور خودکار برای آدرس جدید یه درخواست GET می‌فرستن، حتی اگر روش اصلی درخواست چیز دیگه‌ای بوده.
برای رفع این مشکل، توی HTTP 1.1 کدهای 303 ("See Other") و 307 ("Temporary Redirect") معرفی شدن که به جای 302 باید استفاده بشن.

⭕️ کد 303 ("See Other") باید برای ارجاع کلاینت به یه URI دیگه استفاده بشه
وقتی یه کنترلر کارش رو تموم کرده، به جای فرستادن پاسخ توی بدنه‌ای که شاید کلاینت نمی‌خواد، می‌تونه با کد 303 یه URI جدید به کلاینت بده. این URI می‌تونه به یه پیام موقت یا یه منبع دائمی‌تر اشاره کنه.
این کد به API اجازه میده که به جای تحمیل دانلود اطلاعات به کلاینت، یه مرجع به منبع بده و کلاینت اگه بخواد می‌تونه با GET به URI جدید دسترسی پیدا کنه.

⭕️ کد 304 ("Not Modified") باید برای صرفه‌جویی در پهنای باند استفاده بشه
این کد شبیه کد 204 ("No Content") هست چون هیچ چیزی توی بدنه پاسخ نیست، اما تفاوت اصلی اینه که 204 وقتی استفاده می‌شه که هیچ داده‌ای برای فرستادن وجود نداره، ولی 304 وقتی استفاده میشه که منبع اطلاعات داره اما کلاینت قبلاً آخرین نسخه‌اش رو گرفته.
این کد بیشتر توی درخواست‌های HTTP شرطی (conditional requests) کاربرد داره.

@ninja_learn_ir
👍3
⭕️ کد 307 ("Temporary Redirect") برای تغییر موقتی مکان درخواست کلاینت استفاده بشه
‏- HTTP/1.1 کد 307 رو معرفی کرد تا کاربرد درست کد 302 ("Found") رو مشخص کنه. وقتی کد 307 برگرده، یعنی API قراره درخواست رو پردازش نکنه و کلاینت باید درخواستش رو به یه URI دیگه که توی هدر "Location" داده شده، بفرسته.
- این کد معمولاً برای اختصاص یه آدرس موقت به درخواست منبع استفاده میشه. مثلاً میشه درخواست رو به یه سرور دیگه انتقال داد.

⭕️ کد 400 ("Bad Request") برای اعلام شکست عمومی درخواست کلاینت استفاده بشه
کد 400 یه خطای کلی سمت کلاینت هست و زمانی استفاده میشه که هیچ کد دیگه‌ای از سری 4xx مناسب نباشه.

⭕️ کد 401 ("Unauthorized") باید زمانی استفاده بشه که مشکلی با اعتبارسنجی کلاینت وجود داره
این کد یعنی کلاینت سعی کرده به یه منبع محافظت‌شده دسترسی پیدا کنه ولی اعتبارنامه مناسب ارائه نداده. ممکنه اعتبارنامه‌ها اشتباه باشن یا اصلاً وجود نداشته باشن.

⭕️ کد 403 ("Forbidden") باید زمانی استفاده بشه که دسترسی به منبع غیرممکنه، فارغ از وضعیت اعتبارسنجی
- این کد یعنی درخواست کلاینت درسته ولی API اجازه انجامش رو نمیده. این موضوع ربطی به مشکل اعتبارنامه‌ها نداره (اون مورد 401 هست).
‏- APIهای REST از 403 برای مدیریت سطح دسترسی‌ها استفاده می‌کنن. مثلاً ممکنه یه کلاینت اجازه دسترسی به بعضی منابع رو داشته باشه ولی نه به همه. اگه کلاینت سعی کنه خارج از محدوده مجازش به منبعی دسترسی پیدا کنه، API باید با 403 پاسخ بده.

⭕️ کد 404 ("Not Found") باید زمانی استفاده بشه که URI کلاینت به منبعی مرتبط نمیشه
کد 404 یعنی API نمی‌تونه URI درخواست‌شده رو به منبعی متصل کنه.

⭕️ کد 405 ("Method Not Allowed") باید زمانی استفاده بشه که روش HTTP پشتیبانی نمیشه
‏- API با کد 405 پاسخ میده تا به کلاینت بگه که از روشی استفاده کرده که برای اون منبع مجاز نیست. مثلاً یه منبع فقط قابل خواندن ممکنه فقط GET و HEAD رو پشتیبانی کنه، ولی یه کنترلر ممکنه GET و POST رو مجاز بدونه اما PUT یا DELETE رو نه.
- پاسخ 405 باید شامل هدر "Allow" باشه که روش‌های مجاز برای اون منبع رو لیست کنه. مثلاً:
Allow: GET, POST


⭕️ کد 406 ("Not Acceptable") باید زمانی استفاده بشه که نوع داده‌ای که کلاینت درخواست داده قابل سرویس‌دهی نیست
- کد 406 یعنی API نمی‌تونه نوع مدیا (media type) درخواستی کلاینت رو ایجاد کنه. مثلاً اگه کلاینت درخواست داده به فرمت application/xml بده و API فقط با application/json کار کنه، کد 406 برمی‌گرده.

⭕️ کد 409 ("Conflict") باید زمانی استفاده بشه که درخواست کلاینت باعث نقض وضعیت منبع بشه
- کد 409 به کلاینت میگه که درخواستش باعث شده منبع API توی حالت ناسازگار یا غیرممکن قرار بگیره. مثلاً اگه کلاینت بخواد یه منبع پرشده رو حذف کنه و اون منبع هنوز داده داره، ممکنه API با 409 پاسخ بده.

⭕️ کد 412 ("Precondition Failed") باید برای پشتیبانی از عملیات‌های شرطی استفاده بشه
- این کد یعنی کلاینت یه سری شرایط رو توی هدر درخواستش مشخص کرده و به API گفته که فقط اگه اون شرایط برقرار باشه درخواستش رو انجام بده. اگه شرایط محقق نشه، API با کد 412 پاسخ میده.

⭕️ کد 415 ("Unsupported Media Type") باید زمانی استفاده بشه که نوع مدیا در payload درخواست قابل پردازش نباشه
- این کد یعنی API نمی‌تونه نوع مدیایی که کلاینت فرستاده رو پردازش کنه. مثلاً اگه کلاینت داده‌ها رو به فرمت application/xml بفرسته ولی API فقط با application/json کار کنه، کد 415 برگردونده می‌شه.

⭕️ کد 500 ("Internal Server Error") باید برای اعلام مشکل داخلی API استفاده بشه
- کد 500 یه خطای عمومی API هست که بیشتر فریم‌ورک‌های وب خودکار این کد رو برمی‌گردونن وقتی که درخواست کلاینت باعث ایجاد یه استثنا توی کد بشه.
- این خطا تقصیر کلاینت نیست، پس کلاینت می‌تونه همون درخواست رو دوباره امتحان کنه و امید داشته باشه که نتیجه متفاوتی بگیره.

@ninja_learn_ir
👍61
من میلاد حاتمی، برنامه نویس از سال 2008، قصد دارم به علاقمندان یادگیری طراحی سایت، به صورت خصوصی جنگو آموزش دهم.
🎯در صورتی که من مربی خصوصی جنگو شما بصورت آنلاین باشم:
⚡️یک اینترنت پر سرعت نیاز دارید.
قبل از شروع اولین جلسه به صورت رایگان:
⚡️با سوالاتی ساده، سطح مهارت شما در جنگو را ارزیابی می کنم.
⚡️به سوالات شما در مورد سرفصل ها پاسخ می دهم.
⚡️در صورت تمایل شما، با هم یک پروژه برای آموزش مشخص می کنیم.
⚡️در مورد هزینه، تعداد جلسات، ساعت آموزش و… صحبت می کنیم.
در طول جلسه :
⚡️نکات کاربردی را به شما یاد می دهم.
⚡️آموزش یکطرفه نخواهد بود و شما هم بعضی مواقع کد می نویسید و با چالش هایی مواجه خواهید شد.
⚡️با برخی ابزارهای کنترل سورس نظیر github آشنا خواهید شد.
⚡️با روش صحیح جستجوی سوالات برنامه نویسی در سایت های معتبر آشنا می شوید.
⚡️شما مجازید یک میلیون سوال بپرسید 🙂
بعد از هر جلسه:
⚡️با هم آموزش را مرور می کنیم.
⚡️در صورت لزوم به شما تمرین می دهم.
⚡️نظر شما را جهت بهتر شدن جلسه بعدی می پرسم.
⚡️در مورد جلسه بعدی برنامه ریزی می کنیم.
جهت ارتباط با من با @miladhzz در ارتباط باشید
👍7🔥6👎43😁2
🖤
48
Forwarded from Agora (Alireza Azadi)
توصیه می‌کنم خوندن این پست رو که حسین علیرضایی عزیز تو بلاگ مهندسی ترب منتشر کرده از دست ندین.

موضوع، راجع‌به بروز رسانی نسخه‌ی PostgresSQL از ۱۱ به ۱۶‌ه. علاوه بر نقل تجربه‌شون از شیوه‌ و چالش‌های انجام این عملیات که به‌نظرم بسیار دونستنش با ارزشه، به تفصیل به معرفی ابزار و روش‌های انجام این کار و مزایا و معایب هر کدوم از جنبه‌های مختلف پرداخته.

https://techblog.torob.com/postgresql-upgrade-from-11-to-16-torob-experience-v62efb53gn6h
👍61
چرا سورس کد بیشتر بد است؟

https://huly.blog/source-code-is-poison

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

خیلی وقت‌ها ما از کتابخونه و فریم‌ورک‌ها استفاده میکنیم به خاطر اینکه یک کار رو ساده میشه باهاشون انجام داد، از جنگو استفاده میکنیم چون کار باهاش راحته، داخل جنگو از DRF و simple jwt استفاده میکنیم چون ساخت api و لاگین رو برامون خیلی راحت میکنن. اما اینجا یک چیزی گاهی فراموش میشه.

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

و شاید بگید خوب این خوبه دیگه یارو کد برای ما زده و استفاده می‌کنیم و لذتشو میبریم. تو خیلی از مواقع این درسته، ولی امان از اون روزی که بخوایید یکچیزی رو تغییر بدید که فریم‌ورک/کتابخونه براتون انجام داده :) اونجاست که این سادگی که ازش لذت میبردید تبدیل کابوس میشه :D

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

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

@TorhamDevCH
👍151👎1
TorhamDev | تورهام 😳
سادگی همیشه خبر از پیچیدگی میده! خیلی وقت‌ها ما از کتابخونه و فریم‌ورک‌ها استفاده میکنیم به خاطر اینکه یک کار رو ساده میشه باهاشون انجام داد، از جنگو استفاده میکنیم چون کار باهاش راحته، داخل جنگو از DRF و simple jwt استفاده میکنیم چون ساخت api و لاگین رو…
یعنی چی؟
یعنی جنگو و DRF و simple jwt استفاده نکنیم؟

✔️استفاده کنید. با خیال راحت. خیلی هم خوبه

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

اگه کسی نظر فنی در این مورد داره، توی کامنت ها بنویسه 🙏🏻
👍11
💎 اصول Normalisation در طراحی دیتابیس 💎
امروز می‌خوام در مورد یکی از مهم‌ترین اصول طراحی دیتابیس یعنی "نرمال‌سازی" صحبت کنم. اگه می‌خواین دیتابیس‌تون پر سرعت و بدون مشکل کار کنه، باید با این سه فرم اصلی نرمال‌سازی آشنا بشین.

1⃣ فرم اول نرمال (1NF)
تو فرم اول نرمال، باید همه‌ی ستون‌های دیتابیس‌تون "اتمی" باشن. یعنی هر سلول از جدول باید فقط یه مقدار داشته باشه، نه چندتا مقدار!
📌 مثال:
فرض کن یه جدول داری که توش شماره تلفن‌های چند نفر رو ذخیره کردی. اگه تو یه سلول چند تا شماره تلفن ذخیره کنی، دیتابیست تو فرم اول نرمال نیست باید هر شماره تلفن توی یه ردیف جدا باشه.

2⃣ فرم دوم نرمال (2NF)
وقتی فرم اول رو رعایت کردی، می‌رسی به فرم دوم. تو این فرم، باید مطمئن بشی که همه‌ی ستون‌های غیرکلیدی، وابسته به کلید اصلی (Primary Key) باشن.
📌 مثال:
فرض کن یه جدول داری که اطلاعات دانش‌آموزان و درس‌هایی که می‌خونن رو ذخیره می‌کنه. اگه یه ستون مربوط به اطلاعات کلاس (مثل شماره کلاس) باشه که وابسته به دانش‌آموز نباشه، دیتابیس‌ت تو فرم دوم نرمال نیست. باید اون اطلاعات رو تو یه جدول جدا ذخیره کنی.

3⃣ فرم سوم نرمال (3NF)
حالا که فرم دوم رو رعایت کردی، می‌رسیم به فرم سوم. اینجا باید مطمئن بشی که هیچ ستون غیرکلیدی به یه ستون غیرکلیدی دیگه وابسته نباشه
📌 مثال:
اگه تو جدول دانش‌آموزان، هم اسم شهر و هم اسم استان رو ذخیره کنی و استان وابسته به شهر باشه، دیتابیس تو فرم سوم نرمال نیست. باید شهر و استان رو تو یه جدول دیگه ذخیره کنی.

جمع بندی 🎯
این سه فرم نرمال‌سازی باعث می‌شن دیتابیس‌تون بهینه‌تر باشه، خطاهای کمتری داشته باشه و به راحتی قابل توسعه باشه. پس اگه می‌خواین دیتابیس‌تون تو پروژه‌های بزرگ دچار مشکل نشه، حتما این اصول رو رعایت کنین 😉

امید وارم مفید بوده باشه :)

#sql #database #db #nf


@ninja_learn_ir
🔥10👍8
Media is too big
VIEW IN TELEGRAM
موشکافی ListView و نکات ریز تنظیمات template

توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️چطور از ListView استفاده کنیم
✔️چطور از attribute های ListView استفاده کنیم
✔️با تنظیمات template ها آشنا شدیم و نکاتی ریزی رو متوجه شدیم که دانستن شون قطعا مفید هست

لینک آپارات:
https://www.aparat.com/v/tga7df6
لینک یوتیوب:
در حال آپلود...

چند قسمت رایگان دیگه از این دوره رو اینجا ببینید:
https://www.tgoop.com/djangolearn_ir/531
https://www.tgoop.com/djangolearn_ir/533
https://www.tgoop.com/djangolearn_ir/573
https://www.tgoop.com/djangolearn_ir/676
https://www.tgoop.com/djangolearn_ir/724
https://www.tgoop.com/djangolearn_ir/889

لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
🔸 ناسازگاری نام‌ها در پایتون (naming conflicts)

🔸 اصلا دوره‌ای هست این نکات ریزو بهت بگه؟ 😬

🔸 فرضاً گفت!! اینجوری میگه که یادت نره ؟

🔗 دوره‌ی صفر تا قهرمانی پایتون

🔗 وب‌سایت : آیزی لرن
🔥51👍1👎1
2025/07/08 13:31:27
Back to Top
HTML Embed Code: