
راهنمای کامل جنگو برای مبتدیان – قسمت 2
معرفی
به بخش دوم آموزش جنگو ما خوش آمدید! در مقاله قبل یعنی راهنمای کامل جنگو برای مبتدیان – قسمت ۱ چیزهایی که نیاز داشتیم رو نصب کردیم. امیدواریم همه شما تونسته باشید پایتون و جنگو رو در یک محیط مجازی راه اندازی کنید. ما قبلاً پروژه ای رو ایجاد کرده ایم که قراره پیرامون اون حرکت کنیم. الان به نوشتن کد تو همون پروژه خواهیم پرداخت.
تو این مقاله، قصد داریم کمی در مورد پروژه ای که قراره توسعه بدیم، صحبت کنیم تا زمینه ای لازم ایجاد بشه.
شما رو نمیدونم، اما شخصاً با دیدن نمونههای عملی و کدها، بیشتر یاد میگیرم.پس، قبل از اینکه وارد قسمت اصلی بشیم، با کمی وقت و به طور خلاصه در مورد این پروژه ای که قراره توسعه بدیم صحبت کنیم.
اگر قبلاً تجربه توسعه وب دارید و احساس میکنید توضیحات بیش از حده، میتوانید تصاویر رو مرور کنید تا مشخص بشه که قراره چه چیزی بسازیم و بعد به مقاله بعدی این آموزش برید.اما اگر تو زمینه توسعه وب تازه کارید، حتما پیشنهاد می کنم که به مطالعه ادامه بدید. تا بینش خوبی در مورد مدل سازی و طراحی برنامه های کاربردی وب بدست بیارید. توسعه وب، و به طور کلی توسعه نرم افزار، فقط کدنویسی نیست.

استفاده از نمودار موردی
پروژه ما یه مکان گفتگو (یه انجمن) هستش. کل ایده اینه که چندین تابلو (boards) رو ذخیره کنیم، که مثل دسته ها رفتار می کنن. بعد داخل یک برد خاص، کاربر می تونه با ایجاد یک موضوع جدید، بحث جدیدی (topic) رو آغاز کنه. تو این تاپیک، بقیه کاربرها هم می تونن با ارسال پاسخ در بحث شرکت کنن.
ما باید راهی پیدا کنیم تا یک کاربر معمولی رو از یک کاربر ادمین متمایز کنیم، چون فقط ادمین ها قراره تابلوهای جدید ایجاد کنن. تصویر زیر، مروری بر موارد اصلی و نقش هر نوع کاربر هستش:

نمودار کلاس
با نمودار Use Case، میتونیم درباره موجودیتهای پروژه صحبت کنیم. موجودیت ها مدل هایی هستن که ما ایجاد میکنیم، و خیلی نزدیک به داده هایی است که با برنامه جنگو پردازش می کنیم.برای اینکه بتونیم موارد توضیح داده شده تو بخش قبل رو پیاده سازی کنیم، حداقل باید مدل های زیر رو پیاده سازی کنیم: Board، Topic، Post و User.

در ضمن درباره نحوه ارتباط مدل ها با هم، هم فکر کنید. خطوط به ما میگن که، تو یک موضوع، ما باید یک فیلد داشته باشیم تا تشخیص بدیم که به کدام Board تعلق داره. به طور مشابه، پست (Post) به یک فیلد نیاز داره که نشان بده به کدام موضوع (Topic) تعلق داره تا بتونیم تو بحث ها فقط پست های ایجاد شده تو یک موضوع خاص رو فهرست کنیم. در اخر، هم تو موضوع به فیلدهایی نیاز داریم تا بدونیم چه کسی بحث رو شروع کرده و همچنین تو پست هم یه همچین نیازی رو داریم تا بتونیم تشخیص بدیم چه کسی پاسخ رو ارسال می کنه.
ما همچنین میتونیم با انجمن و مدل کاربر ارتباط داشته باشیم، پس میتونیم تشخیص بدیم چه کسی یک برد مشخص رو ایجاد کرده. اما این اطلاعات مربوط به برنامه کاربردی نیست. راه های دیگری برای ردیابی این اطلاعات وجود دارد که تو ادامه می بینیم.
حالا که نمایش کلاس پایه رو داریم، باید فکر کنیم که هر کدوم از این مدل ها چه نوع اطلاعاتی را باید تو خودشون ذخیره کنن. این نوع اطلاعات می تونن در عین راحتی، پیچیده باشن. پس سعی کنید روی بخش های مهم تمرکز کنید. اطلاعاتی که برای شروع توسعه نیاز دارید. بعداً میتونیم با استفاده از migrations مدل رو بهبود بدیم که تو آموزش بعدی با جزئیات اون آشنا میشیم.
این یک نمایش اولیه از زمینه های مدل های ما هستش:

این نمودار کلاسی روی رابطه بین مدل ها تاکید داره. این خطوط و فلش ها در نهایت به فیلدها تبدیل می شن.
برای مدل تابلو (Board)، با دو فیلد شروع می کنیم: نام (name) و توضیحات (description). فیلد نام برای جلوگیری از نام مباحث تکراری باید منحصر به فرد باشه و توضیحات صرفاً برای اشاره به موضوع مد نظر قرار داده می شه.
مدل موضوع (Topic) از چهار فیلد تشکیل شده: موضوع (subject)، آخرین تاریخ به روز رسانی (last update) که برای تعریف ترتیب موضوعات استفاده می شه، شروع کننده موضوع (topic starter) برای شناسایی کاربری که موضوع رو شروع کرده، و فیلدی به نام تابلو (board) برای تعیین اینکه یک موضوع خاص (Topic) به کدام تابلو(Board) تعلق داره.
مدل پست (Post) دارای یک فیلد پیام (message) هستش که برای ذخیره متن پاسخهای پست استفاده میشه، فیلد ایجاد شده تو (created at) که زمان ایجاد این پست رو مشخص میکنه، فیلد بروز شده در (updated at) که تاریخ بروزرسانی پست رو مشخص میکنه. و همچنین باید ارتباطی بین این مدل و مدل کاربر (User) داشته باشیم تا مشخص بشه چه کسی این پست رو نوشته.
در اخر، مدل کاربر (User). تو نمودار کلاس، من فقط فیلدهای نام کاربری (username)، رمز عبور (password)، ایمیل (email) و برچسب سوپرکاربر (is superuser) رو ذکر کردم بنظرم فعلا در همین حد کافیه و کار ما رو راه می اندازه.
توجه به این نکته مهم است که ما نیازی به ایجاد یک مدل کاربر نخواهیم داشت زیرا جنگو قبلاً یک مدل کاربر را برای ما ایجاد کرده است.

یک Topic فقط با یک تابلو ارتباط داره که به این معنیه که نمیتونه خالی یا null باشه و تابلو میتونه با چندین Topic ارتباط داشته باشه.

یک Topic حداقل باید یه پست داشته باشه که پست ابتدایی هستش و میتونه بعد از اون پست های خیلی زیادی داشته باشه اما یک پست فقط میتونه یک موضوع داشته باشه.

یک Topic فقط باید با یک کاربر ارتباط داشته باشه که کاربر شروع کننده موضوع هست. اما کاربر می تونه بی نهایت موضوع داشته باشه.

یک پست باید دارای یک و تنها یک کاربر باشه که در تاریخ خاصی پست رو ایجاد کرده.یک کاربر میتونه هیچ پستی نداشته باشه یا می تونه بسیار زیاد پست قرار داده باشه وهمچنین یک کاربر میتونه در هر تاریخی پست خودش رو بروزرسانی کنه.
برای ترسیم نمودارهای ارائه شده تو این بخش از ابزار StarUML استفاده کردم.
نمای کلی پروژه (وایرفرم)

اینجا قصد دارم چیزی که در نهایت قراره به اون برسیم رو نمایش بدم تا کامل روشن بشه که برنامه قراره چه کاری رو انجام بده.
ابتدا باید تمام تابلوهای موجود، تو صفحه اصلی نمایش داده بشه:

اگر کاربر روی پیوندی کلیک کنه، مثلاً تو برد جنگو، باید همه موضوعات رو فهرست شده ببینه:

در اینجا ما دو مسیر اصلی داریم: یا کاربر روی دکمه “موضوع جدید” کلیک می کنه تا یک موضوع جدید ایجاد کنه، یا کاربر روی یک موضوع کلیک می کنه تا صحبت ها رو ببینه یا در یک بحث شرکت کنه.
صفحه “موضوع جدید”:

صفحه موضوع، نمایش پست ها و بحث ها:

اگر کاربر روی دکمه پاسخ کلیک کنه، صفحه زیر رو با خلاصه ای از پست ها به ترتیب معکوس می بینه (ابتدا جدیدترین):

برای ترسیم وایرفریم های (نمای کلی کار) خود می توانیم از سرویس draw.io استفاده کنیم، این سرویس رایگان هستش.
برای اینکه این مقاله خیلی طولانی نشه بقیه مراحل رو تو مقاله بعدی تقدیمتون خواهم کرد.
یک دیدگاه