021-71053903 [email protected] پشتیبانی از شنبه تا چهارشنبه ساعت 9 الی 16

آموزش ساخت وبلاگ با جنگو ( پایتون )( مرجع کامل )

آموزش ساخت وبلاگ با جنگو ( پایتون )

  • Python:3.8.5
  • Django==3.2.5

با سلام و درود خدمت تمامی همراهان همیشگی وبسایت پایتونی ها در این پست آموزشی قصد داریم با هم یک پروژه کوچک از ساخت یک وبلاگ کوچک در فریم ورک جنگو رو استارت بزنیم خوب بریم ببینم چه چیز هایی لازم داریم !

  • Python 3+
  • django 3.2.5
  • virtualenv
  • و دیگر هیچ !

خوب این پروژه برای دوستانی که تازه وارد دنیای برنامه نویسی وبسایت در پایتون شده اند یا بهتر بگم دنیای برنامه  نویسی جنگو شده اند خیلی می تونه تمرین خوبی باشه ! چرا !؟ خوب از اونجایی که شما چند تا چیز مهم توی این پروژه یاد میگیرید :

  • مدل سازی رو یادمیگیرید !
  • می تونید مدل هاتون رو توی جنگو انتقال بدید !
  • می تونید اون ها رو از دیتابیس بخونید !
  • و بعد از اون می تونید اطلاعات خونده شده از دیتابیس رو به کاربر نمایش بدید !

خوب همین چند تا کار به ظاهر ساده خیلی شما رو می تونه کمک کنه و تو کد نویسی و تو دنیای پروژه دستتون رو راه بندازه !

بریم سراغ پروژه …

 

  • آشنایی با خط فرمان

خوب همونجوری که همه شما می دونید همه سیستم عامل ها اعم از مک ، ویندوز و توزیع های مختلف لینوکس مثل اوبونتو ،فدورا ، دبیان و … دارای یک قسمتی هستند که توی سیستم عامل ها بهشون میگن خط ترمینال و یا تو ویندوز بهش میگن CMD و یا تو لینوکس بهشون میگن Terminal این خط فرمان کمک شایانی هم داخل برنامه نویسی و انجام بعضی از کار های تخصصی به ما می کنند . ( توضیح ساده خط فرمان )

نمونه terminal در دبیان

 

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

  1. نصب مجازی ساز
  2. نصب ورژن های مختلف جنگو
  3. نصب ابزار های مختلف جنگو
  4. استفاده از کوئری های دیتابیس و ساختار آن
  5. ایجاد دیتا جدید در دیتابیس
  6. تنظیمات اصلی جنگو : مثل : یوزر ادمین، نصب اپلیکیشن ها و ساخت پروژه های جدید

 

 

  • نصب مجازی ساز یا VirtualEnv

مجازی ساز یا VirutalEnv چیست ؟!

مجازی ساز ها و یا VuritalEvn یک نرم افزار زیر ساختی در برنامه نویسی محصوب میشه ! حالا کار این نرم افزار اینه که یک محیط ایزوله رو برای شما فراهم می کنه که داخل یک پوشه قرار داره این پوشه که نرم افزار برای شما درست می کنه به صورت کاملا ایزوله و فول هستش ( تمام کتابخانه ها و نرم افزار های کاربردی که اون پروژه برای اجرا شدن بدون ارور بهش نیاز داره رو برای شما در یکجا قرار میده ) .

به صورت مثال :‌اگر شما یک نرم افزاری گرافیکی در پایتون با PyQt5 نوشته باشید و بخواید اون نرم افزار به یک شخص دیگه به صورت مثال به کارفرمای پروژه ی خودتون ارائه بدید خوب حتی طی انتقال پروژه خودتون به کسی دیگری حتما یه سری مشکلات برای پروژه پیش میاد مثلا ممکن پایتون نصب شده روی سیستم عامل شما 3.8.1 باشه و PyQt5 و در سیستم عامل فردی که می خواد نرم افزار که شما نوشته اید رو نصب کنه ممکنه ورژن پایتون ایشون 3.8.9 باشه و از PyQt4 استفاده کنه و خوب همین تغییر ورژن های مختلف موجب خطای های غیر عادی در روند اجرا شدن پروژه میده حالا راه حل مشکل چیه ؟

برنامه نویس ها و گروهی از دکترین برنامه نویسی اومدن چیکار کردن ؟ یه نرم افزاری رو نوشتن که تمام نرم افزار ها و ورژن های که یک نرم افزار باهاش نوشته نوشته میشه رو داخل یک پوشه مثل فایل زیپ ریختن و جوری برنامه نویسیش کردن که بشه اون رو در تمام سیستم عامل ها اجرا کرد اسم این نرم افزار شد مجازی ساز و یا همان VirtualEnv معروف پایتون .

 

