رفتن به نوشته‌ها

چطور یک پروژه جنگو را بخوانیم؟

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

نمی‌دونم عنوان مناسبی برای این نوشته انتخاب کردم یا نه. موضوع این نوشته مربوط به درک مسیر پروژه جنگو هست. ما به تازگی کدی از شخصی دیگر در اختیار گرفتیم و می‌خواهیم تغییراتی و اصلاحاتی در کد بدیم.

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

اما از کجا شروع کنیم؟ از دید یک برنامه‌نویس بک‌اند به پروژه نگاه کنیم. فریم‌ورک‌های وب، در نهایت، به بازدیدکننده یک متن HTML رو تحویل می‌دن. اما قبل از اون، آدرس بالای مرورگر ما رو به جایی که HTML داره تولید می‌شه هدایت می‌کنند. پس وقتی خواستیم صفحه‌ای رو تغییر بدیم، ابتدا آدرس رو می‌بینیم و در فایل urls.py به دنبال الگوی این آدرس می‌گردیم. وقتی الگو رو پیدا می‌کنیم، حتما یک view وجود داره که این آدرس رو هندل می‌کنه. پس با پیدا کردن تابع view به جایی می‌ریم که این تابع از اونجا import شده. و متن تابع رو مطالعه می‌کنیم.

اما محتوای صفحه کجاست؟ جنگو محتوای صفحه رو با قالبی مخصوص به خودش می‌سازه. چرا قالب؟ چون python مانند PHP نیست و نمی‌تونه در تگ‌های HTML به سادگی PHP وارد بشه. به همین خاطر زبان ساده قالبی رو نوشته که بتونه قالب‌ها رو به HTML تبدیل کنه. این فایل کجاست؟ برای پیدا کردن این فایل وقتی به انتهای تابع view رسیدیم، تابع render رو که دیدیم، می‌تونیم آدرس قالب رو پیدا کنیم. به صورت استاندارد، هر اپ در جنگو قالب‌ها رو در پوشه templates خودش نگهداری می‌کنه. اما گاهی اوقات توسعه‌دهندگان قالب‌ها رو در یک پوشه در پروژه نگهداری می‌کنند که احتمالا نام این پوشه هم templates هست. این کار روش استانداردی نیست. اما استفاده می‌شه.

توی جنگو، ما قالب‌ها رو لایه‌لایه و در دل هم جایگذاری می‌کنیم و معمولا یک فایل base.html وجود داره که استانداردهای بسیار تکراری صفحه‌های html مثل تگ‌های head, html, link و مانند این‌ها رو نگهداری می‌کنند. سایر قالب‌ها با استفاده از تگ extend، قالب base رو پیرامون خودشون میارن.

مدل کاربر در جنگو

کاربر یا User در جنگو یک مدل استاندارد هست. معمولا هر وبسایت یا پروژه‌ای نیاز داره که به هر کاربر یک کد اختصاصی خودش رو بده. به همین خاطر جنگو مدل بسیار استاندارد و پیشرفته‌ای برای User قرار داده. اما جنگو قابلیت توسعه خودش رو حفظ کرده. به همین خاطر مدل User خودش از BaseUser مشتق می‌شه که فقط نام کاربری و کلمه عبور رو حفظ می‌کنه. اپ‌های بسیاری، از جمله اپ‌های پیش‌فرض جنگو، با BaseUser ارتباط برقرار می‌کنند. از جمله admin و auth. اما گاهی اوقات ما مدل User رو دوباره اصلاح می‌کنیم تا با طراحی پروژه سازگار کنیم. معمولا یا مدلی می‌سازیم و اون رو با OneToOne به User متصل می‌کنیم و یا مدل User یا مدل BaseUser رو توسعه می‌دیم و مدل جدیدی می‌سازیم. در دو حالت آخر، لازم هست که Auth Model رو در فایل تنظیمات تغییر بدیم به مدل جدیدی که ساختیم تا اپلیکیشن‌های استاندارد بتونن همچنان با مدل کاربر جدید به فعالیت خودشون ادامه بدن. در این موارد هنگام اتصال مدل‌های جدید به مدل کاربر، به صورت درست عمل کنیم. یا اگر پروژه را به تازگی تحویل گرفتیم (هرچند من پیشنهاد می‌کنم در همه موارد) از تابع get_user_model برای اشاره به مدل User استفاده کنیم.

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

منتشر شده در جنگو

نظر

  1. داوود داوود

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

  2. داوود داوود

    ادامه<<<
    شرمنده، دستم خورد و ارسال شد.

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

    • محمد اعتماددار محمد اعتماددار

      خیلی جالب بود این نکته‌ای که گفتید. چون در جنگو مدیریت مطالب به سادگی وردپرس نیست. و پروژه‌های جنگو نیاز به یک سیستم مدیریت محتوا و خبری دارند. حتما در موردش جستجو می‌کنم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *