قبل از اینکه بریم سراغ ساختار پروژه جنگو ، خوبه که با مفهومی به اسم الگوی معماری آشنا بشیم.
الگوی معماری یا Architectural pattern یعنی:
نحوهٔ چیدمان بخشهای مختلف نرمافزار در کنار یکدیگر و همچنین نحوهٔ تعامل چنین بخشهایی با یکدیگر
لینک:
https://en.wikipedia.org/wiki/Architectural_pattern
پس الگوهای معماری متفاوتی وجود داره
یکی از این الگو ها خیلی هم معروفه MVC هست. و خیلی از فریمورک های وب ازش استفاده می کنن.
یه الگوی طراحی که اولین استفاده اش سال 1979 بوده و سال 1996 هم برای وب استفاده شده
به طور خلاصه، هدف از معماری mvc جدا کردن بخشهای مختلف نرمافزار ازهم عه
به طوری که بشه هر کدام از این بخشهارا به صورت مستقل توسعه داد
و در نهایت بینشون ارتباط ایجاد کرد.
کنترلر:
کار اعمال منطق هایی که میخواییم روی داده ها داشته باشیم. مثلا
و کلا منطق . مثلا دسترسی خاصی رو به کاربر بدیم اینجا انجام میدیم
وقتی که آدرسی رو وارد میکنیم و اینتز میزنیم. یه رکوئتست میاد برای کنترلر که پردازشش میکنه. اگه لازم باشه با مدل ارتباط برقرار میکنه و داده هارو آماده میکنه و میفرسته برای ویو. ویو هم نمایش اطلاعات هسنت.
مدل:
در واقع موضوعات دیتابیسی رو هندل میکنه. کوئری میزنه و…
ویو:
لایه پرزنتیشن و خروجی کار هم اینجاست
این معماری با اسم های مختلف و روش های مختلف توی فریمورکهای متفاوت در حال استفاده است.
بعد از ایجاد پروژه جنگو
manage.py
چیزی هس که مجموعه زیادی از کامند هایی که توی جنگو احتیاج داریم با این فایل در دسترس هستن. فایل مهمی هست.
init
که در واقع ما میتونیم از این فایل برای مواردی که میخواییم توی initial پروژه مون در دسترس مون باشه استفاده بکنیم توی پایتون کلا این پرونده اینیت برای پکیج ها، استفاده اش به این شکل هست.البته پایتون ۳.۳ به قبل این پرونده اینیت رو ما لازم داشتیم برای اینکه بتونیم این دایرکتوری رو به عنوان یک پکیج معرفی کنیم و اگر کلا این فایل وجود نداشت دایرکتوری به عنوان پکیج شناخته نمیشد و ما نمی تونستیم مثلا یه چیزایی رو از توی این ایمپورت بکنیم و استفاده کنیم. اما پایتون ۳.۳ به بعد این موضوع از اینیت گرفته شد ولی خب همچنان برای initial پروژه ما توی پایتون به این فایل init احتیاج داریم.
asgi
توی نسخه های قبلی جنگو نبوده از یه نسخه ای به بعد اضافه شده.
در واقع یک روش دیگه ای از ارتباط با وب سرویس هاس که بعدا مرور میکنیم
wsgi
این فایل هم webserver gateway interface ما هست که توی پروداکشن و زمان دیپلوی برای ما مهم میشه
ساخت اولین اپلیکیشن جنگو
نکته مهم application اینه که ماژول هایی هستن که بخش های مختلف یه وب سایت رو تشکیل میدن.
و مثلا یه اپ داره برای محتوا. یکی برای نظرات. یکی برای نظرسنجی و… اینا کار مستقل از هم انجام میدن
مزیت جنگو و معماری همینه که decoupling بین اپ ها میتونه خوب رعایت بشه.
این مزایای مختلفی داره مثلا شما می تونید راحت ریفکتور کنید. بدون اینکه مشکلی برای اپ های دیگه پیش بیاد.
و هم میتونید اینو resuse کنیم. میتونید یه اپ رو ببرید توی یه پروژه دیگه و ازش استفاده کنیم.
App.py
کانفیگیه که مرتبط با این اپه
—————–
جنگو هم از روش خودش استفاده کرده و بخش های مختلفش رو به هم مرتبط میکنه. بهش میگن MTV
توی داکیومنت جنگو ۲ جا از MTV استفاده کرده:
https://docs.djangoproject.com/en/4.1/glossary/#term-MTV
گفته جنگو تا حدودی از MVC پیروی کرده
و یه نفر پرسیده که جنگو خیلی شبیه MVC هست. چرا از اسم های استاندارد استفاده نکردید.
https://docs.djangoproject.com/en/4.1/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names
و بچه های جنگو هم جواب دادن که برداشت ما چیز دیگه ای هست و جای بحث داره
در نهایت هم گفته اگه اسم اختصاری دوس دارید. ممکنه بگید جنگو یک فریمورک MTV هست.
آخرش هم گفته مهم اینه که جنگو کار رو طوری انجام میده که برای ما منطقی ترین روشه
جنگو میگه view باید مشخص کنه چه چیزی رو قراره ببینی. نه اینکه چطور ببینید.
در واقع کار کنترلر رو میکنه.
چطور دیدن رو برده توی template ها
مدل هم همون مفهوم مدله