برای نصب مجازی ساز در هر سیستم عامل فقط نیاز هستش که از پکیج منجر PIP استفاده کنید و اگر نمی دونید PIP چیست ؟ می تونید از این مقاله استفاده کنید !

برای نصب مجازی ساز داخل سیستم عامل خودتون اول باید چند تا کار انجام بدید :

  1. یک پوشه مادر درست کنید تا تمامی موارد داخل اون ذخیره بشه ( که میشه پوشه پروژتون )
  2. مجازی ساز خودتون رو نصب کنید .

نکته : شما می توانید از خط فرمان نیز برای ساخت پوشه خود استفاده کنید ! به عکس زیر توجه کنید :

به صورت مثال من می خواهم بر روی دسکتاپ خودم با خط فرمان یک پوشه ایجاد کنم :

در تصویر بالا من با استفاده از کد دستوری زیر :

cd Desktop

که دستور cd جابه جایی در دایرکتوری های مختلف را میسر می کند به سمت Desktop یا همان میز کار اصلی خودم منتقل شدم سپس با استفاده از دستور زیر :

mkdir newfolder

یک فولدر ساختم !

حال می خواهیم با استفاده از دستور زیر یک مجازی ساز را محیط فولدری که ساختیم ایجاد کنیم :

pip install virtualenv

خوب همونجوری در تصویر بالا مشاهده می کنید ما با استفاده از پکیج منجر پایتون تونستیم یک محیط ساز پایتون رو نصب کنیم !

بعد از نصب مجازی ساز پایتون نبت این میرسه که خود مجازی ساز رو تنظیم کنیم برای این کار ما نیاز داریم اول خود مجازی ساز رو صدا کنیم و بعد صدا کردن اسم اون مجازی بگیم برامون یک فولدر با هر نامی ( یعنی نام فولدری که میسازه کاملا اختیاری هستش ) بعد هم محیط مجازی ساز خودمون حاضره !

با استفاده از کد زیر دستورات رو شروع می کنیم :

virtualenv dastkhodemone

توضیح کد بالا : قسمت اول : virtualenv

نکته *: ما داخلی فولدری که ساختیم باید مجازی ساز خودمون رو صدا بزنیم تا کار کنه به طور مثال اگر من داخل newfolder اومدن مجازی ساز خودمو نصب کردم اگر همونجا مجازی ساز خودمو رو صدا بزنم می تونم نرم افزار مجازی ساز رو اجرا کنم و اگر مثلا برم داخل یه فولدر دیگه و اونجا اسم مجازی ساز رو صدا بزنم مطمعنن مجازی ساز برای من کار نخواهد کرد ارور دریافت می کنم .

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

 

همونجوری که میبینید من یک محیط مجازی ساز اجرا کردم و اسم برای محیط مجازی خودم انتخاب کردم حالا اسم این محیط مجازی اینه dastekhodemone در این محیط مجازی ساز هر چیزی که نیاز دارم اعم از کتاب خونه ورژن پایتون نصب شده روی سیستم عامل و هرچه که باید و نباید رو دارم .

حالا برای اجرای محیط مجازی سازی خودمون باید چیکار کنم ؟

برای اجرای محیط مجازی ساز خودمون باید از دستور زیر استفاده می کنیم :

source dastekhodemone/bin/activate

بعد از این که تیک کد بالا رو در محیط کامند لاین خودتون اجرا کردید باید با صحنه زیر روبه رو بشید :

همانطور که در تصور بالا می بینید پشت یوزر نیم من در پرانتز ( آخرین خط ) یک پرانتز اضافه شده و داخل آن کلمه dastekhodemone رو میبینید زمان که با همچین صحنه ای رو به رو شدید متوجه میشید که وارد محیط مجازی سازی خودتون شدید حالا شما هر نرم افزار که داخل این محیط ایزوله نصب کنید مبینید که فقط داخل همون محیط هستش و بدون این که ترس از دست رفتن نرم افزار و یا داده هاتون رو داشته باشید می توانید با استفاده از این محیط به انتقال نرم افزارتون بپردازید .

 

  • نصب جنگو

تو این قسمت می خواید در مورد نصب جنگو صحبت کنیم :

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

نکته *‌: تمامی کار ها و تنظیماتی که از این بعد انجام میشود باید در محیط مجازی ساز انجام شود.

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

pip install django

