دیتابیس Database و مدل Model در Django
دیتابیس Database و مدل Model در جنگو از درس قبل به خاطر دارید که آطلاعات دورهها به صورت ثابت داخل
در هنگام اجرای برنامه، ممکن است کاربر ورودی نامناسبی وارد کند یا برنامه با مشکلی غیرمنتظره روبهرو شود. برای مثال، اگر از کاربر بخواهیم یک عدد وارد کند اما او بهجای عدد یک متن وارد کند، برنامه ممکن است متوقف شود و یک پیام خطا نمایش دهد. در پایتون میتوان با استفاده از مدیریت خطا (Exception Handling) این شرایط را کنترل کرد تا برنامه بهصورت ناگهانی متوقف نشود و بتوانیم پیام مناسبی به کاربر نمایش دهیم. در این بخش با روشهای مختلف مدیریت خطا در پایتون، از جمله try، except، else، finally و raise آشنا میشویم.
در برنامهنویسی ممکن است برنامهای که نوشتهایم به دلایل مختلف نتواند به درستی اجرا شود. پایتون در چنین شرایطی خطا (Error) ایجاد میکند و معمولاً اجرای برنامه را متوقف میکند. برای مثال، کد زیر را در نظر بگیرید:
number = int(input("یک عدد وارد کنید: "))
print(number)اگر کاربر مقدار 25 را وارد کند، برنامه بهدرستی اجرا میشود:
یک عدد وارد کنید: 25
25اما اگر کاربر بهجای عدد، عبارت hello را وارد کند، پایتون نمیتواند آن را به عدد صحیح تبدیل کند و خطایی از نوع ValueError ایجاد میشود.
یک عدد وارد کنید: hello
ValueError: invalid literal for int()در چنین شرایطی بهتر است بهجای متوقف شدن برنامه، خطا را مدیریت کنیم و پیام مناسبی به کاربر نشان دهیم.
خطاها انواع مختلفی دارند. یکی از تفاوتهای مهم، تفاوت بین خطای نحوی (Syntax Error) و خطای زمان اجرا (Runtime Error) است. Syntax Error زمانی رخ میدهد که قواعد نوشتاری پایتون را رعایت نکرده باشیم:
if age >= 18
print("مجاز است")در اینجا علامت : فراموش شده است، بنابراین برنامه حتی قبل از اجرا شدن با خطای نحوی مواجه میشود. اما در Runtime Error کد از نظر نحوی صحیح است و برنامه شروع به اجرا میکند، ولی در هنگام اجرا با مشکلی مواجه میشود:
number = 10
result = number / 0
print(result)این کد از نظر نحوی درست است، اما تقسیم یک عدد بر صفر امکانپذیر نیست و خطای ZeroDivisionError ایجاد میشود. برای کنترل بسیاری از خطاهای زمان اجرا میتوانیم از try و except استفاده کنیم.
برای مدیریت خطا در پایتون معمولاً از دو دستور try و except استفاده میکنیم. کدهایی که احتمال دارد هنگام اجرا باعث ایجاد خطا شوند، داخل بخش try قرار میگیرند. اگر هنگام اجرای این کدها خطایی رخ دهد، پایتون اجرای بخش try را متوقف کرده و وارد بخش except میشود. ساختار کلی به این صورت است:
try:
# کدی که ممکن است خطا ایجاد کند
except:
# کدی که هنگام رخ دادن خطا اجرا میشودفرض کنید میخواهیم عددی را از کاربر دریافت کنیم:
try:
number = int(input("یک عدد وارد کنید: "))
print(number)
except:
print("لطفاً یک عدد معتبر وارد کنید.")اگر کاربر عدد 25 را وارد کند:
یک عدد وارد کنید: 25
25اما اگر عبارت hello را وارد کند:
یک عدد وارد کنید: hello
لطفاً یک عدد معتبر وارد کنید.در حالت دوم، تبدیل hello به عدد باعث ایجاد خطا میشود. پایتون بهجای متوقف کردن برنامه، وارد بخش except میشود و پیام مناسب را نمایش میدهد.
خطای تقسیم بر صفر یکی دیگر از خطاهای رایج است:
try:
number = int(input("یک عدد وارد کنید: "))
result = 100 / number
print(result)
except:
print("در محاسبه مشکلی رخ داد.")اگر کاربر 4 وارد کند:
25.0اما اگر 0 وارد کند، برنامه بهجای متوقف شدن، پیام بخش except را نمایش میدهد:
در محاسبه مشکلی رخ داد.بهتر است در برنامههای واقعی، بهجای استفاده از except بهتنهایی، نوع خطایی که انتظار داریم را مشخص کنیم. این کار باعث میشود مدیریت خطا دقیقتر باشد.
برای مثال:
try:
number = int(input("یک عدد وارد کنید: "))
except ValueError:
print("ورودی باید یک عدد باشد.")در اینجا فقط خطای ValueError مدیریت میشود. در ادامه، انواع خطاهای رایج مانند ValueError و ZeroDivisionError را بررسی میکنیم و یاد میگیریم چگونه هر خطا را بهصورت جداگانه مدیریت کنیم.
در پایتون خطاهای مختلفی وجود دارند و هر کدام نشاندهنده یک مشکل خاص در برنامه هستند. برای مدیریت بهتر خطا، میتوانیم نوع خطا را در except مشخص کنیم.
ValueErrorاین خطا معمولاً زمانی ایجاد میشود که مقدار مناسبی برای یک عملیات وارد نشده باشد. برای مثال، اگر بخواهیم یک متن را به عدد تبدیل کنیم:
number = int("hello")پایتون نمیتواند عبارت "hello" را به عدد تبدیل کند و خطای ValueError ایجاد میشود. میتوانیم این خطا را به شکل زیر مدیریت کنیم:
try:
number = int(input("یک عدد وارد کنید: "))
print(number)
except ValueError:
print("لطفاً فقط عدد وارد کنید.")اگر کاربر بنویسد:
25برنامه بدون مشکل اجرا میشود. اما اگر بنویسد:
helloپیام زیر نمایش داده میشود:
لطفاً فقط عدد وارد کنید.ZeroDivisionErrorاین خطا زمانی ایجاد میشود که بخواهیم عددی را بر صفر تقسیم کنیم.
try:
number = int(input("یک عدد وارد کنید: "))
result = 100 / number
print(result)
except ZeroDivisionError:
print("تقسیم بر صفر امکانپذیر نیست.")اگر کاربر 0 وارد کند، خطای ZeroDivisionError رخ میدهد و پیام مناسب نمایش داده میشود.
گاهی ممکن است در یک بخش از برنامه، بیش از یک نوع خطا رخ دهد. در این شرایط میتوانیم چند except داشته باشیم. مثلاً:
try:
number = int(input("یک عدد وارد کنید: "))
result = 100 / number
print(result)
except ValueError:
print("لطفاً یک عدد وارد کنید.")
except ZeroDivisionError:
print("عدد صفر قابل قبول نیست.")در این مثال:
hello وارد کند، ValueError مدیریت میشود.0 وارد کند، ZeroDivisionError مدیریت میشود.5 وارد کند، برنامه بدون خطا ادامه پیدا میکند.این روش نسبت به استفاده از except خالی، دقیقتر و قابل کنترلتر است.
ترتیب exceptها اهمیت دارد. پایتون هر خطا را با exceptهایی که از بالا به پایین نوشته شدهاند بررسی میکند و اولین مورد مناسب را اجرا میکند.
در ساختار مدیریت خطا، علاوه بر try و except میتوانیم از دستور else نیز استفاده کنیم. کدهای داخل else فقط زمانی اجرا میشوند که هیچ خطایی در بخش try رخ نداده باشد.
ساختار کلی:
try:
# کدی که ممکن است خطا ایجاد کند
except:
# در صورت رخ دادن خطا
else:
# اگر خطایی رخ ندهدtry:
number = int(input("یک عدد وارد کنید: "))
except ValueError:
print("ورودی نامعتبر است.")
else:
print("عدد شما:", number)اگر کاربر 25 وارد کند:
یک عدد وارد کنید: 25
عدد شما: 25اما اگر hello وارد کند:
یک عدد وارد کنید: hello
ورودی نامعتبر است.در حالت دوم، بخش else اجرا نمیشود؛ چون هنگام اجرای try خطا رخ داده است.
میتوانستیم دستور print را هم داخل try قرار دهیم:
try:
number = int(input("یک عدد وارد کنید: "))
print("عدد شما:", number)
except ValueError:
print("ورودی نامعتبر است.")اما وقتی بخشی از کد فقط در صورت موفقیتآمیز بودن عملیات باید اجرا شود، استفاده از else باعث میشود ساختار برنامه واضحتر باشد.
مثلاً:
try:
age = int(input("سن خود را وارد کنید: "))
except ValueError:
print("سن باید به صورت عدد وارد شود.")
else:
if age >= 18:
print("شما بزرگسال هستید.")
else:
print("شما زیر 18 سال هستید.")در این مثال، ابتدا تلاش میکنیم ورودی را به عدد تبدیل کنیم. اگر تبدیل با موفقیت انجام شد، بخش else اجرا میشود و میتوانیم از مقدار age استفاده کنیم.
دستور دیگری که در مدیریت خطا استفاده میشود، finally است. کدهای داخل finally در هر صورت اجرا میشوند؛ یعنی چه خطایی رخ دهد و چه خطایی رخ ندهد.
ساختار کلی:
try:
# کد اصلی
except:
# در صورت خطا
finally:
# در هر صورت اجرا میشودمثال:
try:
number = int(input("یک عدد وارد کنید: "))
print(100 / number)
except ValueError:
print("لطفاً یک عدد وارد کنید.")
except ZeroDivisionError:
print("تقسیم بر صفر امکانپذیر نیست.")
finally:
print("پایان برنامه")اگر کاربر 20 وارد کند:
5.0
پایان برنامهاگر کاربر 0 وارد کند:
تقسیم بر صفر امکانپذیر نیست.
پایان برنامهو اگر hello وارد کند:
لطفاً یک عدد وارد کنید.
پایان برنامههمانطور که میبینید، در هر سه حالت عبارت پایان برنامه نمایش داده میشود.
finally معمولاً برای کارهایی استفاده میشود که باید در پایان عملیات انجام شوند؛ حتی اگر برنامه با خطا مواجه شده باشد. برای مثال، هنگام کار با فایلها یا ارتباط با منابع خارجی، میتوان از finally برای انجام عملیات پاکسازی و آزاد کردن منابع استفاده کرد.
گاهی فقط نمیخواهیم بدانیم که خطایی رخ داده است؛ بلکه میخواهیم اطلاعات خود خطا را نیز دریافت کنیم. برای این کار میتوانیم از as در دستور except استفاده کنیم.
ساختار کلی:
try:
# کدی که ممکن است خطا ایجاد کند
except ErrorType as error:
print(error)در اینجا متغیر error اطلاعات مربوط به خطایی که رخ داده است را در اختیار ما قرار میدهد.
try:
number = int(input("یک عدد وارد کنید: "))
result = 100 / number
print(result)
except ValueError as error:
print("خطا:", error)
except ZeroDivisionError as error:
print("خطا:", error)اگر کاربر بهجای عدد، hello وارد کند، پایتون اطلاعات خطای ایجادشده را در متغیر error قرار میدهد. خروجی ممکن است چیزی شبیه این باشد:
خطا: invalid literal for int() with base 10: 'hello'اگر کاربر 0 وارد کند:
خطا: division by zeroاستفاده از as زمانی مفید است که بخواهیم جزئیات خطا را مشاهده کنیم، ثبت کنیم یا در ادامه برنامه از آن استفاده کنیم.
تا اینجا بیشتر درباره خطاهایی صحبت کردیم که پایتون بهصورت خودکار ایجاد میکند. اما گاهی برنامهنویس خودش میخواهد در صورت برقرار بودن یک شرایط، خطایی ایجاد کند. برای این کار از دستور raise استفاده میکنیم. مثلاً فرض کنید میخواهیم برنامهای بنویسیم که سن کاربر را دریافت کند. اگر سن منفی باشد، این مقدار برای ما قابل قبول نیست.
age = int(input("سن خود را وارد کنید: "))
if age < 0:
raise ValueError("سن نمیتواند منفی باشد.")
print("سن شما:", age)اگر کاربر 20 وارد کند:
سن شما: 20اما اگر -5 وارد کند، خودمان یک ValueError ایجاد کردهایم:
ValueError: سن نمیتواند منفی باشد.try:
age = int(input("سن خود را وارد کنید: "))
میتوانیم خطایی را که خودمان ایجاد کردهایم، با except مدیریت کنیم:
try:
age = int(input("سن خود را وارد کنید: "))
if age < 0:
raise ValueError("سن نمیتواند منفی باشد.")
print("سن شما:", age)
except ValueError as error:
print("خطا:", error)حالا اگر کاربر -5 وارد کند، برنامه متوقف نمیشود و پیام زیر نمایش داده میشود:
خطا: سن نمیتواند منفی باشد.
raise به ما اجازه میدهد شرایط نامعتبر را خودمان تشخیص دهیم و یک Exception مناسب ایجاد کنیم. این موضوع در برنامههای بزرگتر اهمیت زیادی دارد، زیرا میتوانیم از ورود دادههای نامعتبر به بخشهای مختلف برنامه جلوگیری کنیم.
پایان محاسبهراهنما: در این تمرین از try، except، else، finally و raise استفاده کنید.
تا اینجا با مفاهیم اصلی پایتون و نحوه کار با فایلها و ماژولها آشنا شدیم. در مرحله بعد، وارد دنیای پایگاههای داده (Database) میشویم؛ جایی که میتوان اطلاعات را بهصورت منظم ذخیره، مدیریت و بازیابی کرد. در این بخش ابتدا با مفهوم پایگاه داده و SQLite آشنا میشویم و سپس یاد میگیریم چگونه با استفاده از پایتون به یک پایگاه داده متصل شویم و اطلاعات مورد نیاز خود را در آن ذخیره و مدیریت کنیم.
گام بعدی : اتصال به پایگاه دادهدیتابیس Database و مدل Model در جنگو از درس قبل به خاطر دارید که آطلاعات دورهها به صورت ثابت داخل
طراحی قالب سایت با HTML، CSS و Tailwind CSS تا اینجا با ساختار اصلی Django، URL، View و Template آشنا
Template و رابط کاربری در Django در سه درس قبلی، با ساخت پروژه، ساختار Django، URL و View آشنا شدیم.
URL و View در جنگو در درسهای قبل با Django آشنا شدیم، محیط مجازی را ساختیم، Django را نصب کردیم
ساختار Project و App در Django در درس قبل با Django آشنا شدیم، محیط مجازی ساختیم، Django را نصب کردیم
شروع کار با Django در دوره آموزش جامع پایتون با مفاهیمی مانند متغیرها، شرطها، حلقهها، توابع، کلاسها، فایلها و کار
عملیات CRUD درSQLite در بخش قبل با مفهوم پایگاه داده، SQLite و نحوه اتصال پایتون به پایگاه داده آشنا شدیم.
اتصال به پایگاه داده (Database) در پایتون وقتی یک برنامه اطلاعاتی را از کاربر دریافت میکند، معمولاً لازم است این
مدیریت خطا (Error Handling) در پایتون در هنگام اجرای برنامه، ممکن است کاربر ورودی نامناسبی وارد کند یا برنامه با
کار با فایل، ماژول، پکیج و محیط مجازی در پایتون در پروژههای واقعی، معمولاً همهی کدها را در یک فایل
کپسولهسازی (Encapsulation) در پایتون فرض کنید کلاسی برای حساب بانکی نوشتهاید. اگر هر کسی بتواند موجودی حساب را مستقیماً تغییر
وراثت و مفاهیم پیشرفته شی گرایی تا اینجا یاد گرفتهاید که چگونه با استفاده از کلاس (Class) و شی (Object)
کلاس و شیء در پایتون (Object-Oriented Programming) تا اینجا با متغیرها، شرطها، حلقهها، توابع و ساختارهای داده در پایتون آشنا
تابع لامبدا (Lambda Function) در پایتون گاهی اوقات فقط به یک تابع خیلی کوچک نیاز داریم؛ تابعی که قرار است
توابع در پایتون اگر هنگام برنامهنویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و
مجموعه (Set) در پایتون به زبان ساده، Set مجموعهای از عناصر منحصربهفرد (Unique) است که ترتیب مشخصی ندارد و اجازه
دیکشنری در پایتون تا اینجا با لیست (List) و تاپل (Tuple) آشنا شدیم که هر دو مجموعهای از دادهها را
تاپل (Tuple) در پایتون بعد از آشنایی با لیست (List)، نوبت به یکی دیگر از ساختارهای داده در پایتون یعنی
لیست (List) در پایتون پرکاربردترین ساختار داده تا اینجا یاد گرفتید که هر متغیر فقط یک مقدار را در خود
ساختارهای داده در پایتون در برنامههای واقعی معمولاً با یک داده سروکار نداریم، بلکه باید تعداد زیادی اطلاعات را ذخیره
حلقههای تکرار در پایتون (Python Loops) فرض کنید معلم میخواهد نمرات ۳۰ دانشآموز را از کاربر دریافت کند. اگر حلقه
عملگرهای مقایسهای (Comparison Operators) تا اینجا یاد گرفتیم که با عملگرهای محاسباتی میتوانیم اعداد را با هم جمع، تفریق و…
دریافت ورودی از کاربر در پایتون (Python Input) تا اینجا یاد گرفتیم که چگونه مقدار یک متغیر را خودمان داخل
عملگرهای محاسباتی در پایتون (Arithmetic Operators) تقریباً تمام برنامهها به انجام محاسبات نیاز دارند؛ از جمع و تفریق ساده گرفته
کار با رشتهها در پایتون (Python Strings) مدیریت و پردازش متنها در برنامهها در دنیای برنامهنویسی، اطلاعات همیشه عدد و
متغیرها در پایتون (Python Variables) اولین قدم برای ذخیره و پردازش اطلاعات تصور کنید یک برنامه مینویسید که قرار است
شروع برنامه نویسی با پایتون ساخت اولین پروژه (Hello World) فهرست مطالب بعد از نصب Python چه کاری انجام دهیم؟
آموزش نصب پایتون و ابزارهای موردنیاز (راهنمای کامل برای ویندوز) اگر تصمیم گرفتهاید برنامهنویسی را یاد بگیرید، احتمالاً نام زبان
الگوهای کندل استیک پیشرفته: راهنمای جامع برای معاملهگران حرفهای الگو های کندل استیک پیشرفته (یا به بیان دیگر الگوهای شمعی
آیلتس جنرال یا آکادمیک؟ کدام را باید انتخاب کنیم؟ آیا میدانید که انتخاب اشتباه بین آیلتس آکادمیک و جنرال میتواند
دانلود رایگان نمونه سوالات آزمون PTE جنرال اگر تصمیم گرفتهاید با هدف مهاجرت به یک کشور انگلیسی زبان، در آزمون
معرفی آزمون های زبان انگلیسی معتبر در ایران| کدام یک بهتر است؟ اگه قصد ادامه تحصیل یا مهاجرت داشته باشید،
بهترین روشهای آمادگی برای آزمون تافل چگونه برای آزمون تافل آماده شویم؟ آیا شما هم قصد دارید برای کسب نمره
چگونه در خارج از کشور برای آزمون آیلتس ثبت نام کنیم؟ اگر قصد مهاجرت تحصیلی یا کاری دارید، احتمالاً نام
آزمون GRE مناسب چه رشتههایی است؟ اگر قصد ادامه تحصیل در مقاطع کارشناسی ارشد یا دکترا در دانشگاههای بینالمللی را
بهترین نمونه سوالات اسپیکینگ تافل هوم ادیشن آزمون تافل هوم ادیشن این روزها یکی از پرطرفدارترین گزینهها برای سنجش مهارت
نحوه ثبت نام در آزمون دولینگو در ایران به صورت کامل نحوه ثبت نام در آزمون دولینگو در ایران چگونه
هزینه آزمون GRE در ایران چقدر است؟ اگر قصد مهاجرت تحصیلی دارید، احتمالاً نام آزمون GRE به گوشتان خورده است.
راهنمای کامل ثبتنام و پرداخت هزینه آزمون PTE در ترکیه برای متقاضیان ایرانی آزمون PTE (Pearson Test of English) یکی از
ووچر آزمون چیست و چگونه میتوان آن را تهیه کرد؟ ثبتنام در آزمونهای بینالمللی مانند TOEFL، GRE، PTE، GMAT، IELTS
بهترین تکنیک های لیسنینگ آیلتس برای کسب نمره بالا آزمون آیلتس (IELTS) یکی از معتبرترین آزمونهای ارزیابی مهارت زبان انگلیسی
آزمون پلاس مرجع آموزش برنامهنویسی، هوش مصنوعی، شبکه، نمونه سؤالات کنکورهای کامپیوتر، آزمونهای زبان دکتری و مدارک بینالمللی فناوری اطلاعات است. با ارائه آموزشهای تخصصی، منابع آموزشی و راهنمای آزمونها، به دانشجویان و متخصصان کمک میکنیم تا مهارتهای خود را توسعه داده و در مسیر موفقیت تحصیلی و شغلی گام بردارند.