Django

راهنمای کامل جنگو برای مبتدیان – قسمت 2

معرفی

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

تو این مقاله، قصد داریم کمی در مورد پروژه ای که قراره توسعه بدیم، صحبت کنیم تا زمینه ای لازم ایجاد بشه.

شما رو نمی‌دونم، اما شخصاً با دیدن نمونه‌های عملی و کدها، بیشتر یاد می‌گیرم.پس، قبل از اینکه وارد قسمت اصلی بشیم، با کمی وقت و به طور خلاصه در مورد این پروژه ای که قراره توسعه بدیم صحبت کنیم.

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

استفاده از نمودار موردی

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

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

Use Case Diagram
شکل 1: نمودار موردی استفاده از عملکردهای اصلی ارائه شده توسط انجمن

نمودار کلاس

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

Basic Class Diagram
شکل 2: پیش نویس نمودار کلاس انجمن

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

ما همچنین می‌تونیم با انجمن و مدل کاربر ارتباط داشته باشیم، پس می‌تونیم تشخیص بدیم چه کسی یک برد مشخص رو ایجاد کرده. اما این اطلاعات مربوط به برنامه کاربردی نیست. راه های دیگری برای ردیابی این اطلاعات وجود دارد که تو ادامه می بینیم.

حالا که نمایش کلاس پایه رو داریم، باید فکر کنیم که هر کدوم از این مدل ها چه نوع اطلاعاتی را باید تو خودشون ذخیره کنن. این نوع اطلاعات می تونن در عین راحتی، پیچیده باشن. پس سعی کنید روی بخش های مهم تمرکز کنید. اطلاعاتی که برای شروع توسعه نیاز دارید. بعداً می‌تونیم با استفاده از migrations مدل رو بهبود بدیم که تو آموزش بعدی با جزئیات اون آشنا میشیم.

این یک نمایش اولیه از زمینه های مدل های ما هستش:

Class Diagram
شکل 3: نمودار کلاس با تأکید بر رابطه بین کلاس ها (مدل ها)

این نمودار کلاسی روی رابطه بین مدل ها تاکید داره. این خطوط و فلش ها در نهایت به فیلدها تبدیل می شن.

برای مدل تابلو (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) رو ذکر کردم بنظرم فعلا در همین حد کافیه و کار ما رو راه می اندازه.

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

Class Diagram Board and Topic Association

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

Class Diagram Topic and Post Association

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

Class Diagram Topic and User Association

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

Class Diagram Post and User Association

یک پست باید دارای یک و تنها یک کاربر باشه که در تاریخ خاصی پست رو ایجاد کرده.یک کاربر میتونه هیچ پستی نداشته باشه یا می تونه بسیار زیاد پست قرار داده باشه وهمچنین یک کاربر میتونه در هر تاریخی پست خودش رو بروزرسانی کنه.

برای ترسیم نمودارهای ارائه شده تو این بخش از ابزار StarUML استفاده کردم.

نمای کلی پروژه (وایرفرم)

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

ابتدا باید تمام تابلوهای موجود، تو صفحه اصلی نمایش داده بشه:

Wireframe Boards

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

Wireframe Topics

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

صفحه “موضوع جدید”:

Wireframe New Topic

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

Wireframe Posts

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

Wireframe Reply

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

برای اینکه این مقاله خیلی طولانی نشه بقیه مراحل رو تو مقاله بعدی تقدیمتون خواهم کرد.

امیرحسین باقری

امیرحسین باقری هستم عاشق برنامه نویسی مخصوصا با python و همینطور طراح قالب و متخصص فرانت اند؛ از دانشی که تو این مدت بدست آوردم میشه به HTML, CSS, Bootstrap, Flexbox, SASS, Python, Django, DRF و هوش مصنوعی اشاره کرد.
دکمه بازگشت به بالا