خوب همونجوری که در عکس بالا می بینید در خط اول اومده در مورد ورژن جنگوی که داره روی سیستم شما نصب می کنه صحبت کرده اینجا برای من از ورژن 3.2.5 اومده استفاده کرده و در خط آخر همونجوری که میبینید اومده پیغام موفقیت رو برای نصب برای شما ارسال کرده !

بریم ببینم چجوری باید جنگو را به اصطلاح ران کنیم .

مرحله اول شما قبل از این که بخواید جنگو رو راه اندازی کنید یا به اصلاح بتونید روی صفحه مرورگر خودتون یه تصویری از اون ببینید باید یک پروژه ایجاد کنید و جنگو با شما مثلا یک سیستم عامل رفتار می کنه و میگه برای این که بخوای از امکانات من استفاده کنید باید از قوانین من پیروی کنید کنید :

چند تا از قوانین جنگو :

  1. برای شروع کار با جنگو باید یک پروژه ایجاد کنید
  2. برای اضافه کردن امکانات مختلف به پروژه باید اپلیکیشن ایجاد کنید
  3. و کلی قوانین ریز و درشت دیگه …

برای ایجاد یک پروژه باید از دستور زیر استفاده کنید :

django-admin startproject weblog

توضیح کد بالا :

django-admin : دستور اصولی و پایه ای برای دسترسی به تنظیمات اصلی جنگو می باشد .

startproject : از این دستور برای ساخت یک پروژه جدید در جنگو استفاده می شود .

weblog : این قسمت یکی از آرگمان هایی است که کد startproject در آن قرار میگیرد و کاملا اختیاری است ( نام پروژه ای که می خواهید ایجاد کنید )

بعد از زدن کد بالا باید با یک تصویر بدون ارور مواجه بشید در صورتی که اروری دریافت کردید یک مرحله از کار رو اشتباه انجام دادید .

بعد از ساخت پروژه weblog شما توانستید یک پروژه را به صورت کامل در جنگو در مسیر مجازی ساز dastekhodemone اجرا کنید :

نکته* : 

  1. شما در قسمت ساخت پروژه جنگو می توانید به جای weblog از هر اسم دلخواه دیگری استفاده کنید ما برای سهولت در یادگیری از اسم weblog استفاده کردیم .
  2. در قسمت مجازی سازی شما می توانید از هر اسم دلخواه دیگری برای مجازی ساز خود استفاده کنید ما برای درک بهتر موضوع از dastekhodemone استفاده کرده ایم .

 

حال برای اطمینان از پروژه ساخته شده یکبار ان را اجرا می کنیم تا مطمعن شویم که تمامی مراحل را به درستی پیش رفته ایم :

برای اجرای پروژه از دستور زیر استفاده می کنیم :

#Change Directory
cd weblog

# Start Django Projcet at python version 3+
python3 manage.py runserver

توضیح کد بالا :

cd weblog : برای این که بتوانید پروژه جنگویی خود را اجرا کنیم باید به محل پروژه خود بریم . برای این کار از این دستور استفاده می کنیم .

python3 : برای استفاده از پایتون در لینوکس از ۲ ورژن استفاده می شود . python که مربوط به پایتون ۲ است و python3 مربوط به پایتون نسخه ۳ به بالا

manage.py : فایل اصلی پروژه جنگو شما که از این بعد با این فایل زیاد سر و کار داریم

runserver : دستور اجرا شدن سرور جنگو بر روی ایپی 127.0.0.1 با پورت 8000

نکته *: 

127.0.0.1‌: همان لوکال هست و یا ایپی رزرو سیستم عامل می باشد .

8000 : این پورت به صورت پیش فرض برای جنگو رزرو شده اگر می خواهید این پورت را تغیییر دهید می توانید از دستور زیر استفاده کنید :

به صورت مثال در کد زیر ما از پورت 3000 استفاده کردیم :

python3 manage.py runserver 3000

 

اجرا شدن سرور :

 

بعد از اجرا شدن سرور شما می توانید با استفاده از ادرس 127.0.0.1:8000 در مرورگر خود سایت جنگویی خود را ببنید :

خوب بهتون تبریک میگم شما موفق شدید یک سایت با جنگو رو بر روی سرور اجرا کنید ! اما این تازه شروع ماجراست … .

  • انتقال کتابخانه ها و تنظیمات به دیتابیس ( جدول داده )

قبل از این که ما هرکاری رو در نجنگو شروع کنیم اول نیاز داریم تنظیمات خودمون رو به صورت کاملا شفاف برای کتابخانه جنگو توضیح بدیم و این کار با ۲ تا دستور خیلی ساده انجام میشه !

