.لینکهای مفید برای شرکت در مسابقه:
میتوانید سوالهای خود را در رابطه با سوالات و دیگر بخشهای پایتون از قسمت "سوال بپرسید" مطرح کنید.
توجه کنید که نسخه پایتون استفاده در سوالات ۳.۷ است.
فرهاد که به تازگی در کوئرا استخدام شده، تصمیم گرفته برای کمک به بخش Careers کوئرا تعدادی دستور طراحی کند. او که تسلط کمی به خط فرمان دارد و فقط توانسته مدل شرکت را تکمیل کند و به علت همزمان شدن امتحاناتش با زمان تحویل، به کمک شما برای تکمیل دستورات نیاز دارد.
پروژه اولیه را از این لینک دریافت کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای کمک به فرهاد، دستورات خواسته شده را در فایلهای خواسته شده پیادهسازی کنید.
addCompany
میخواهیم درون فایل addCompany.py
، دستوری برای جنگو بنویسیم که با اجرای آن، به ترتیب مقادیر name, email, phone, description (از چپ به راست) را از کاربر دریافت کند و با این مقادیر، یک نمونه از کلاس Company بسازد.
null=False
هستند، کاربر حتما باید مقداری را وارد کند. در صورتی که کاربر بدون وارد کردن مقداری Enter زد باید خطای Error: This field cannot be blank.
نمایش داده شود و برای فیلدهایی که دارای ویژگی null=True
هستند، با زدن Enter به مرحله بعد رفته و مقدار آن فیلد None شود.فیلد name
باید حداکثر ۵۰ کاراکتر باشد؛ در غیر اینصورت، عبارت
Error: Ensure this value has at most 50 characters (it has COUNT).
نمایش داده شود که به جای کلمهی COUNT، تعداد کاراکترهای عبارت شما قرار میگیرد.
همچنین این فیلد باید یکتا باشد؛ در غیر اینصورت، عبارت
Error: That name is already taken.
نمایش داده شود.
آدرس وارد شده باید یک ایمیل معتبر باشد، در غیر اینصورت باید عبارت
Error: Enter a valid email address.
نمایش داده شود.
یک شماره موبایل در صورتی معتبر است که یکی از حالتهای زیر را دارا باشد:
در غیر این صورت باید عبارت
Error: Phone number format is not valid.
نمایش داده شود.
این فیلد محدودیتی ندارد.
self.stderr.write(error_msg)
استفاده کنید.editCompany
میخواهیم درون فایل editCompany.py
، دستوری برای جنگو بنویسیم که یک positional arguments به عنوان نام شرکت و همچنین چهار optional arguments (--description
,--phone
,--email
,--name
) دریافت و فیلدهای مربوط به آن شرکت را بروز کند.
null=False
هستند، اگر آرگومان آنها برابر ''
بود؛ استثنای CommandError با پیام Field cannot be blank.
رخ دهد (به جای کلمهی Field
، نام فیلد با حرف ابتدای بزرگ قرار میگیرد.) اما برای فیلدهایی که دارای ویژگی null=True
هستند، میتواند برابر ''
باشد؛ ولی مقدار فیلد تغییری نمیکند.در صورتی که شرکتی با این نام وجود نداشت؛ باید یک Exception
با پیام
Company matching query does not exist.
رخ دهد.
آرگومان name
باید حداکثر ۵۰ کاراکتر باشد؛ در غیر اینصورت، یک Exception
با پیام
Error: Ensure this value has at most 50 characters (it has NUM).
رخ دهد که به جای NUM تعداد کاراکترهای عبارت شما قرار میگیرد.
همچنین این فیلد باید یکتا باشد، در غیر اینصورت، باید یک Exception
با پیام
Error: That name is already taken.
رخ دهد.
آدرس وارد شده باید یک ایمیل معتبر باشد در غیر این صورت باید یک Exception
با پیام
Error: Enter a valid email address.
رخ دهد.
یک شماره موبایل در صورتی معتبر است که یکی از حالتهای زیر را دارا باشد:
در غیر این صورت باید یک Exception
با پیام
Error: Phone number format is not valid.
رخ دهد.
این آرگومان محدودیتی ندارد.
rmCompany
میخواهیم درون فایل rmCompany.py
، برای جنگو بنویسیم که نام تعدادی (صفر یا بیشتر) شرکت را دریافت کند و درصورتی که شرکتی با آن نامها وجود داشت آن را از پایگاه داده حذف کند.
در صورتی که شرکتی با این نامها وجود نداشت، به ازای هر نام غیرمعتبر باید عبارت
COMPANY matching query does not exist.
نمایش داده شود، که به جای COMPANY نام شرکت وارد شده قرار میگیرد.
در صورت وجود --all
در دستور، بدون توجه به نام شرکتهای وارد شده (در صورت وجود)، تمام شرکتها حذف میشوند.
self.stderr.write(error_msg)
استفاده کنید.collectCompany
میخواهیم درون فایل collectCompany.py
، دستوری برای جنگو بنویسیم که با اجرای آن، یک فایل CSV به نام company.csv
شامل اطلاعات تماس شرکتها، در ریشهی پروژه ایجاد شود.
self.stderr.write(error_msg)
و در قسمتهایی که گفته شده یک Exception
رخ دهد، از دستور raise
استفاده کنید.career/management/commands/addCompany.py
career/management/commands/collectCompany.py
career/management/commands/editCompany.py
career/management/commands/rmCompany.py
این سوال از نوع سوالات چندفایلی است. برای حل سوال میتوانید پروژه را در قالب یک فایل ZIP که شامل کلیه فایلهای موجود در پروژه است، ارسال کنید.