دستور اول :

python3 manage.py makemigrations

دستور دوم :

python3 manage.py migrate

توضیحات دستور اول :

makemigrations

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

 

دستور دوم :

migrate

دستور دوم پس اجر کار انتقال داده ها را انجام میدهد .

 

نکته* : بعد از هر تغییر در مدل ها باید دو دستور تغییر در پایگاه داده بررسی و انتقال داده انجام شود . به صورت مثال :

در تصویر بالا :

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

 

  • ساخت پانل ادمین در جنگو

جگو خودش یک اکوسیستم بزرگ از کتابخانه ها و فرم ها و تمپلیت هاست که در مجموعه همه این ها کنار هم دیگه باعث میشن یک فرم ورک خوبی مثل جنگو بتونه کارایی و برتری خودش رو ثابت کنه !

یکی از این کتابخانه کتابخانه ادمین جنگو هستش که با به صورت پیشفرض روی فریم ورک جنگو نصب هستش و شما می توانید با استفاده از ادرس 127.0.0.1:8000/admin به اون دسترسی پیدا کنید ولی با ارور مواجه خواهید شد چون باید تنظیمات اون رو انجام بدید تا دسترسی به پانل ادمین به عنوان یک هدایت کننده اصلی وبسایت و یا سوپریوزر برای شما فعال شود.

برای انجام تنظیمات صفحه ادمین کافیه کد دستوری زیر را وارد کنید :

python3 manage.py createsuperuser

توضیح کد بالا‌:

manage.py : فایل اجرایی اصلی پایتون

createsuperuser : ساخت یوزر ادمین اصلی وبسایت

پس از اجرای دستور بالا با شما با صفحه زیر مواجه خواهید شد :

بعد از مشاهده فیلد Username: شما باید یوزر نیم ادمین را وارد کنید

بعد از مشاهده فیلد email : باید یک ادرس ایمیل به عنوان ایمیل مدیریت وارد کنید

بعد از مشاهده فیلد password : باید رمز عبور مناسب برای مدیریت انتخاب کنید.

password : دوباره رمز عبور خود را تکرار کنید .

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

بعد از انجام مراحل بالا به ادرس زیر مراجعه کرده :

http://127.0.0.1:8000/admin

و باید با یک صفحه مانند صفحه زیر روبهرو شوید :

سپس ایدی مدیریت خود را که در قسمت ساخت ایدی کاربری ( قسمت قبلی ) ان را ساخته اید وارد کنید :

و حالا شما وارد پانل اصلی صفحه ادمین خود شده اید :

 

 

 

  • ساخت یک اپلیکیشن جدید در جنگو

اگه تا اینجای مقال پیش اومدین باید بگم شما موفق شدین کار های سخت رو به به خوبی انجام بدین حالا توی این قسمت می خوایم باهم یک اپلیکیشن در جنگو بسازیم !

اپلیکشن ها در جنگو به صورت زیر شاخه ای از وبسایت شما به حساب می آیند و به طور کلی هر اپلیکیشن وظایف خاصی را بر عهده دارد به صورت به مثال :

  • اپلیکیشن وبلاگ ( مسولیت اضافه کردن پست های جدید و نگهداری از پست های قدیمی تر را دارد .)
  • اپلیکیشن فروشگاه ( مسولیت نمایش محصولات برای فروش ، اضافه کردن محصولات به سبد خرید و تسویه حساب کاربر و انتقال محصول را دارد )
  • اپلیکشین ها دیگر ….

نکته *: اپلیکشن ها در جنگو کاملا به اختیار برنامه نویس هستند و برنامه نویس می تواند با استفاده از نگاه مهندسی و ماجولار و یا ساماندهی شده اپلکیشن های گسترده از فروشگاه تا محاسبات پردازش تصویر و همچنین اپلیکیشن های پیشرفته هوش مصنوعی تهیه نماید .

 

نحوه ساخت ساختار اولیه یک اپلیکیشن در جنگو :

برای ساخت یک اپلیکیشن جنگو از دستور زیر استفاده می کنیم :

python3 manage.py startapp [name app ra vared konid]

توضیح کد بالا :

manage.py : فایل اصلی برنامه جنگو

startapp : کلمه کلیدی ساخت یک اپلیکیشن جدید در جنگو

[name app ra vared konid] : به جای این قسمت نام اپلیکیشن خود را به انگیلیسی وارد نمایید .

خوب اپکیلیشن ما با نام blog ساخته شد .

 

 

  • اضافه کردن اپلیکشن جدید به تنظیمات

بعد از این که اپلیکیشن خود را در سیستم جنگو اضافه کردیم لازم است حالا در تنظیمات اصلی خود جنگو این تنظیمات را نیز اضافه کنید :

قبل از این که وارد تنظیمات اصلی جنگو بشویم نیاز است یک دید کلی از ساختار فایل ها در جنگو داشته باشید :

همانطور که در تصویر بالا میبینید تمامی فایل هایی که در پروژه ی ما وجود دارد به شکل بالاست و فولدر blog با دستورات ما در بالا اجرا شده است .

خوب برای استفاده از فایل های جنگو ما نیاز به IDLE داریم که بنده در این آموزش از ویرایشگر Atom  استفاده می کنم که شما می توانید با مراجعه به این وبسایت آن را دانلود کنید .

برای باز نمودن فایل پروژه بهتر است پروژه خود را به صورت فولدری وارد ویرایشگر خود کنید .

بعد از باز کردن ویرایشگر Atom روی گزینه add Folder کلیک کنید ، سپس فولدر مورد نظر خود را انتخاب کنید :

تصویر ۲

 

بعد از انتخاب فولدر مورد نظر به فایل اصلی پروژه رفته و بر روی فایل Setting.py کلیک کنید :

و در قسمت app install نام اپلیکیشن خود را وارد کنید :

'blog',

 

نکته * : این کار برای تمامی اپلیکیشن ها صدق می کند .

خوب همان طور که در بالا اشاره شد شما پس از انجام مراحل بالا موفق به اضافه کردن یک اپلیکیشن جدید به جنگو شدید .

 

 

 

 

فصل چندم :‌ اضافه کردن اپلیکیشن به صفحه مدیریت ادمین

در فصل قبل ما با نحوه ساخت اپلیکیشن و اضافه کردن ان به تنظیمات اصلی سایت اشنا شدیم اما این اپلیکشین در پنل مدیریت ادمین جنگو برای ما به نمایش در نمیاید .

برای انجام اینکار در فولدر پروژه به فایل models رفته و آن را ویرایش می کنیم :

from django.db import models

class post(models.Model):
    pass

کد بالا را جایگزین کد موجود در فایل models کنید ،سپس به قسمت فایل admin.py رفته و کد زیر را در آن بنویسید :

from django.contrib import admin
from .models import post

admin.site.register(post)

مانند تصویر زیر :

 

سپس با انجام دستورات ‌makemigrations , migrate  تغییرات را در دیتابیس وبسایت خود اعمال کنید .

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

 

ساخت مدل وبلاگ

خوب مهمترین قسمت برنامه نویسی جنگو سایت یک مدل درست و حسابیه ! اما چجوری باید مدل خودمون رو شکل بدیم ؟

جنگو برای دریافت اطلاعات و داده از طرف کاربر ( فرقی نمی کنه ادمین سایت باشه یا یه کاربر معمولی ) یکسری فیلد برای خودش داره که می توانید آن ها را با مراجعه به سایت زیر به صورت کامل در مستندات جنگو مشاهده کنید :

https://docs.djangoproject.com/en/3.2/ref/models/fields/

خوب برای ساخت مدل کد زیر رو در فایل blog/models.py قراربدید :

from django.db import models
from django.contrib.auth.models import User


STATUS = (
    (0,"Draft"),
    (1,"Publish")
)

class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(max_length=200, unique=True)
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
    updated_on = models.DateTimeField(auto_now= True)
    content = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)

    class Meta:
        ordering = ['-created_on']

    def __str__(self):
        return self.title

توضیح کد بالا :

STATUS : این متغییر با دیتاتیپ تاپل ۲ ورودی در خود جای داده که عنوان پیشنویس در وبلاگ و یا عمومی شده را به خود اختصاص می دهد .

کلاس post : این کلاس از models.model ارث بری می کند .

title : با استفاده از این متغییر یک ورودی از کاربر به شکل متنی با حداکثر محدودیت 200 کاراکتر دریافت میشود .

slug : از این متغییر برای ذخیره سازی ادرس پست ها در پایگاه داده است .

author : یک کلید انتقال یک به چند برای ارسال چند به یک اطلاعات به دیتابیس و بلعکس.

update_on : ساخت اتوماتیک تاریخ  به روز شدن اطلاعات از طرف یوزر

created_on : ساخت اتوماتیک تاریخ  ساخت اطلاعات از طرف یوزر

status : یک انتخاب به کاربر می دهد و به صورت پیش فرض بر روی پیش نویس ذخیره شده .

 

کلاس Meta : این کلاس یکی کلاس های داخلی جنگو است و برای جلوگیری از تداخل بین اطلاعات ارسال شده به جداول داده استفاده می شود .

تابع __str__ : برای برگرداندن سر تیتیر هر مقاله می باشد .

 

بعد از ساخت مدل بالا بلافاصله مدل را ذخیره کرده و سپس دستورات migrate , makemigrations را اجرا کنید .

python3 manage.py makemigrations blog
python3 manage.py migrate blog

سپس در منو ادمین می توانید مانند عکس زیر post  هارا مشاهده کنید :

خوب تا اینجای کار شما توانستید یک وبلاگ را در بخش داخلی وبسایت خود ایجاد کنید اما یک مشکل وجود دارد آن هم نمایش این پست به صورت عمومی و برای دیگران است ! خوب قبل از این به سراغ مرحله بعد بریم ابتدا چند پست به صورت رندوم و یا تصادفی ایجاد کنید .

مانند عکس زیر :

حالا شما در دیتابیس خود ۴ پست به صورت تست دارید !

 

 

  • ساخت مدل وبلاگ

به صورت کلی جنگو دارای کتابخانه های زیادی است و امکانات زیادی دارد و اگر بخواهیم جنگو را تشبیه کنیم جنگو در جنگ مانند یک تانک T72 عمل می کند ، یکی از امکانات بی نظیر این فریم سیستم ORM یا همان Object–relational mapping خوب حالا این چی ؟

Object–relational mapping یا ORM چیست ؟

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

البته خوب نیازه یه خورده باهاش کار کنید تا متوجه دقیقا چجوری ازش استفاده کرد !

خوب بریم سراغ کار عملی برای که بتونید به صورت خیلی ساده و سریع از سیستم ORM جنگو استفاده کنید ابتدا وارد ادرس اصلی جنگو خودتون میشید و بعد به جای استفاده از کد همیشگی ران کردن جنگو از این کد استفاده می کنید :

python3 manage.py shell

بعد از وارد شدن به shell جنگو نیاز هستش که فایل مدل خودتون رو داخل نرم افزار import کنید :

from blog.models import post

بهتون تبریک میگم شما الان به سیستم ORM جنگو راه پیدا کردید و خیلی راحت با استفاده از دستورات Query می توانید به محتویات ستون های جدول پایگاه داده خودتو دسترسی پیدا کنید:

نمونه کامل یک کد خواندن جدول در پایگاه داده :

from blog.models import post
list_ = post.objects.all()
for posts in list_:
    print(posts)

همانطور که در مثال بالا می بینید حالا ما با استفاده از ORM می توانید به مقادیر زیادی از جمله اسم ، ایدی ، تاریخ و … مواردی که در جدول پایگاه داده ذخیره شده است دسترسی پیدا کنیم .

 

  • سفارشی کردن صفحه Admin

برای سفارشی کردن صفحه ادمین :

  • می توانیم فیلتر اضافه کنیم
  • می توانیم یک لیست نمایش جزییات از یک پست اضافه کنیم
  • می توانیم اکشن ها را فعال یا غیر فعال کنیم
  • و …

ما در اینجا یک نمونه کد ساده را برای شما به نمایش می گذاریم :

class postadmin(admin.ModelAdmin):
    list_display = ['title', 'slug']
    list_filter = ['status']
    search_filter = ['title', 'content']
    prepopulated_fields = {'slug':('title',)}







admin.site.register(post, postadmin)

توضیح کد بالا :

list_display : نمایش جزییات به کاربر ادمین

list_filter : اضافه کردن فیلتر ها به صفحه مدیریت ادمین

search_filter : اضافه شدن فیلتر جست و جو در صفحه ادمین

 

 

 

 

ساخت views ها

بعد از انجام مراحل بالا نوبت به نمایش داده های پایگاه داده به عموم مردم از طریق وبسایت است همانچیزی که ما مدنظر داریم :

برای این کار ابتدا با دو فایل اصلی views.py , urls.py سرو کار داریم .

 

نقش فایل views چیست ؟

فایل های ویو در جنگو وظیفه رندر گرفتن و یا تبدیل داده های پایتون به زبان طراحی وب که همان HTML هستند را به عهده دارند در واقع شما می توانید با استفاده از زبان برنامه نویسی Templates جنگو خروجی های زبان برنامه نویسی پایتون را مثل خروجی های قابل نمایش در HTML نشان دهید .

نکته * : کارکردن با بحث فرانت اند و توضیح این مقوله خارج از حوصله بحث این مقاله است و در مقاله ای دیگر به آن می پردازیم اما ادامه این مقاله به مبحث تنظیمات پایه ای urls.py , views.py می پردازیم .

 

تنظیمات Settings.py برای Templates

برای اینکه بتوانیم از زبان Templates پایتون استفاده کنیم ابتدا لازم است تنظیمات مورد نیاز آن را در سیستم جنگو انجام دهیم برای استفاده از این تنظیمات وارد فایل Settings.py شوید سپس در قسمت templates قطعه کد زیر را وارد نمایید :

import os

os.path.join(BASE_DIR,(f'templates'))

 

  • اضافه کردن urls به views

خوب در این قسمت ما نیاز داریم یک فایل با نام urls.py به فولدر اپلیکیشن بلاگ اضافه کنیم در سپس قطعه کد زیر را در آن قراردهید :

from . import views
from django.urls import path, include

urlpatterns = [
    path('', views.postlist.as_view(), name = 'home'),
    path('<slug:slug>/', views.post_detail.as_view(), name ='post_detail' ),
]

چرا ما یک تیک کد به عنوان فایل urls.py این فولدر اضافه کردیم ؟

چون نیاز داریم که ادرس ها سامان دهی بشن و هر دفعه برای خواندن ادرس وبلاگ نیاز نباشه به فولدر اصلی سایت مراجع بشه و کد خوانی راحت تر و تمیز تری نیز داریم .

حالا وارد فایل urls.py اصلی که در فولدر اصلی نرم افزار جنگو وجود داره بشید و قطعه کد زیر رو بهش اضافه کنید :

path('',include('blog.urls')),

 

 

ساخت front-end وبلاگ

خوب به همهتون خسته نباشید میگم چون داریم به مراحل پایانی ساخت وبلاگ خودمون نزدیک میشم و این آخرین مرحله ساخت وبلاگ در جنگو هستش یه سری موارد رو ما در قسمت های قبلی آموزش توضیح دادیم بهتون و یک بار دیگه بهتون میگیم مبحث این مقاله بک-اند هستش و بحث فرانت خارج مبحث این مقاله است و خوب همونطور که می دونید بحث زبان templates جنگو وارد مبحث فرانت اند میشود پس ما فقط در این قسمت کد های کلی یک وبلاگ را در اختیار شما قرار می دهیم .

بخش فرانت وبلاگ ما شامل ۴ فایل  HTML اصلی میشود که می توانید آن را به صورت کد زیر کپی و بعد ذخیره نمایید :

 

فایل base.html

<!DOCTYPE html>
<html>

    <head>
        <title>Django Central</title>
        <link href="https://fonts.googleapis.com/css?family=Roboto:400,700" rel="stylesheet">
        <meta name="google" content="notranslate" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
            crossorigin="anonymous" />
    </head>

    <body>
        <style>
            body {
            font-family: "Roboto", sans-serif;
            font-size: 17px;
            background-color: #fdfdfd;
        }
        .shadow {
            box-shadow: 0 4px 2px -2px rgba(0, 0, 0, 0.1);
        }
        .btn-danger {
            color: #fff;
            background-color: #f00000;
            border-color: #dc281e;
        }
        .masthead {
            background: #3398E1;
            height: auto;
            padding-bottom: 15px;
            box-shadow: 0 16px 48px #E3E7EB;
            padding-top: 10px;
        }
    </style>

        <!-- Navigation -->
        <nav class="navbar navbar-expand-lg navbar-light bg-light shadow" id="mainNav">
            <div class="container-fluid">
                <a class="navbar-brand" href="{% url 'home' %}">Django central</a>
                <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
                    aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="collapse navbar-collapse" id="navbarResponsive">
                    <ul class="navbar-nav ml-auto">
                        <li class="nav-item text-black">
                            <a class="nav-link text-black font-weight-bold" href="#">About</a>
                        </li>
                        <li class="nav-item text-black">
                            <a class="nav-link text-black font-weight-bold" href="#">Policy</a>
                        </li>
                        <li class="nav-item text-black">
                            <a class="nav-link text-black font-weight-bold" href="#">Contact</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
        {% block content %}
        <!-- Content Goes here -->
        {% endblock content %}
        <!-- Footer -->
        <footer class="py-3 bg-grey">
            <p class="m-0 text-dark text-center ">Copyright &copy; Django Central</p>
        </footer>
    </body>
</html>

 

 

 

 

فایل index.html

{% extends "base.html" %}
{% block content %}
<lang="en" dir="RTL">
<style>
    body {
        font-family: "Roboto", sans-serif;
        font-size: 18px;
        background-color: #fdfdfd;
    }

    .head_text {
        color: white;
    }

    .card {
        box-shadow: 0 16px 48px #E3E7EB;
    }
</style>

<header class="masthead">
    <div class="overlay"></div>
    <div class="container">
        <div class="row">
            <div class=" col-md-8 col-md-10 mx-auto">
                <div class="site-heading">
                    <h3 class=" site-heading my-4 mt-3 text-white"> Welcome to my awesome Blog </h3>
                    <p class="text-light">We Love Django As much as you do..! &nbsp
                    </p>
                </div>
            </div>
        </div>
    </div>
</header>
<div class="container">
    <div class="row">
        <!-- Blog Entries Column -->
        <div class="col-md-8 mt-3 left">
            {% for post in post_list %}
            <div class="card mb-4">
                <div class="card-body">
                    <h2 class="card-title">{{ post.title }}</h2>
                    <p class="card-text text-muted h6">{{ post.author }} | {{ post.created_on}} </p>
                    <p class="card-text">{{post.content|slice:":200" }}</p>
                    <a href="{% url 'post_detail' post.slug  %}" class="btn btn-primary">Read More &rarr;</a>
                </div>
            </div>
            {% endfor %}
        </div>
        {% block sidebar %} {% include 'sidebar.html' %} {% endblock sidebar %}
    </div>
</div>
{%endblock%}

 

 

 

فایل post_detail.html

{% extends 'base.html' %} {% block content %}

<div class="container">
  <div class="row">
    <div class="col-md-8 card mb-4  mt-3 left  top">
      <div class="card-body">
        <h1>{% block title %} {{ object.title }} {% endblock title %}</h1>
        <p class=" text-muted">{{ post.author }} | {{ post.created_on }}</p>
        <p class="card-text ">{{ object.content | safe }}</p>
      </div>
    </div>
    {% block sidebar %} {% include 'sidebar.html' %} {% endblock sidebar %}
  </div>
</div>

{% endblock content %}

 

 

فایل side_bar.html

{% block sidebar %}

<style>
        .card{
            box-shadow: 0 16px 48px #E3E7EB;
        }

</style>

<!-- Sidebar Widgets Column -->
<div class="col-md-4 float-right ">
<div class="card my-4">
        <h5 class="card-header">About Us</h5>
    <div class="card-body">
        <p class="card-text"> This awesome blog is made on the top of our Favourite full stack Framework 'Django', follow up the tutorial to learn how we made it..!</p>
        <a href="https://djangocentral.com/building-a-blog-application-with-django"
           class="btn btn-danger">Know more!</a>
    </div>
</div>
</div>

{% endblock sidebar %}

 

 

پس از فراخانی کدهای بالا و تنظیمات درست می توانید یک وبلاگ مانند وبلاگ زیر داشته باشید !

 

 

  • قسمت آخر : پایان …

خوب امیدوارم که توی این آموزش تونسته باشم بهتون اندک کمکی کرده باشم تا بتونی راه درست و اصولی رو برای یادگیری محبث طراحی سایت در پایتون و همینطور مبحث جنگو پیش گرفته باشید اما یه سری نکات میمونه که لازم به ذکر هستش !

  • سعی کنید کل مقاله رو تو ۱ روز نخواید یادبگیرید چون امکان پذیر نیست !
  • سعی کنید مرحله به مرحله همانطوری که در مقاله گفته شده پیش برید !‌ نه جلو تر نه عقب تر !
  • دوستان برای یادگیری بهتری داشته باشند و بتونند کد های خودشون رو توسعه بدهند به هیچ وجه کد هارو کپی نکنید و سعی کنید خودتون تایپ کنید .
  • اگر در طول مقاله مشکلی داشتید می تونید از طریق نظرات اون رو مطرح کنید تا پیگیری بشه !
  • برای اینکه اصالت کد حفظ بشه و منبع مقاله شکایتی نداشته باشه هم منبع کد رو اعلام کردیم و هم منبع رو ذکر کردیم !
  • به همین دلیل کد ها فرانت دست کاری نشده اند ! و شما می تونید به اسم خودتون تغییرشون بدید !
  • و در آخر سعی کنید این مطلب رو بین دوستانتون به اشتراک بزارید !

 

با تشکر !

 

مبنابع :

دانلود باکس

محمدرضا حسنی

224 مطلب منتشر شده

دانش آموخته رشته فناوری اطلاعات / موسس پایتونی ها

درباره این مطلب نظر دهید !

محصولات فروش پایتونی ها

%60
تخفیف

آموزش فیگما (Figma)

30,000 تومان
3
%69
تخفیف

آموزش برنامه نویسی پایتون

35,000 تومان
2