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

 

خوش آمدید به انجمن تخصصی پایتون و جنگو (پایتونی ها)

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

جستجو در تالار: در حال نمایش نتایج برای برچسب های 'آموزش جنگو'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


تالار ها

  • پایتون ( Python )
    • تالار پایتون مقدماتی
    • تالار پایتون پیشرفته
    • تالار تفاوت زبان پایتون ورژن ۲ و ۳
  • جنگو ( django )
    • تالار جنگو مقدماتی
    • تالار جنگو پیشرفته
    • تالار کتاب جنگو ( جنگو بوک )
    • تالار آموزش پروژه محور جنگو
  • آموزش تکه کدهای کاربردی پایتون ( Python Code Snippet )
  • دریافت نسخه های پایتون
    • نرم افزار زبان برنامه نویسی پایتون
  • دریافت افزونه های پایتون
    • اجرای اسکریپتهای پایتون در اندروید
  • رفع مشكلات برنامه های پايتون
  • معرفی برنامه های تحت پايتون
  • بخش بایگانی

وبلاگ‌ها

  • مقایسه Python با هشت زبان برنامه نویسی مطرح جهان

دسته ها

  • مقاله های سایت

دسته ها

  • دانلود نرم افزار زبان برنامه نویسی پایتون
  • دریافت افزونه های پایتون
    • اجرای اسکریپتهای پایتون در اندروید
  • کتاب های آموزشی پایتون ( Python )
  • کتاب های آموزش فریم ورک جنگو ( Django )

دسته ها

  • آموزش پایتون
    • آموزش پایتون مقدماتی
    • آموزش پایتون پیشرفته
    • تفاوت های پایتون ۲ و پایتون ۳
  • آموزش جنگو
    • آموزش جنگو مقدماتی
    • آموزش جنگو پیشرفته
    • آموزش پروژه محور جنگو
  • تکه کدهای کاربردی پایتون ( Python Code Snippet )
  • آموزش گیت
    • گیت لب ( GitLab )
    • گیت هاب ( GitHub )

42 نتیجه پیدا شد

  1. این تاپیک پشتیبانی برای آموزش است ساخت یک وبلاگ ساده با جنگو ( قسمت پنجم ) 02/07/96 16:10 02/07/96 16:10 لطفا اگرهر سوال یا بازخوردی دارید اینجا ارسال کنید.
  2. با عرض سلام خدمت پایتونی های عزیز . امیدوارم موفق و پیروز باشید . در قسمت چهارم از سری آموزش پروژه محور طراحی وبلاگ ساده با جنگو در خدمت شما هستیم . اگر مایل به دیدن آموزش های پروژه محور جنگو هستید به این لینک مراجعه کنید . در قسمت چهارم به نحوه ایجاد دیتابیس و اتصال اون به پنل مدیریت جنگو می پردازیم . ساخت یک وبلاگ ساده با جنگو پایگاه داده ( دیتابیس ) پایه و اساس بسیاری از برنامه های وب است و برنامه جانگو نیز جزو همین خانواده حساب می شود . در این قسمت از آموزش، تنظیمات پایگاه داده را پیکربندی کرده و بعد از اون از پنل مدیریت Django برای همگام سازی پایگاه داده با مدلی که در جلسه قبل ساختیم ، استفاده می کنیم . همانطور که در آموزش فایل settings.py در جنگو گفتیم ، تنظیمات مربوط به دیتابیس های ما در این فایل انجام خواهد گرفت . فراموش نکنید که قرار شد ما خیلی بحث رو سخت نکنیم و فعلا ابتدایی ترین آموزش هارو برای شما دوستان فراهم کنیم . خب فایل settings.py رو با ویراشگرتون باز کنید . در این فایل باید به سراغ دیکشنری DATABASE بریم : خب همانطور که می بینید ما در اینجا از دیتابیس sqlite استفاده کردیم و در خط NAME بهش دیتابیس پروژه رو معرفی کردیم . شما می توانید از نام دیگری استفاده کنید . ولی به صورت پیش فرض می تونید بهش دست نزنید . همین برای شناسوندن دیتابیس به پروژه کافیست . البته از دیتابیس sqlite بیشتر برای آموزش استفاده می شه . بعدها که پروژه های بزرگتر و تجاری انجام دادیم ، خواهید دید که به سراغ دیتابیس Mysql یا PostgreSQL خواهیم رفت . حالا که تنظیمات پایگاه داده پیکربندی شده است می تونید پایگاه داده خودتون رو ایجاد کنید. از اونجایی که شما برای اولین بار این کار را انجام می دید، از شما خواسته می شه که یک حساب کاربری مدیریت که در بخش بعدی مورد استفاده قرار می گیره ، ایجاد کنید. به ترمینال برید و کد زیر رو بزنید : python manage.py syncdb حالا بعد از زدن این دستور به روت پروژه تون مراجعه کنید ، می بینید که فایلی با نام db.sqlite3 ایجاد شده که این فایل دیتا بیس پروژه شماست و اطلاعات شما از قبیل : صفحات و پست ها و کاربران و ... بر روی این فایل ذخیره خواهد شد . پس خیلی مواظب این فایل باشید ! ساخت اکانت مدیر برای پنل مدیریت جنگو جنگو به صورت پیش فرض صفحه مدیریت دارد . اگر به جلسه قبلی رجوع کنید خواهید دید زمانی که ما مدل App بلاگ خودمون رو ایجاد کردیم ... هنگام ایجاد چندتا App‌ دیگه هم به صورت پیش فرض ایجاد شدن که یکی از اونها Admin بود ... برای دسترسی به این صفحه به مرورگر خودتون مراجعه کنید و آدرس زیر رو بزنید تا صفحه ورود به مدیریت رو مشاهده کنید : localhost:8000/admin خب باید با صحنه زیر مواجه بشید : خب برای ورود شما احتیاج به یک اکانت مدیریتی دارید . ترمینال خودتون رو باز کنید و دستور زیر رو وارد کنید . بعد از دستور زیر از شما ایمیل و پسورد میخواد . هر چیزی که دوست دارید وارد کنید ولی فراموشش نکنید . این اکانت مدیریت پروژه شماست . python manage.py createsuperuser طبق مراحل زیر عمل کنید : خب شما موفق شدید اکانت مدیریت برای پروژه خودتون ایجاد کنید . حالا با یوزر نیم admin و پسوردی که ایجاد کردید وارد پنل مدیریت پروژه خودتون بشید . من زیاد موارد داخل پنل مدیریت رو توضیح نمیدم . میتونید از لینک های زیر برای آموزش های بیشتر استفاده کنید : آموزش ایجاد پنل مدیریت در جنگو ( جلسه ششم ) - بخش اول آموزش ایجاد پنل مدیریت در جنگو ( جلسه ششم ) - بخش دوم خب همانطور که می بینید تونستیم دیتابیس پروژه مون رو ایجاد کنیم و بعد به پنل مدیریت پیش فرض جنگو هم دسترسی پیدا کنیم . خیلی خب . شما تا اینجا رو کمی تمرین کنید و کمی با پنل مدیریت جنگو دست و پنجه نرم کنید و بعد به سراغ قسمت بعدی آموزش برید . اگر سوالی یا مشکلی درباره این آموزش داشتید در بخش تاپیک پشتیبانی این آموزش مطرح کنید تا دوستان شما به شما پاسخ بدن . خسته نباشید . جلسه پنجم از سری آموزش پروژه محور ساخت یک وبلاگ ساده با جنگو به پایان رسید . موفق و پیروز باشید پایتونی ها
  3. با سلام من ی هاست با پشتیبانی پایتون گرفتم. پروژه و app جنگو رو هم میسازم اما واقعا دیگه نمیدونم چیکار کنم که بتونم app جنگو(حتی "it werked!" ساده) را هم اجرا کنم. ممنون میشم اگر راهنماییم کنید.
  4. این تاپیک پشتیبانی برای آموزش است ساخت یک وبلاگ ساده با جنگو ( قسمت سوم ) 29/05/96 18:13 لطفا اگرهر سوال یا بازخوردی دارید اینجا ارسال کنید.
  5. با عرض سلام و خسته نباشید به انجمن تخصصی پایتون و جنگو ( پایتونی ها ) خوش آمدید . با قسمت سوم از سری آموزش ساخت وبلاگ ساده با جنگو در خدمت شما دوستان عزیز هستیم . اگر میخواید به آموزش های پروژه محور جنگو دیگری دسترسی داشته باشید از این لینک میتونید به بخش مربوط مراجعه کنید . در قسمت اول و دوم به شما عزیزان یاد دادیم که ابتدا چطوری بستر مورد نیاز برای پروژه جنگویی خودتون رو آماده کنید و بعد پروژه pythonyha رو ایجاد کردیم . توجه کنید که مثلا در این آموزش pythonyha اسم سایت مورد نظر ماست که قراره یک وبلاگ داشته باشه . ساخت یک پروژه برای وبلاگ جنگویی خب دوستان عزیز . در جلسه قبل ما صفحه اول سایت خودمون رو هم دیدیم . ولی در اصل این پروژه خالی هست و هیچی نداره . فقط یک پروژه ایجاد شده تا الان . خب برای ادامه کار باید چیکار کنیم ؟ در طراحی سایت با پایتون و جنگو ، شما وقتی پروژه رو ایجاد می کنید یعنی چارچوب اصلی برای طراحی آماده شده . حالا باید بخش های مختلف سایت رو ایجاد کنید . یعنی چی؟ مثلا شما میخواید بخش ثبت نام برای سایت ایجاد کنید . پس باید یک App برای این کار ایجاد کنید و تمام کارهارو بر روی اون انجام دهید . مثلا شما میخواید یک وبلاگ هم داشته باشه سایتی که دارین طراحی می کنید . پس باید یک App هم برای این کار مثلا با نام blog ایجاد کنید . پس فکر کنم تقریبا متوجه شدید . برای هر بخشی که قرار تو سایت ایجاد بشه مثل فروشگاه ، وبلاگ ، سیستم ثبت نام و ورود کاربر و ... باید برای خودش یک App‌ داشته باشه . البته بهتره که اینطوری باشه تا همه چی مجزا و مرتب باشه و بعدا برای توسعه سایت جنگو به مشکل نخورید . این سری آموزشی که شما در حال مطالعه اون هستید یک وبلاگ خیلی خیلی ساده هست که هیچ بخش خاصی نداره و فقط برای آشنایی شما عزیزان با ایجاد سایت با جنگو هست . یعنی در اصل ما فقط یک App خواهیم داشت با نام blog و یا هرچیز دیگه ای . ایجاد App بلاگ برای پروژه جنگو خب بریم سراغ کار . اگر جلسات رو پشت سر هم دیدید که الان تو دایرکتوری پروژه باید باشید و اگر که از پروژه خارج شدید ، با دستورات زیر دوباره خودتون رو آماده کنید برای ایجاد اپ جنگو : $ cd pythonyha $ source .env/bin/activate $ cd pythonyha وقتی وارد دایرکتوری پروژه شدید ( یعنی جایی که فایل manage.py‌ وجود داره ) ، با کمک دستور زیر اولین App جنگویی خودمون رو میسازیم . این دستور ثابت هست و هر موقع خواستید App بسازید باید در دایرکتوری پروژه قرار بگیرید و این دستور رو بزنید: $ django-admin.py startapp blog خب فکر کنم ظاهر کد خیلی واضح هست و نیازی به توضیح زیادی نداره . بجای اسم blog شما هر اسمی میتونید برای App خودتون بزارید . مهم نیست . فقط طوری اسم انتخاب کنید که کوتاه باشد و مربوط به بخشی که میخواید در سایت ایجاد کنید . خب بعد زدن این دستور با دستور cd pythonyha وارد پروژه اصلی شده و یک نگاهی به فولدر پروژه مون می اندازیم : بله . مشاهده می کنید که یک فولدر ایجاد شده در کنار فولدر پروژه مون به نام blog . پس از این به بعد هر تعداد App درست کنید ، در دایرکتوری اصلی در کنار پوشه pythonyha که پروژه اصلی ماست ، ایجاد خواهند شد . وارد پوشه اپ وبلاگ شوید : در پوشه اپ یکسری فایل و فولدر مشاهده می کنید که کم کم با این ها آشنا خواهید شد . شاید در این سری آموزش خیلی وارد جزئیات نشیم ولی سری آموزش های پروژه محور جنگو رو اگر دنبال کنید کاملا به تمامی موارد مسلط خواهید شد : فایل __init__.py : داخل این فایل به صورت پیش فرض خالیست . ولی یکی از فایل های مهم در پروژه جنگو ماست . شاید تو این آموزش ازش استفاده نکنیم . فایل models.py : در این فایل مدل App‌ خودمون رو تعریف میکنیم تا بتونیم دیتابیس مورد نیازمون رو بسازیم . فایل views.py : در این فایل تمام توابعی که مسئولیت ارتباط دیتابیس و صفحه ای کاربر مشاهده میکنه رو به عهده دارند رو خواهیم نوشت . فایل test.py : برای تست و آزمایش ازش استفاده میکنیم . انشاالله در آموزش های بعدی شاید استفاده کردیم ازش . خیلی وارد جزئیات نمیشم . چون تقریبا در آموزش جنگو مقدماتی این مطالب رو کامل توضیح دادم . مهمترین و اصلی ترین کاری که یادتون باشه بعد از نصب هر App باید انجام بدید ، معرفی اون App به پروژه هست . یعنی فقط ایجاد App کفایت نمیکنه . شما باید به پروژه اطلاع بدید که این اپ به پروژه باید اضافه بشه . پس وارد فایل settings.py شوید و اسم App رو به بخش INSTALLED_APP اضافه کنید : همانطور که در تصویر می بینید یکسری App هم به صورت پیش فرض با نصب جنگو و ایجاد پروژه ، ایجاد می شوند که اتوماتیک به پروژه معرفی شده اند . به دایرکتوری در ستون سمت چپ پای چرم در تصویر نگاه کنید . اگر تمام مراحل رو درست انجام داده باشید ، باید یک دایرکتوری شبیه به عکس بالا داشته باشید . خب بسیار عالی . طبق سرفصلی که در جلسه اول پیش بینی کردیم قرار شد در ۸ قسمت یک وبلاگ جنگویی ایجاد کنیم . شما در این قسمت با نحوه ساخت App آشنا شدید . این آموزش های اولیه رو خوب مطالعه کنید و اگر سوالی دارید در تاپیک های مخصوص هر آموزش بپرسید . چون در سری های بعدی آموزش های مختلف دیگه این مطالب توضیح داده نمیشه و سریع ازش رد می شیم . جلسه سوم از سری آموزش پروژه محور ساخت یک وبلاگ ساده با جنگو به پایان رسید . موفق و پیروز باشید پایتونی ها
  6. این تاپیک پشتیبانی برای آموزش است ساخت یک وبلاگ ساده با جنگو ( قسمت دوم ) 27/05/96 01:17 لطفا اگرهر سوال یا بازخوردی دارید اینجا ارسال کنید.
  7. با سلام خدمت پایتونی های عزیز با قسمت دوم از سری آموزش پروژه محور ساخت یک وبلاگ ساده با فریم ورک جنگو در خدمت شما عزیزان هستیم . در قسمت قبل یعنی قسمت اول ملزومات ایجاد این پروژه رو به شما عزیزان گفتیم و بستر شروع کار رو آماده کردیم . پس با ما باشید تا در این قسمت با همدیگر یک پروژه برای وبلاگمون ایجاد کنیم . ساخت یک پروژه برای وبلاگ جنگویی خب همانطور که مطمئنا در آموزش مقدماتی جنگو مطالعه کردید و متوجه شدید ، ساخت یک وبسایت با فریم ورک جنگو یک مقدار متفاوت هست با زبان های دیگه . اگر تا الان مشغول ایجاد سایت های استاتیک بودید و یا با PHP برنامه نویسی می کردید ، در اینجا یک مقدار کار متفاوت است . میخوام به زبان خیلی خیلی ساده براتون توضیح بدم . وقتی میخواید یک وبسایت با جنگو ایجاد کنید ، کل کار به صورت زیر است : 1 - یک فولدر برای وب سایت خودتون می سازید 2 - داخل وب سایت محیط مجازی خودتون ( virtualenv ) رو نصب می کنید 3 - یک پروژه ایجاد می کنید 4 - سپس هر تعداد APP که احتیاج داشتید ، در داخل پروژه اصلی خودتون ایجاد می کنید . پس در این قسمت ما میخوایم مرحله شماره ۳ رو انجام بدیم . یعنی ساختار اصلی پروژه مون رو ایجاد کنیم . این مراحل برای ساخت هر وبسایتی به همین شکل هست . البته میتونه یک مقدار متفاوت باشه که ما اصلا نمیخوایم وارد جزئیات بشیم . فقط میخوایم در عرض چند جلسه به صورت خیلی خلاصه و سریع به شما یاد بدیم که اصلا نترسید و یک وب سایت با جنگو ایجاد کنید . انشاالله در قسمت های بعدی از سری آموزش های پروژه محور جنگو ، برای شما پروژه های حرفه ای تر و سخت تر رو آموزش می دیم . یادآوری : در جلسه قبلی یک فولدر به نام pythonyhd ایجاد کردیم . واردش شدیم . با دستورات گفته شده ویرچوال انو رو نصب کردیم . فعالش کردیم . جنگو رو نصب کردیم . دستور pip freeze رو اجرا کردیم . ما در جنگو یه دستور خط فرمانی داریم به نام django-admin . این دستور همانطور که از نامش معلومه برای کارهای مدیریتی در جنگو هست . این دستور به فایل django-admin.py اشاره میکنه . وقتی ما یک پروژه ایجاد میکنیم ، در همین جلسه خواهید دید که به صورت اتوماتیک همیشه یک فایل در روت پروژه مون به نام manage.py ایجاد میشه . این دوتا فایل تقریبا شبیه هم هستند و برای کارهای مدیریتی استفاده میشن . طبق تعریف از سایت رسمی جنگو ، این فایل ۲ کار مهم برای ما میکنه : 1 - این بسته پروژه شما را بر روی sys.path قرار می دهد. 2 - این مجموعه متغیر محیطی DJANGO_SETTINGS_MODULE را به گونه ای تنظیم می کند که به فایل settings.py پروژه شما اشاره دارد. خب خیلی نمیخوام شلوغش کنم . بعدا سعی میکنیم راجب این دستور بیشتر صحبت کنیم . کاری که الان با این دستور داریم ایجاد یک پروژه جنگو است و تمام . برای ایجاد پروژه اصلی جنگو خودمون از دستور زیر استفاده می کنیم : $ django-admin startproject pythonyha خب فکر کنم خیلی دستور واضحی هست . فقط آخرین کلمه ای که نوشتیم اسم پروژه ماست . شما هرچی دوست دارید میتونید بزارید . ولی توصیه میکنم با ما جلو بیاید که بعدا احیانا به مشکل نخورید . خب وقتی شما این دستور رو در ترمینال خودتون بزنید به ظاهر چیزی اتفاقی نمیوفته . حالا برید به فولدر پروژتون سر بزیند . وقتی وارد فولدر بشید خواهید دید که یک فولدر دیگه درست شده داخلش به اسم pythonyha ایجاد شده . خب این فولدر ، فولدر پروژه ماست . از این به بعد ( اکثرا ) هر کاری بخوایم کنیم باید داخل این فولدر ( پروژه ) باشیم . یعنی تمام App هایی که خواهیم ساخت باید در این پروژه اصلی باشیم . خب شما موفق شدید که پروژه اصلی خودتون رو درست کنید . بزارید یک نگاه به فایل های داخل پروژه مون بکنیم . وارد فولدر پروژه بشید : می بینید که وقتی وارد پروژه مون شدیم یک فولدر هست که باز به نام پروژه مون به صورت اتوماتیک ایجاد شده و یک فایل به اسم manage.py که در ابتدای این قسمت خیلی کوتاه راجبش صحبت کردیم و گفتیم که وظایف مدیریتی داره این فایل . تقریبا از اسمش هم معلومه . حالا وارد فولدر اصلی پرژوه بشیم فایل های زیر رو خواهیم دید : دوستان عزیز لطفا به آدرس بار بالای عکس نگاه کنید . سه تا دایرکتوری pyhtonyha می بینید ! لطفا قاطی نکنید این فولدر هارو . pythonyha اول : اسم فولدر اصلی ما بود که شما هرچی دوست دارید میتونید بزارید . اصلا مهم نیست. میتونید بزارید مثلا mysite . pythonyha دوم : اسم پروژه مون بود که معولا باید اسم پروژه مون رو بزاریم . فرض کنید میخواید سایت پایتونی ها طراحی کنید . پس باید اسم پروژه مون همین pythonyha باشه . pythonyha سوم : این فولدر به صورت اتوماتیک دقیقا هم نام با پروژه مون در داخل پروژه مون ایجاد میشه . هرچی اسم پروژه تون باشه ، بعد از ایجاد پروژه ، یک فولدر دقیقا با نام پروژه در داخل اون ایجاد میشه . امیدوارم که کاملا متوجه شده باشید . اگر چندین بار این کار رو با اسامی مختلف انجام بدید دقیقا متوجه کار خواهید شد . خب در داخل فولدر pythonyha‌ چهار فایل وجود داره که کم کم در مراحل بعدی ازشون استفاده میکنیم . البته قبلا فایل settings.py‌ رو براتون توضیح دادم . شما الان موفق به ساخت پروژه اصلی خودتون شدید و همه چی آماده است . دوست دارید یک سر به سایتی که تا اینجا ایجاد کردید بزنید ؟ خب ابتدا با دستور زیر وارد پروژه بشید : $ cd pythonyha و بعد با دستور زیر سرور جنگو رو Run کنید : $ python manage.py runserver در سری آموزش جنگو مقدماتی ، قسمت آموزش ساخت یک پروژه و App در فریم ورک جنگو به شما عزیزان گفتیم که این ارور قرمز رنگ چیه و چجوری میتونیم اونو بر طرف کنیم . پس دیگه اینجا توضیح نمیدم . دستور زیر رو بزنید : $ python manage.py migrate خب حالا همه چی آمادست . اولین قدم از ساخت وب سایت جنگویی خودتون رو برداشتید . حالا مرورگر خودتون رو باز کنید و چون سرور جنگو Run‌ هست فقط با زدن یکی از آدرس های زیر سایت خودتون رو ببینید : localhost:8000 OR 127.0.0.1:8000 خب اگر تصویر بالا رو به عنوان صفحه اصلی سایتتون اگر دید که تبریک میگیم . کارتون بدون عیب و نقص انجام شده و به مرحله و قسمت بعدی آموزش برید و لذت ببرید . اگر هم با ارور مواجه شدید حتما به تاپیک پشتیبانی این آموزش مراجعه کنید و سوال بپرسید تا دوستان سریعا به شما کمک کنند . خب تقریبا قسمت دوم آموزش ساخت یک وبلاگ ساده با جنگو به پایان رسیده . تقریبا از قسمت چهارم وارد کدنویسی میشیم . در سری آموزش های پروژه محور بعدی خیلی سریع تر از این قسمت ها عبور میکنیم و سعی میکنیم ۳ قسمت اول این پروژه رو در یک قسمت به صورت خیلی خلاصه و سریع بگیم و ازش رد بشیم . چند بار مسائل گفته شده رو تمرین کنید و سعی کنید قشنگ درک کنید و متوجه بشید . موفق و پیروز باشید . پایتونی ها
  8. این تاپیک پشتیبانی برای آموزش است ساخت یک وبلاگ ساده با جنگو ( قسمت اول ) 25/05/96 20:14 لطفا اگرهر سوال یا بازخوردی دارید اینجا ارسال کنید.
  9. با سلام خدمت پایتونی های عزیز در خدمت شما هستیم با جلسه اول سری آموزش ساخت وبلاگ ساده با فریم ورک جنگو . با ما باشید و ما رو حمایت کنید . ساخت یک وبلاگ ساده با جنگو خب عزیزان در این سری آموزش که به احتمال خیلی زیاد طولانی نیست و نمیخوایم شما رو زیاد درگیر مسائل پیچیده کنیم ، خیلی سریع استارت ساخت یک وبلاگ رو میزنیم . من به شما پیشنهاد میکنم قبل از دیدن این سری آموزش حتما به لینک زیر مراجعه کنید و مطالب رو از قسمت اول بخونید . چون خیلی از مطالبی که در لینک زیر گفته شده است رو دیگر تکرار نمی کنیم و سریع از کنارش عبور میکنیم . آموزش جنگو مقدماتی در سری آموزش جنگو مقدماتی نحوه نصب پایتون ، نصب ویرچوال انو ، ایجاد یک پروژه جنگو ، آموزش View ، آموزش مدل جنگو و ... خیلی موارد دیگه رو آموزش دادیم که دیگه این مطالب در آموزش های پروژه محور تکرار نخواهند شد . خب برای ایجاد یک وبلاگ ما باید چه قدم هایی برداریم ؟ چه کارهایی باید کنیم ؟ تقریبا باید مراحل زیر طی بشه تا پروژه ما کامل بشه و بتونیم بگیم که یک وبلاگ پویا ایجاد کرده ایم : 1 - الزامات ابتدایی پروژه جنگو 2 - شروع و استارت پروژه 3 - شروع و استارت برنامه ( App ) وبلاگ 4 - نوشتن مدل مناسب وبلاگ 5 - ایجاد پایگاه داده ( دیتا بیس ) 6 - اتصال پنل مدیریت پیش فرض مدیر جنگو به برنامه وبلاگ 7 - نوشتن URL ها، View ها و قالب ها برای برنامه وبلاگ 8 - اضافه کردن تمپلیت ها ( کدهای HTML و CSS در حد نیاز ) خب پس ما باید تقریبا ۸ مرحله رو طی کنیم تا یک وبلاگ خیلی خیلی ساده رو ایجاد کنیم . انشاالله سعی خواهیم کرد به مراتب آموزش های پروژه محور رو سخت تر و حرفه ای تر و کارآمد تر تهیه کنیم تا دوستان عزیز کاملا به فریم ورک جنگو مسلط شوند . قسمت اول : الزامات ابتدایی پروژه جنگو در قسمت اول باید ببینیم برای ایجاد پروژه جنگو به چه چیز هایی احتیاج داریم و ملزمات رو آماده کنیم . نصب پایتون ما احتیاج داریم که پایتون بر روی سیستم عامل ما نصب باشه برای شروع کار . ترمینال خود را باز کنید و کلمه python را تایپ کنید و اینتر بزنید . اگر واحد محیط کد نویسی پایتون شدید پس خیالتون راحت باشه که پایتون نصب هست . البته سیستم عامل های لینوکس بیس به صورت پیش فرض پایتون رو بروی خودشون نصب دارند . اگر پایتون روی سیستم شما نصب نیست به لینک زیر مراجعه کنید تا یاد بگیرید نحوه نصب پایتون بر روی ویندوز و لینوکس رو : نصب پایتون ( python ) بر روی لینوکس - اوبونتو نصب پایتون ( python ) بر روی ویندوز نصب پایتون ( python ) بر روی مک - مکینتاش خب امیدوارم که در نصب پایتون مشکلی نداشته باشید و اگر هرکجا به مشکلی برخوردید حتما در تاپیک پشتیبانی مربوط به آموزش های بالا سوال و ارور خودتون رو مطرح کنید . نصب ویرچوال انو ( Virtualenv ) خب حالا که پایتون بر روی سیستم شما نصب هست شروع میکنیم ایجاد پروژه رو . ابتدا در هر کجایی که میخواهید یک فولدر به نام pythonyha ایجاد کنید . سپس وارد این پوشه شوید و ترمینال خود را باز کنید ( یا از طریق ترمینال به دایرکتوری بالا بیاید یا وقتی وارد پوشه بالا شدید کلیک راست کنید و گزینه Open Terminal رو بزنید ) . با دستور زیر ویرچوال انو را نصب کنید : $ pip install virtualenv $ virtualenv .env حتما به شما پیشنهاد میکنم که آموزش زیر رو که درباره ویرچوال انو هست مطالعه کنید : Virtual environment ( ویرچوال انو ) چیست و چگونه نصب می شود ؟ خب امیدوارم بعد مطالعه آموزش بالا کاملا با ویرچوال انو آشنا شده باشید و بدونید که ویرچوال انو چیست و چرا باید قبل از ایجاد هر پروژه ، اون رو نصب و ایجاد کنیم . نصب جنگو خب بعد از اینکه فولدر پروژه مد نظرمون رو ایجاد کردیم و وارد اون دایرکتوری شدیم و بعد ویرچوال انو رو نصب کردیم و فعالش کردیم ، نوبت اون رسیده که فریم ورک جنگو رو نصب کنیم تا بتونیم در بستر اون وب سایت خودمون رو ایجاد کنیم . برای نصب جنگو از دستور زیر استفاده کنید : $ pip install django OR $ pip install django=1.11.4 اگر دوست دارید که دردسر نکشید و اتوماتیک آخرین نسخه جنگو رو نصب کنید از کد خط اول استفاده کنید . ولی اگر ورژن خاصی بجز ورژن آخر جنگو در نظرتون هست می تونید از دستور خط دوم استفاده کنید و ورژن مورد نظر خودتون رو به جای ورژن بالا بنویسید . حتما بهتون پیشنهاد میکنم که آموزش زیر رو بخونید : آموزش نصب فریم ورک جنگو ( Django ) در لینوکس آموزش نصب فریم ورک جنگو ( Django ) بر روی ویندوز pip freeze خب طبق آموزش هایی که قبلا دادیم گفتیم که هرگاه ما در پروژه مون افزونه ( پلاگین ) و یا هر چیز دیگری نصب میکنیم ، احتیاج داریم که در داخل یک فایل تکست بنویسیم . چرا ؟ به دلایل مختلف . که اینجا ۲ تاشو میگم : ۱ - هر وقت پروژه شما به دست کسی رسید با یک نگاه ساده متوجه بشه که چه چیزهایی در پروژه شما نصب شده ۲ - بعدا بتونیم هرگاه نیاز بود به راحتی با اجرای این فایل دستور بدیم که هر چیزی که در این فایل ذکر شده در پروژه مون نصب بشه . حالا برای این کار از دستور زیر استفاده کنید : $ pip freeze > requirements.txt حتما پیشنهاد میکنم آموزش زیر رو ببینید و دقیقا متوجه بشید که چرا این کار رو انجام دادیم : آموزش pip freeze خب خسته نباشید . تقریبا بستر آماده آماده شده . تا اینجا تمام مواردی که برای ایجاد یک پروژه جنگو لازم بوده رو اجرا کردیم . این مراحل تقریبا برای ایجاد هر پروژه ای لازم هستند و باید اجرا شوند . البته خیلی کارهای دیگه هم میشه کرد که فعلا چیزی نمیگیم و خیلی ساده و بی دردسر پیش میریم . خب تقریبا قسمت اول از سری آموزش پروژه محور ساخت وبلاگ ساده با فریم ورک جنگو به پایان رسید . امیدوارم که براتون مفید واقع شده باشه . هرگونه سوال ، مشکل ، ارور و ... داشتید به تاپیک پشتیبانی این آموزش مراجعه کنید . موفق و پیروز باشید پایتونی ها
  10. سلام وقت بخیر من تازه شروع کردم به یاد گیری فریم ورک جنگو . با کار کردن تو مدل جنگو به مشکل خوردم .لطفا تصاویر رو ببینید. چه جوری مشکلو میشه حل کرد؟؟؟؟
  11. سلام دوستان میشه بگید تگ {% verbatim %} در جنگو چیکار میکنه ؟ مرسی از دوستان
  12. سلام تو یه آموزشی من دارم میبینم که بعد از ایجاد فولدر بندی های مناسب برای فایل های static پروژه ، از دستور python manage.py collectstatic استفاده کرد . یکسری فایل به پروژه اضافه شد بعد از زدن این دستور کسی میدونه این دستور چیه ؟ چه کاربردی داره؟ مرسی
  13. این تاپیک پشتیبانی برای آموزش است آموزش Caching در جنگو (جلسه چهاردهم ) 10/05/96 09:44 لطفا اگرهر سوال یا بازخوردی دارید اینجا ارسال کنید.
  14. آموزش Caching در جنگو هر بار که یک کاربر یک صفحه را درخواست می کند، وب سرور تمام محاسبات را ایجاد می کند – از کوئری های پایگاه داده جهت render کردن template برای business logic – برای ساختن صفحه ای که بازدید کنندگان سایت می بینند. این حرکت از نظر بار اضافی بسیار پر خرج تر و سنگین تر از خواندن فایل از filesystem می باشد. برای اغلب برنامه های وب، این بار اضافی یک درگیری بزرگی به حساب نمی آید. اغلب برنامه های وب washingtonpost.com یا slashdot.org نیستند؛ آن ها وب سایت هایی یا اندازهای کوچک و متوسط و با ترافیکی به همین شکل می باشند. ولی برای سایت های با ترافیک بالا، حذف بارهای اضافی تا حد ممکن یک ضرورت به حساب می آید. در آنجا بود که cashing بوجود آمد. cache کردن چیزی، ذخیره ی نتیجه ی یک محاسبه ی پر خرج به طوری که مجبور نباشید محاسبه را در بار بعدی انجام دهید می باشد. در زیر تعدادی شبه کد وجود دارد که نحوه ی این عمل را برای یک صفحه ی وب به طور پویا تولید شده توضیح می دهد: given a URL, try finding that page in the cache if the page is in the cache: return the cached page else: generate the page save the generated page in the cache (for next time) return the generated page جنگو یک سیستم قدرتمند cache را ارائه می کند که اجازه می دهد صفحات پویا را به طوری که اجباری برای مورد محاسبه قرار دادن برای هر درخواست نداشته باشید ذخیره کنید. برای راحتی، جنگو سطح های متفاوتی از cache به صورت دانه دانه را ارائه می دهد: می توان خروجی view های خاص را cache کرد، می توان تنها قسمت هایی که برای تولید مشکل می باشند را cache کرد، یا می توان تمام سایت را cache کرد. همچنین جنگو با cache ها "upstream" به خوبی کار می کند، مانند Squid (http://www.squid-cache) و cache های بر پایه ی مرورگر. این ها انواعی از cache هایی هستند که به طور مستقیم کنترل نمی شوند ولی می توان تذکراتی (از طریق HTTP headers) درباره ی قسمت هایی از سایت که باید cache شده باشد و نحوه ی آن تهیه کرد. نصب کردن Cache سیستم cache نیازمند نصب کردن اندکی از مقدادیر می باشد. به عبارت دیگر، باید جایی که داده ی cache شده ی شما باید وجود داشته باشد را به آن بگویید – خواه در یک پایگاه داده، در filesystem یا مستقیما در حافظه. این یک تصمیم مهم می باشد که بر روی اجرای cache شما تاثیر می گذارد؛ بله، برخی از انواع cache ها از انواع دیگر سریع تر می باشند. اولویت cache شما در تنظیم CACHE_BACKEND درون فایل تنظیمات می باشد. در زیر توضیحی از تمام مقادیر قابل دسترس برای CACHE_BACKEND وجود دارد. Memcached تاکنون سریع ترین، موثرترین نوع cache در دسترس برای جنگو، Memcached یک فریم ورک cache بر پایه ی حافظه می باشد که در ابتدا برای کنترل بارگذاری های بالا در LiveJournal.com و به دنبال آن (در دست ترجمه ...). این نوع cache توسط سایت هایی از قبیل Facebook و Wikipedia جهت کاهش دسترسی پایگاه داده و به طور چشمگیری افزایش کارایی سایت استفاده شده است. Memcached به صورت آزاد و مجانی در http://danga.com/memchashed/ در دسترس می باشد. این cache به صورت daemon اجرا شده و مقدار مشخص از RAM را اختصاص داده است. تمام کاری که این نوع cache انجام می دهد، تهیه ی یک رابط سریع برای اضافه کردن، بازیابی و حذف داده دلخواه در cache می باشد. تمام داده به طور مستقیم در حافظه ذخیره شده است، بنابراین هیچ بار اضافه ای برای پایگاه داده یا استفاده filesystem وجود ندارد. بعد از نصب خود Memchached، نیاز به نصب اتصالات پایتون Memcached خواهیم داشت، که به طور مستقیم همراه جنگو نمی باشند. دو نسخه از این قابل دسترس می باشند. یکی از ماژول های زیر را انتخاب و نصب کنید: ***سریع ترین آپشن در دسترس یک ماژول با نام cmemchache می باشد، که در لینک http://gijsbert.org/cmemcache/ در دسترس می باشد. ***در صورتی که نمی توانید cmemcache را نصب کنید، می توانید python‑memcached را که در لینک ftp://ftp.tummy.com/pub/python‑memcached/ در دسترس می باشد را نصب کنید. در صورتی که URL دیگر معتبر نباشد، تنها کافیست به وب سایت Memcached مراجعه کرده (http://www.danga.com/memcached/) و اتصالات پایتون را از بخش "Client APIs" به دست آورید. جهت استفاده Memcached با جنگو، CACHE_BACKEND را با مقدار memcached://ip:port/ تنظیم کنید، جایی که ip آدرس IP Memcached daemon و port، پورت Memcached ای می باشد که در حال اجرا است. در مثال زیر، Memcached در localhost (127.0.0.1) پورت 11211 در حال اجرا می باشد: CACHE_BACKEND = 'memcached://127.0.0.1:11211/' یکی از ویژگی های بسیار خوب Memcached، توانایی آن برای به اشتراک گذاشتن cache در سرتاسر چندین سرور می باشد. بدین معنی که شما می توانید Memcached daemon ها را در چندین ماشین اجرا کرده و برنامه با گروهی از ماشین به صورت یک cache تنها رفتار خواهد کرد، بدون نیاز به مقادیر cache تکراری در هر ماشین. جهت بهره بردن از این خصوصیت، تمام آدرس های سرورها را در CACHE_BACKEND که با علامت (;) از هم جدا شده اند قرار دهید. در مثال زیر، cache در سرتاسر نمونه های Memcachedd در حال اجرا در آدرس IP های 172.19.26.240 و 172.19.26.242 هر دو در پورت 11211 به اشتراک گذاشته شده اند. CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/' در مثال زیر، cache در سرتاسر نمونه های Memcached در حال اجرا در آدرس IP های 172.19.26.240 (پورت 11211) و 172.19.26.242 (پورت 11212) و 172.19.26.244 (پورت 11213) به اشتراک گذاشته شده است. CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11212;172.19.26.244:11213/' نکته آخر درباره ی Memcached این است که، cache بر پایه ی حافظه دارای یک اشکال نیز می باشد: به این دلیل که داده cache شده درون حافظه ذخیره می شود، در صورتی که سرور شما crash کند داده مورد نظر از بین خواهد رفت. واضح است که، حافظه برای ذخیره سازی داده به طور دائمی در نظر گرفته نشده است، بنابراین به cache کردن بر پایه حافظه برای تنها ذخیره داده اعتماد نکنید. بدون هیچ شکی، باطن هیچکدام از سیستم های cache جنگو برای ذخیره سازی دائمی در نظر گرفته نشده اند – آن ها به طور کلی راهکارهایی برای cache کردن داده می باشند، نه ذخیره سازی – ولی به این موضوع در اینجا اشاره کردیم، چرا که cache کردن بر پایه حافظه به طور خاص موقتی می باشد. Cache کردن پایگاه داده جهت استفاده از یک جدول پایگاه داده برای cache، ابتدا یک جدول cache درون پایگاه داده خود توسط اجرای دستور زیر ایجاد کنید: python manage.py createcachetable [cache_table_name] ... جایی که [cache_table_name] نام جدول پایگاه داده ای می باشد که ساخته خواهد شد. (این نام می تواند هر چیزی که می خواهید باشد، تا زمانی که یک نام جدول معتبر باشد و درون پایگاه داده شما وجود نداشته باشد.) این دستور یک جدول تنها در پایگاه داده شما ایجاد می کند که در قالب بندی مناسبی که سیستم cache پایگاه داده انتظار دارد می باشد. هنگامی که شما جدول پایگاه داده را ایجاد کردید، تنظیم CACHE_BACKEND را با "db://tablename" تنظیم کنید، جایی که tablename نام جدول پایگاه داده می باشد. در مثال زیر، نام جدول cache نام my_cache_table می باشد: CACHE_BACKEND = 'db://my_cache_table' cache پایگاه داده از پایگاه داده همسان به صورتی که درون فایل تنظیمات تعیین شده است استفاده می کند. شما نمی توانید از پایگاه داده متفاوتی برای جدول cache خود استفاده کنید. cache پایگاه داده در صورتی که دارای یک پایگاه داده ی سریع باشید بسیار عالی کار خواهد کرد. Cache کردن Filesystem جهت ذخیره ی آیتم های cache شده در یک filesystem، از "file://" در CACHE_BACKEND استفاده کنید. به عنوان مثال، جهت ذخیره داده ی cache شده در /var/tmp/django_cache از تنظیم زیر استفاده کنید: CACHE_BACKEND = 'file:///var/tmp/django_cache' توجه داشته باشید که سه علامت (/) در شروع مثال فوق وجود دارد. دوتای اول برای file://، و سومی، اولین حرف مسیر دایرکتوری /var/tmp/django_cache می باشد. در صورتی که در سیستم عامل ویندوز هستید، حرف درایو را بعد از file:// مانند زیر قرار دهید: file://c:/foo/bar مسیر دایرکتوری باید کامل باشد – بدین بدان معنی است که، باید از ریشه filesystem شروع شود. گذاشتن یا نذاشتن علامت (/) در پایان تنظیم اهمیتی ندارد. اطمینان حاصل کنید دایرکتوری اشاره شده توسط این تنظیم وجود داشته و قابل نوشتن و خواندن توسط کاربر سیستمی که وب سرور درون آن اجرا می شود باشد. در ادامه مثال فوق، در صورتی که سرور شما به صورت کاربر apache اجرا می شود، اطمینان حاصل کنید که دایرکتوری /var/tmp/django_cache وجود داشته و قابل نوشتن و خواندن توسط کاربر apache باشد. هر مقدار cache ای به صورت یک فایل جدا ذخیره شده خواهد بود که محتویات داده cach ذخیره شده در یک قالب بندی سریال شده ("pickled") توسط ماژول pickle پایتون هستند. هر نام فایل کلید cache رها شده برای استفاده امن filesystem می باشد. Cache کردن حافظه ی داخلی اگر مزایای سرعت cache در حافظه را بدون قابلیت اجرای Memcached می خواهید، cache حافظه داخلی را ملاحظه کنید. این cache چند پردازشی و thread-safe می باشد. برای استفاده از آن، تنظیم CACHE_BACKEND را با "locmem:///" تنظیم کنید. برای مثال: CACHE_BACKEND = 'locmem:///' توجه داشته باشید که هر پردازش دارای نمونه cache خصوصی خود می باشد، که بدین معنی است که cache به صورت cross‑process ممکن خواهد بود. همچنین واضح است که حافظه ی داخلی cache منحصرا حافظه ی کار آمد به حساب نمی آید، بنابراین شاید برای محیط های تولید انتخاب مناسبی نباشد. این نوع cache برای توسعه عالی می باشد. Cache کردن ساختگی (برای توسعه) در پایان، جنگو یک cache با نام "dummy" ارائه کرده است که در واقع cache نیست – این تنها بدون انجام چیزی رابط cache را اجرا می کند. این نوع cache در صورتی که شما دارای یک سایت تولید باشید که از cache سنگینی را در مکان های گوناگون استفاده کند مفید است. ولی مکان ها یک محیط توسعه/آزمون جایی که نمی خواهید cache انجام شود و نمی خواهید لزوما کد شما برای مورد خاص اخیر تغییر کند. جهت فعال کردن dummy cache، تنظیم CACHE_BACKEND را مانند زیر تنظیم کنید: CACHE_BACKEND = 'dummy:///' استفاده از یک Cache سفارشی هنگامی که جنگو پشتیبانی از تعداد از cache ها بدون هیچ تنظیمی را ارائه می کند. ممکن است بخواهید از یک cache سفارشی شده استفاده کنید. برای استفاده از یک cache خارجی با جنگو، از مسیر import پایتون به صورت قسمت طرح (قسمتی قبل از تعریف علامت کالن ":") از URL، CACHE_BACKEND مانند زیر استفاده کنید: CACHE_BACKEND = 'path.to.backend://' در صورتی که cache مخصوص خود را می سازید، می توانید از cache استاندارد به صورت پیاده سازی مرجع استفاده کنید. درون دایرکتوری django/core/cache/backends/ از منبع جنگو کد را خواهید یافت. نکته: بدون هیچ دلیل قانع کننده ای، مانند به عنوان مثال پشتیبانی نکردن یک میزبانی از آیتمی، شما باید به cache های درون جنگو وجود دارند استفاده کنید. آن ها بخوبی مورد آزمون قرار گرفته و استفاده از آن ها ساده می باشد. آرگومان های CACHE_BACKEND هر نوع cache ای ممکن است آرگومان هایی دریافت کند. آن ها به شکل query-string در تنظیم CACHE_BACKEND داده شده می باشند. آرگومان های معتبر از این قرار می باشند: ***timeout: timeout پیشفرض بر حسب ثانیه، برای cache استفاده می شود. این آرگومان به طور پیشفرض 300 ثانیه (5 دقیقه) می باشد. ***max_entries: برای cache های locmem، filesystem و پایگاه داده می باشد، حداکثر تعداد از ورودی های مجاز در cache قبل از مقادیر قدیمی که حذف شده اند. این آرگومان به صورت پیشفرض 300 می باشد. ***cull_percentage: زمانی که max_entries برسد، درصد ورودی که جمع آوری شده اند می باشد. (در دست ترجمه ...). یک مقدار از 0 برای cull_percentage بدین معنی است که تمام cache زمانی که max_entries برسد خالی شده خواهد بود. (در دست ترجمه ...). در مثال زیر، timeout مقدار 60 می باشد: CACHE_BACKEND = "memcached://127.0.0.1:11211/?timeout=60" در مثال زیر، timeout مقدار 30 بوده و max_entires مقدار 400 می باشد: CACHE_BACKEND = "locmem:///?timeout=30&max_entries=400" آرگومان های نا معتبر بدون هیچ خطایی رد می شوند، به طوری که مقادیر نا معتبر آرگومان های شناخته شده رد می شوند. Cache در هر سایت هنگامی که cache راه اندازی شده است، ساده ترین روش جهت استفاده از cache، cache کردن کل سایت می باشد. نیاز به اضافه کردن 'django.middleware.cache.UpdateCacheMiddleware' و 'django.middleware.cache.FetchFromCacheMiddleware' به تنظیم مورد نظر یعنی MIDDLEWARE_CLASSES خواهید داشت، مانند مثال زیر: MIDDLEWARE_CLASSES = ( 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', ) نکته : نه، این اشتباه تایپ نیست: middleware مربوط به "update" باید در ابتدای لیست باشد، و middleware مربوط به "fetch" باید آخرین باشد. جزئیات کمی مبهم می باشند، ولی در صورتی که می خواهید داستان کامل را بدانید ترتیب MIDDLEWARE_CLASSES زیر را ببینید. سپس، نیازمندی های زیر را به فایل تنظیمات جنگو خود اضافه کنید: ***CACHE_MIDDLEWARE_SECONDS – تعداد ثانیه هایی که هر صفحه باید cache شده باشد. ***CACHE_MIDDLEWARE_KEY_PREFIX – در صورتی که cache در میان چندین سایت با استفاده از نصب جنگو یکسان به اشتراک گذاشته شده باشد. این تنظیم برای نام سایت قرار دهید، یا برخی رشته های دیگر که برای این نمونه جنگو منحصر به فرد می باشند، جهت جلوگیری برخوردهای کلید. در صورتی که اهمیتی نمی دهید از یک رشته ی خالی استفاده کنید. middleware مربوط به cache، هر صفحه ای که دارای پارامتر GET یا POST نباشد را cache می کند. به طور اختیاری، در صورتی که تنظیم CACHE_MIDDLEWARE_ANONYMOUS_ONLY مقدار True را داشته باشد، تنها درخواست های anonymous (نه آن هایی که توسط یک کاربر وارد شده ساخته شده باشند) cache شده خواهند بود. این یک روش ساده و موثر از از کار انداختن عمل cache برای صفحات هر کاربر خاص (شمال رابط مدیر جنگو) می باشند. دقت داشته باشید، اگر از CACHE_MIDDLEWARE_ANONYMOUS_ONLY استفاده می کنید، باید اطمینان حاصل کنید AuthenticationMiddleware فعال کرده اید. علاوه بر این، cache middleware به طور خودکار تعدادی header در هر HttpResponse قرار می دهد: ***یک header به نام last-Modified برای تاریخ/زمان فعلی هنگامی که یک نسخه ی cache نشده از صفحه درخواست شده است قرار می دهد. ***header ای با نام Expires برای تاریخ/زمان فعلی به علاوه ی CACHE_MIDDLEWARE_SECONDS تعریف شده قرار می دهد. ***header ای با نام Cache-Control جهت دادن یک حداکثر عمر برای صفحه – بار دیگر، از تنظیم CACHE_MIDDLEWARE_SECONDS. برای اطلاعات بیشتر در مورد middleware به مبحث middleware مراجعه کنید. در صورتی که یک view زمان انقضای (به عنوان مثال دارای یک بخش max-age در هدر Cache-Control خود باشد) خود را قرار دهد، سپس صفحه تا زمان انقضا cache شده خواهد بود، به جای CACHE_MIDDLEWARE_SECONDS. استفاده از decorator ها در django.views.decorators.cache می توان به سادگی یک زمان انقضای view (با استفاده از decorator، cache_control) قرار داد یا cache برای یک view را غیر فعال کرد (با استفاده از decorator، never_cache). برای اطلاعات بیشتر در مورد این decorator ها به بخش "استفاده از header های دیگر" در ادامه ی همین فصل مراجعه کنید. Cache در ازای هر View یک روش cache در مقیاس کوچک تر برای استفاده از فریم ورک cache به شکل cache کردن خروجی view های منحصر به فرد می باشد. django.views.decorators.cache یک decorator با نام cache_page تعریف می کند که به طور خودکار پاسخ view را برای شما cache می کند. این روش برای استفاده ساده می باشد: from django.views.decorators.cache import cache_page def my_view(request): # ... my_view = cache_page(my_view, 60 * 15) همچنین می توانید از دستور زبان پایتون 2.4 به بالا استفاده کنید: @cache_page(60 * 15) def my_view(request): # ... cache_page یک آرگومان تنها دریافت می کند: timeout مربوط به cache، بر حسب ثاینه. در مثال بالا، نتیجه view مورد نظر یعنی my_view() برای 15 دقیقه cache شده خواهد بود. (توجه داشته باشید که جهت خوانایی بیشتر به صورت 60 * 15 نوشته شده است. 60 * 15 به صورت 900 ارزیابی خواهد شد – این بدان معنی است که، 15 دقیقه توسط ضرب 60 ثانیه در هر دقیقه بدست می آید.) cache به ازای هر view، مانند cache به ازای هر سایت، (در دست ترجمه ...). در صورتی که چندین URL به یک view همسان اشاره کنند، هر URL به صورت جداگانه cache خواهد شد. در ادامه مثال my_view، در صورتی که URLconf شما مانند زیر باشد: urlpatterns = ('', (r'^foo/(\d{1,2})/$', my_view), ) سپس درخواست های به /foo/1/ و /foo/23/ به طور جداگانه cache خواهند شد، به صورتی که ممکن است انتظار داشته باشید. ولی هنگامی که یک URL خاص (مانند /foo/23/) درخواست شده باشد، درخواست های بعدی به آن URL از cache استفاده خواهند کرد. تعیین به ازای هر Cache View در URLconf مثال های بخش قبلی دارای کد مسقیم زده شده در view ای که مورد cache قرار می گرفت بودند، زیرا cache_page تابع my_view را در محل تغییر می دهد. این رویکرد view شما را به سیستم cache جفت می کند، که به دلایلی ایده آل نمی باشد. به عنوان مثال، ممکن است بخواهید از توابع view در جایی دیگر، سایت بدون cache استفاده کنید، یا ممکن است view ها را به افرادی توزیع کنید که ممکن است بخواهند از آن ها بدون cache شدن استفاده کنند. راهکار برای این مشکلات، تعیین cache به ازای هر view به جای قرار گرفتن در خود توابع view درون URLconf می باشد. انجام این کار ساده می باشد: به سادگی عبارت cache_page که درون تابع view قرار گرفته است را درون URLconf اشاره کننده به این تابع view قرار دهید. در زیر URLconf قبلی را مشاهده می کنید: urlpatterns = ('', (r'^foo/(\d{1,2})/$', my_view), ) در زیر کدی همسان وجود دارد، با این تفاوت که cache_page درون URLconf قرار گرفته است: from django.views.decorators.cache import cache_page urlpatterns = ('', (r'^foo/(\d{1,2})/$', cache_page(my_view, 60 * 15)), ) در صورتی که از این رویکرد استفاده می کنید، قرار داده cache_page را درون URLconf فراموش نکنید. Template Fragment Caching در صورتی که خواستار کنترل بیشتر می باشید، همچنین می توانید قطعه های template را با استفاده تگ template ای با نام cache، cache کنید. جهت دادن دسترسی templateبه این تگ، {% load cache %} را در بالای template خود قرار دهید. تگ {% cache %} محتویات بلاک برای مقدار زمان داده شده را cache می کند. این تگ حداقل دو آرگومان دریافت می کند: cache timeout بر حسب ثانیه، و نام برای دادن قطعه cache. برای مثال: {% load cache %} {% cache 500 sidebar %} .. sidebar .. {% endcache %} گاهی اوقات ممکن است بخواهید چندین کپی از یک قطعه را بسته به برخی داده های پویا که داخل قطعه ظاهر می شوند cache کنید. برای مثال، ممکن است یک کپی جدای cache شده از نوار کناری استفاده شده در مثال قبلی برای هر کاربر از سایت خود را بخواهید. توسط ارسال آرگومان های اضافه به تگ {% cache %} برای تشخیص قطعه cache به طور منحصر به فرد این کار را انجام دهید: {% load cache %} {% cache 500 sidebar request.user.username %} .. sidebar for logged in user .. {% endcache %} تعیین بیشتر از یک آرگومان برای تشخیص قطعه کاملا خوب می باشد. به سادگی برخی آرگومان ها را به {% cache %} همان طور که نیاز دارید ارسال کنید. cache timeout می تواند یک متغیر template باشد، تا زمانی که متغیر template یک مقدار integer باشد. برای مثال، در صورتی که متغیر my_timeout مقدار 600 برایش قرار گرفته باشد، سپس دو مثال زیر با هم برابر هستند: {% cache 600 sidebar %} ... {% endcache %} {% cache my_timeout sidebar %} ... {% endcache %} این خصوصیت برای اجتناب از تکرار در template ها مفید می باشد. می توان timeoutرا درون یک متغیر قرار داد، در یک جا، و تنها از آن مقدار دوباره استفاده کرد. API سطح پایین Cache گاهی اوقات، cache کردن تمام صفحه ی render شده فایده ی خیلی زیادی برای شما ندارد، در واقع بیش از حد نا مناسب می باشد. ممکن است، برای مثال، سایت شما حاوی یک view باشد که بسته به چندین کوئری پر خرج نتیجه دهد، نتایج از آن تغییر در فواصل مختلف. در این مورد، استفاده از cache تمام صفحه ایده آل نمی باشد که به ازای هر سایت یا هر view استراتژی های ارائه شده cache، زیرا شما نمی خواهید تمام نتیجه (از آنجایی که برخی از داده ها اغلب تغییر می کنند) را cache کنید، ولی همچنان می خواهید نتایجی که به ندرت تغییر می کنند را cache کنید. برای موارد شبیه به این، جنگو یک cache API سطح پایین ساده را ارائه می کند. می توان از این API جهت ذخیره ی شیء هایی در cache با هر سطحی که می خواهید استفاده کرد. می توان هر شیء پایتونی که می تواند به طور امن pickled باشد را cache کرد: رشته ها، دیکشنری ها، لیست شیء های مدل، و غیره ... (اغلب شیء های رایج پایتون می توانند pickled باشند؛ برای اطلاعات بیشتر درباره pickling به مستندات پایتون مراجعه کنید.) ماژول cache، django.core.cache دارای یک شیء cache می باشد که به طور خودکار از تنظیم CACHE_BACKEND ساخته شده است: >>> from django.core.cache import cache رابط اصلی set(key, value, timeout_seconds) و get(key): >>> cache.set('my_key', 'hello, world!', 30) >>> cache.get('my_key') 'hello, world!' آرگومان timeout_seconds اختیاری می باشد و به آرگومان timeout در تنظیم CACHE_BACKEND بر می گردد. در صورتی که شیء در cache مورد نظر یعنی cache.get() وجود نداشته باشد None بر می گرداند: # Wait 30 seconds for 'my_key' to expire... >>> cache.get('my_key') None توصیه می شود مقدار واقعی None را در cache ذخیره نکنید، چرا که قادر به تشخیص مقدار ذخیره کرده ی None خود و دیگر مقادیر None نخواهید بود. cache.get() می تواند یک آرگومان default دریافت کند. این آرگومان مقدار برگشت داده شده، در صورت عدم وجود شیء در cache را تعیین می کند: >>> cache.get('my_key', 'has expired') 'has expired' جهت اضافه کردن یک کلید تنها در صورتی که وجود نداشته باشد، از متد add() استفاده کنید. این متد پارامترهایی همانند set() دریافت می کند، ولی این متد در صورتی که کلید تعیین شده حاضر باشد (وجود داشته باشد) تلاشی برای به روز رسانی نخواهد کرد: >>> cache.set('add_key', 'Initial value') >>> cache.add('add_key', 'New value') >>> cache.get('add_key') 'Initial value' در صورتی که نیاز به دانستن این موضوع دارید که آیا add() یک مقدار در cache ذخیره کرده است، می توانید مقدار برگشتی را بررسی کنید. این مقدار در صورتی که مقدار ذخیره شده باشد True و در غیر این صورت مقدار False بر می گرداند. همچنین یک رابط بانام get_many() وجود دارد که تنها یک بار (در دست ترجمه ...). get_many() یک دیکشنری با تمام کلیدهایی که خواسته اید و در واقع در cache وجود داشته باشد بر می گرداند. >>> cache.set('a', 1) >>> cache.set('b', 2) >>> cache.set('c', 3) >>> cache.get_many(['a', 'b', 'c']) {'a': 1, 'b': 2, 'c': 3} در پایان، می توان به طور واضح با delete() کلیدها را حذف کرد. این یک روش ساده از حذف cache برای یک شیء خاص می باشد: >>> cache.delete('a') همچنین می توان با استفاده از متدهای incr() و decr() یک کلید موجود را به ترتیب افزایش و کاهش داد. به طور پیشفرض، مقدار cache موجود توسط مقدار 1، افزایش یا کاهش داده خواهد شد. مقادیر دیگر افزایش/کاهش می توانند توسط تهیه ی یک آرگومان برای فراخوانی افزایش/کاهش تعیین شده باشند. در صورتی که تلاش کنید یک کلید cache ای که وجود ندارد را افزایش یا کاهش دهید یک خطا ایجاد خواهد شد.: >>> cache.set('num', 1) >>> cache.incr('num') 2 >>> cache.incr('num', 10) 12 >>> cache.decr('num') 11 >>> cache.decr('num', 5) 6 نکته : متدهای incr()/decr() برای atomic بودن تضمین نشده اند. در آن cache ها که افزایش/کاهش atomic را پشتیبانی می کنند (که مهمترین آن ها، memcached می باشد)، اعمال افزایش و کاهش atomic خواهند بود. هر چند، در صورتی که cache یک عمل افزایش/کاهش را ذاتا تهیه نکند، با استفاده از یک پروسه ی دو مرحله ای بازیابی/به روز رسانی انجام شده خواهد بود. Cache های بالا دست تا کنون، این فصل بر روی cache داده های خودتان تمرکز داشته است. ولی نوع دیگری از cache، مربوط به توسعه ی وب می باشد که توسط cache های "بالا دست" انجام می شود. این ها سیستم هایی هستند که صفحات را برای کاربران حتی قبل از رسیدن درخواست به وب سایت شما، cache می کنند. در اینجا مثال از cache های بالا دست وجود دارد: ***ISP شما ممکن است بعضی صفحات را cache کند، بنابراین اگر یک صفحه را از http://example.com/ درخواست کرده باشید، ISP شما صفحه را بدون داشتن دسترسی مستقیم به example.com به شما ارسال می کند. maintainer های example.com دارای هیچ دانشی از این cache نمی باشند؛ ISP بین example.com و مرورگر وب شما نشسته و تمام cache را به طور روشن کنترل می کند. ***وب سایت جنگوی شما ممکن است، پشت یک cache پروکسی از قبیل وب پروکسی Squid (http://www.squid‑cache.org/) نشسته و صفحات را برای نمایش cache نماید. در این مورد، هر درخواستی ابتدا توسط پروکسی کنترل می شده و تنها در صورت لزوم به برنامه ی شما ارسال می شود. ***مرورگر وب شما نیز همچنین صفحات را cache می کند. در صورتی که یک صفحه ی وب header های مناسب را ارسال کند، مرورگر شما، کپی cache های داخلی را برای درخواست های بعدی به آن صفحه استفاده می کند، بدون حتی اتصال دوباره به صفحه ی وب جهت دیدن این که آیا تغییر کرده است یا خیر. cache بالا دست یک افزایش بهره وری خوب می باشد، ولی یک خطر در آن وجود دارد: بسیاری از محتویات صفحات وب از لحاظ authentication و میزبانی از متغیرهای دیگر متفاوت می باشند، و سیستم های cache به طور کورکورانه صفحات مستقر در URL ها را می توانند به طور نادرس نشان دهند یا داده های حساس را به بازدیدکنندگان بعدی از آن صفحات نشان دهند. به عنوان مثال، تصور کنید یک سیستم وب پست الکترونیکی را اداره می کنید، و محتویات صفحه ی "inbox" واضح است که بسته به کاربر وارد شده می باشد. در صورتی که یک ISP کورکورانه سایت شما را cache کند، سپس اولین کاربری که از طریق آن ISP وارد شود صفحه ی inbox، cache شده برای بازدید کنندگان بعدی از آن سایت نمایش داده خواهد شد که این اصلا جالب نیست. خوشبختانه، HTTP یک راهکار برای این مشکل ارائه می کند. تعدادی از HTTP header ها برای راهنمایی کردن cache های بالا دست جهت متمایز کردن محتویات cache بسته به متغیرهای تعیین شده وجود دارند. و برای گفتن مکانیسم های cache که نباید صفحات خاصی را cache کنند. به برخی از این header ها در بخش های بعدی خواهیم پرداخت. Using Vary Headers برای مثال، در صورتی که محتویات یک صفحه ی به زبان مورد ترجیح کاربر وابستگی داشته باشد، صفحه "vary on language" گفته می شود. به طور پیشفرض، سیستم cache جنگو کلیدهای cache خود را با استفاده از مسیر درخواست شده (مانند "/stories/2005/jun/23/bank_robbed/") ایجاد می کنید. این یعنی هر درخواست به آن URL از یک نسخه cache همسان استفاده خواهد کرد، بدون در نظر گرفتن تفاوت های user-agent از قبیل کوکی ها یا تنظیمات زبان. هر چند، اگر این صفحه محتویات متفاوتی بر اساس آن تفاوت در header های درخواست تولید کند – از قبیل یک کوکی، یا یک زبان، یا یک user-agent – شما نیاز خواهید داشت جهت گفتن مکانیسم های cache که خروجی صفحه به آن چیزها بستگی دارد، از Vary header استفاده کنید. برای انجام این کار در جنگو، از decorator برای view با نام vary_on_headers مانند زیر استفاده کنید: from django.views.decorators.vary import vary_on_headers # Python 2.3 syntax. def my_view(request): # ... my_view = vary_on_headers(my_view, 'User-Agent') # Python 2.4 decorator syntax. @vary_on_headers('User-Agent') def my_view(request): # ... در این مورد، یک مکانیسم cache (مانند cache middleware خود جنگو) یک نسخه ی جدا از صفحه را برای هر user-agent منحصر به فرد cache خواهد کرد. مزیت استفاده از vary_on_headers به جای دستی قرار دادن Vary header (با استفاده از چیزی شبیه به response['Vary'] = 'user-agent') این است که decorator به Vary header اضافه می کند (که ممکن وجود داشته باشد)، به جای (در دست ترجمه ...) و به طور بالقوه هر چیزی که در آن جا وجود داشته باشد را override می کند. می توان چندین header را به vary_on_headers() ارسال کرد: @vary_on_headers('User-Agent', 'Cookie') def my_view(request): # ... این به cache های بالا دست تغییر کردن هر دو را می گوید، که یعنی ترکیب user-agent و cookie مقدار cache خود را بدست خواهند آورد. برای مثال، یک درخواست با user-agent ای مانند Mozilla و مقدار کوکی foo=bar از یک درخواست با user-agent ای با نام Mozilla و مقدار کوکی foo=ham متفاوت در نظر گرفته خواهند شد. به این دلیل که vary در کوکی بسیار رایج می باشد، یک decorator با نام vary_on_cookie وجود دارد. این دو view برابر می باشند: @vary_on_cookie def my_view(request): # ... @vary_on_headers('Cookie') def my_view(request): # ... header هایی که به vary_on_header ارسال می شوند به حروف بزرگ و کوچک حساس نیستند؛ "User‑gent" هیچ فرقی با "user-agent" نخواهد داشت. همچنین می توان از یک تابع کمکی با نام django.utils.cache.patch_var_headers به طور مستقیم استفاده کرد. این تابع Vary header را قرار داده یا اضافه می کند. برای مثال: from django.utils.cache import patch_vary_headers def my_view(request): # ... response = render_to_response('template_name', context) patch_vary_headers(response, ['Cookie']) return response patch_vary_headers یک نمون ی HttpResponse به صورت اولین آرگومان و یک لیست/تاپل از نام های header حساس به حروف بزرگ و کوچک به عنوان آرگومان دوم دریافت می کند. کنترل Cache: با استفاده از Header ها مشکلات دیگر cache حریم شخصی داده و سوال از جایی که داده باید در یک آبشاری از cache ها در آن ذخیره شده باشد. یک کاربر معمولا با دو نوع از cache ها رو به رو می باشد: cache مرورگر خود کاربر (cache خصوصی) و ارائه دهنده ی cache کاربر (یک cache عمومی). cache عمومی توسط چندین کاربر و استفاده می شود و توسط برخی دیگر کنترل می شود. (در دست ترجمه ...). بنابراین برنامه های وب نیاز به یک روش برای گفتن cache ها دارند که کدام داده خصوصی و بوده و کدام عمومی می باشد. راهکار، نشان دادن cache صفحه باید "خصوصی" باشد. برای انجام این کار در جنگو، از decorator مورد نظر برای view با نام cache_control استفاه کنید: from django.views.decorators.cache import cache_control @cache_control(private=True) def my_view(request): # ... این decorator مراقب فرستادن HTTP header مناسب در پشت صحنه می باشد. چند روش دیگر برای کنترل پارامترهای cache وجود دارد. برای مثال، HTTP به برنامه ها اجازه ی انجام کارهای زیر را می دهد: ***تعریف حداکثر زمانی که یک صفحه باید cache شده باشد. ***تعیین اینکه یک cache باید همواره برای نسخه های جدیدتر بررسی شود، تنها تحویل محتوای cache شده هنگامی که هیچ تغییری وجود ندارد. (برخی cache ها ممکن است محتوای cache شده را حتی اگر صفحه ی سرور تغییر کرده باشد تحویل دهند، فقط به خاطر این که کپی cache هنوز منقضی نشده است.) در جنگو، از decorator، cache_control برای تعیین این پارامترهای cache استفاده کنید. در این مثال، cache_control جهت دوباره معتبر ساختن cache در هر دسترسی و جهت ذخیره ی نسخه های cache برای حداکثر 3600 ثانیه به cache ها می گوید: from django.views.decorators.cache import cache_control @cache_control(must_revalidate=True, max_age=3600) def my_view(request): # ... هر رهنمود HTTP کنترل cache معتبری در cache_control() معتبر می باشد. در زیر لیست کامل وجود دارد: public=True private=True no_cache=True no_transform=True must_revalidate=True proxy_revalidate=True max_age=num_seconds s_maxage=num_seconds (توجه داشته باشید که caching middleware پیش از این cache هدر max-age را با مقدار تنظیم CACHE_MIDDLEWARE_SETTINGS قرار داده شده است. در صورتی که از یک max_age سفارشی در یک decorator، cache_control استفاده می کنید، decorator اولیت خواهد گرفت، و مقادیر header به درستی ادغام خواهند شد.) در صورتی که می خواهید جهت غیر فعال کردن الگوریتم cache کردن از هدرها استفاده کنید، django.view.decorators.cache.never_cache یک decorator برای view می باشد که جهت اطمینان از پاسخی که توسط مرورگر یا دیگر cache ها cache نخواهد شد هدرها را اضافه می کند. مثال: from django.views.decorators.cache import never_cache @never_cache def myview(request): # ... بهینه سازی های دیگر جنگو چند قسمت دیگر از middleware را که می تواند کارایی app های شما را بهینه کند ارائه می کند. ***django.middleware.http.ConditionalGetMiddleware مرورگرهای مدرن را برای پاسخ های GET بر پایه ی هدرهای ETag و Last-Modified پشتیبانی می کند. ***django.middleware.gzip.GZipMiddleware پاسخ های تمام مرورگرها را فشرده کرده و پنهای باند و زمان انتقال را ذخیره می کند. ترتیب MIDDLEWARE_CLASSES در صورتی که از cashing middleware استفاده می کنید، قرار دادن هر نیمه در جای راست داخل تنظیم MIDDLEWARE_CLASSES اهمیت دارد. چرا که cache middleware نیاز دارد بداند هدرها توسط کدام ذخیره سازی vary cache می شود. middleware همواره هنگامی که بتواند چیزی را به پاسخ هدر Vary اضافه می کند. UpdateCacheMiddleware فاز پاسخ را اجرا می کند، جایی که middleware به طور برعکس می باشد، بنابراین یک آیتم در بالای لیست آخرین فاز پاسخ را اجرا می کند. در نتیجه، نیاز می باشد اطمینان حاصل کنید که UpdateCacheMiddleware قبل از هر middleware دیگر ظاهر می شود که ممکن است چیزی را به هدر Vary اضافه کند. ماژول های middleware این کار را انجام می دهند: ***SessionMiddleware، Cookie اضافه می کند ***GZipMiddleware، Accept-Encoding اضافه می کند ***LocaleMiddleware، Accept-Language اضافه می کند FetchFromCacheMiddleware، از سوی دیگر فاز درخواست را اجرا می کند، جایی که middleware به صورت اول به آخر بکار برده شده است، بنابراین یک آیتم در بالای لیست اولی فاز درخواست را اجرا می کند. همچنین FetchFromCacheMiddleware لازم است بعد از به روز رسانی های هدر Vary، middleware دیگر اجرا شود، بنابراین FetchFromCacheMiddleware باید بعد از هر آیتمی باشد که این کار را انجام می دهد. خسته نباشید دوستان عزیز . جلسه چهاردهم کتاب جنگو به پایان رسید . امیدوارم که موفق باشید . برگرفته از سایت oruji.org ترجمه از سایت www.djangobook.com
  15. با سلام به دوستان دوستان عزیز ماژول یا پکیج جنگو آلاس ( Django Allauth ) رو نصب کردم . خودش پیش فرض صفحات ورود و خروج و ثبت نام و .. رو ایجاد کرده برام . الان وقتی مثلا روی دکمه خروج ( Logout ) میزنم ، کاربر رو میفرسته به یه صفحه دیگه که ازش سوال میکنه : آیا میخواهید خارج شوید ؟ اگر کاربر تایید کنید میتونه خارج بشه من میخوام مستقیما وقتی روی دکمه خروج ( Logout ) زد ، مستقیما خارج بشه . تو جنگو آلاس ( Logout ) امکانش هست ؟ مرسی از دوستان
  16. با عرض سلام وخسته نباشید میخواستم بدونم اموزش پایتون مقدماتی ادامه میدید یا نه؟ ممنون
  17. این تاپیک پشتیبانی برای آموزش است آموزش ساخت یک پروژه و App در فریم ورک جنگو 01/05/96 18:38 01/05/96 18:59 لطفا اگرهر سوال یا بازخوردی دارید اینجا ارسال کنید.
  18. با سلام خدمت دوستانی پایتونی عزیز در خدمت شما هستیم با قسمت پنجم آموزش مقدماتی فریم ورک جنگو . در این قسمت میخوایم به صورت خیلی ساده و روان به شما عزیزان استارت زدن یک پروژه رو آموزش بدیم و کم کم مفاهیم اصلی رو بگیم تا بریم سر آموزش های پروژه محور جنگو . در صورت تفهیم کامل این سری آموزش ، شما در آموزش پروژه محور جنگو با مشکلات کمتری روبرو خواهید شد . ایجاد اولین پروژه در فریم ورک جنگو خب برای شروع هر پروژه ای ما باید یک فولدر برای آن پروژه ایجاد کنیم . ما بر روی دسکتاپ فولدری به نام myProject ایجاد می کنیم . وارد این فولدر شوید و ترمینال رو باز کنید . همان طور که در جلسه دوم ( Virtual environment ( ویرچوال انوایرومنت ) چیست ؟ ) آموزش دادیم باید یک Virtualenv برای پروژه مون ایجاد کنیم . پس دیگه توضیحات اضافی نمیدم و دستورات زیر رو به ترتیب وارد کنید . در جلو هر دستور یه کامنت مینویسم که شما اونو وارد نکنید : $ cd myProject $ virtualenv .env $ source .env/bin/activate $ pip install django $ pip freeze > requirements.txt خب تا اینجا وارد پوشه پروژه مون شدیم و ویرچوال انو رو نصب کردیم و اکتیوش کردیم و آخرین ورژن جنگو رو نصب کردیم و در نهایت فریز کردیم تمام ملزومات پروژه رو در فایل مربوطه که خودکار ایجاد میشه . حالا نوبت اون رسیده که اولین پروژه جنگو خودمون رو ایجاد کنیم . کد زیر رو در ترمینال در ادامه کدهای بالا وارد کنید : $ django-admin startproject pythonyha خب با دستور بالا در پوشه پروژه شما یک پروژه ایجاد میشه با نام pythonyha که هر اسمی خواستید میتونید به جای این اسم بزارید . اصلا مهم نیست . این اسم اصلی پروژه شماست . نکته : بزارید یه توضیح کلی بدم : ما یک پروژه داریم مثلا با نام پایتونی ها که قراره در این پروژه ، App های مختلفی نظیر وبلاگ ، انجمن ، یوزر پروفایل و ... ایجاد کنیم . پس الان کاملا فرق بین پروژه و برنامه ( App ) رو فهمیدید . پروژه همون وب سایت ماست و App‌ ها همون برنامه هایی هستن که قراره کنار هم قرار بگیرن و وب سایت مارو تشکیل بدن . در حال حاضر فولدر پروژه شما باید به شکل زیر باشه . یک فایل پروژه مون و یک فایل ویرچوال انو ( که هیدن بود و من از هیدنی درآوردم که ببینید) و یک فایل requirements.txt خب حالا ما میخوایم اولین App خودمون رو ایجاد کنیم . پس باید ابتدا وارد پوشه پروژه pythonyha بشیم ... خب همینطور که میبینید داخل پروژه مون یه فولدر به اسم خود پروژه مون ایجاد شده و در کنارش هم یک فایل manage.py وجود داره . ما با این فایل زیاد کار داریم . فعلا زیاد توضیحات نمیدم و فقط میخوام بیشتر در این جلسه اولین پروژه و App خودتون رو ایجاد کنید تا در جلسات بعد به صورت مفصل راجب همه چیز صحبت کنیم . پس تا الان شما یه دایرکتوری شبیه شکل زیر دارید : myproject /requirements.txt /.env /pythonyha /pythonyha //__init__.py //setting.py //urls.py //wsgi.py /manage.py خب بعد از اینکه با دستور cd وارد دایرکتوری پروژه شدیم و فایل manage.py رو دیدیم باید از دستور زیر استفاده کنیم تا اولین App خودمون که میخوایم اسمش رو blog بزاریم ایجاد کنیم : $ python manage.py startapp blog بعد از زدن این دستور می بینید که در دایرکتوری پروژه مون یه فولدر به نام blog ایجاد شد . تبریک میگم . شما اولین App خودتون در پروژه جنگو تون رو ایجاد کردید . بریم فایل های داخل فولدر blog رو ببینیم . یکسری فایل به صورت اتوماتیک ایجاد شدن : خب الان کل دایرکتوری پروژه ما به شکل زیر است . اگر یکم داخل پروژه بچرخید دقیقا متوجه خواهید شد که چه اتفاقی افتاده : myproject /requirements.txt /.env /pythonyha /pythonyha //__init__.py //setting.py //urls.py //wsgi.py /manage.py /blog //admin.py //apps.py //__init__.py //models.py //tests.py //views.py به همین راحتی هر تعداد برنامه که بخوایم و نیاز داشته باشیم به پروژه خودمون اضافه میکنیم . البته مرحله به مرحله . خب حالا برای اینکه بتونید ببینید تا الان چیکار کردید دستور زیر رو در کنسولتون ادامه دستورات بالا بزنید : $ python manage.py runserver باید شبیه عکس زیر شما هم داشته باشید . ارور : به ارور قرمز رنگی که در عکس هست فعلا توجه نکنید تا در جلسه بعدی بهتون بگم چیه و باید چیکار کنید . خب در اصل ما الان سرور جنگو رو در پورت ۸۰۰۰ اجرا ( Run ) کردیم . در نوشته های ترمینال هم دقت کنید یک لینک به این صفحه داده شده : Starting development server at http://127.0.0.1:8000 خب شما هم الان مرورگرتون رو باز کنید و به آدرس گفته شده برید تا وبسایت خودتون رو ببینید : localhost:8000 یا 127.0.0.1:8000 فرقی نداره کدوم رو وارد کنید . هر دو آدرس داره به کامپیوتر لوکالتون اشاره میکنه . بعد از زدن آدرس بالا شما با تصویر زیر روبرو می شید : تبریک میگم . این سایت جنگویی شماست . البته هیچ چیز خاصی الان توش نیست . پس هر زمان خواستید سایت پروژه خودتون رو ببینید اول باید با دستور گفته شده سرور جنگو خودتون رو RUN کنید و سپس به آدرس بالا برید تا سایتی که ایجاد کردید رو مشاهده کنید . هر چیزی به غیر از عکس بالا مشاهده کردید ، مشکلی در کار هست . در تاپیک همین آموزش مطرح کنید تا دوستان به مشکلتون پاسخ بدن . خب دیگه بسه . فکر کنم خیلی سنگین شد برای جلسه اول . لازم نیست الان زیاد خودتون رو درگیر این کنید که این فایل ها چی هستند و چرا به وجود اومدن و چه کاربردی دارن . تک تک این فایل ها رو خواهید شناخت و با همه این ها کار خواهیم کرد. تنها کاری که میکنید این است که این فایل رو کلا پاک کنید و یک یا دوبار دیگه از اول آموزش رو بخونید و پروژه های مختلف ایجاد کنید تا به طور کامل متوجه این قسمت از آموزش بشید . در قسمت های بعدی میریم سراغ یکسری مفاهیم و تعاریف درباره Url‌ ها و دیتابیس و مدل ها و ... که بعد بتونیم با ترکیب این ها یک پروژه کامل رو ایجاد کنیم . پس در این قسمت به صور خلاصه : *** فولدر پروژه ایجاد کردیم ( هرجایی که دوست دارید ) *** واردش شدیم . ویرچوال انو رو ساختیم و فعالش کردیم . *** جنگو رو نصب کردیم و اطلاعات رو در فایل requirements.txt فریز کردیم . *** پروژه اصلی مون که وب سایت پایتونی ها بود رو ایجاد کردیم . *** وارد پروژه اصلی مون شدیم و در کنار فایل manage.py اولین App خودمون که وبلاگ بود با نام blog ساختیم . *** سرور جنگو رو اجرا ( Run ) کردیم . *** به آدرس 127.0.0.1:8000 رفتیم و وب سایت جنگویی خودمون رو مشاهده کردیم . خب خسته نباشید . جلسه ششم از سری آموزش مقدماتی فریم ورک جنگو نیز به پایان رسید . موفق و پیروز باشید . پایتونی ها
  19. این تاپیک پشتیبانی برای آموزش است آموزش مفاهیم جنگو MVT یا جنگو ( MVC ) به طور کامل 01/05/96 16:57 01/05/96 16:57 لطفا اگرهر سوال یا بازخوردی دارید اینجا ارسال کنید.
  20. با سلام خدمت دوستان پایتونی ها در خدمت شما هستیم با جلسه چهارم از سری آموزش مقدماتی فریم ورک جنگو و مبحث Django MVT (MVC) . امیدوارم که براتون مفید واقع بشه . آموزش مفاهیم MVC ( Model-View-Controller ) خب دوستان همانطوری که در جلسه های قبلی آموزش با ما بودید یاد گرفتید که چطوری ملزمات اولیه برای نصب پایتون ، نصب Virtualenv و نصب جنگو و فریز کردن این ها در فایل requirements.txt رو ایجاد کنید و آماده بشید برای شروع جنگو . خب برای شروع هر زبان برنامه نویسی یا هر فریم ورکی لازم هست که یکسری مفاهیم اولیه درباره اون زبان را یاد بگیرید . این جلسه میخوام راجب مفاهیم MVC یا بهتره بگیم MVT در جنگو صحبت کنیم . البته علم بنده در این زمینه اندک هست و هر یک از دوستان که مطلب بیشتری میدونست در این رابطه حتما به ما ارجاع بده تا به آموزش اضافه کنیم . دوستان MVC فقط یک اصطلاح مورد استفاده برای توسعه نرم افزار در یک الگو است که تقسیم شده به 3 دسته بندی که در زیر می بینید: Model : پایگاه داده نرم افزار کاربردی شما. View : صفحه نمایشی برنامه کاربردی شما، به عبارت دیگر رابط گرافیکی کاربر Controller : کنترلر منطق واقعی پس زمینه برنامه کاربردی شماست. پس این الگوی برنامه نویسی در تمام زبان ها کاربرد داره و چیزی نیست که فقط مختص به فریم ورک جنگو باشه . مثلا بهتر هست که شما هنگام برنامه نویسی با زبان PHP پروژه خود رو با الگوی MVC پیش ببرید . Model : مدل یک بخشی از معماری است که متمرکز میشود بر روی داده های نرم افزار کاربردی.داده های شما ممکن است از متدهای ارائه شده در زیر امده باشد: 1-پایگاه داده 2-گزارشات 3-دیتا سورس هایی مانند فایل ها، JSON یک مثال عمده است. 4-ورود کاربر اینها برای نرم افزار کاربردی شما بخش مدل ایجاد میکنند. Model مسئول بروزرسانی رابط کاربری و نشان دادن یک triggerبه یک رویداد (اگر یکی) در نرم افزار کاربردی برای اثبات اینکه داده ها تغییر کرده اند. اغلب، اینها یک نام خیالی هستند که به مدل ساده داده ها داده شده اند. در بیشتر زبانهای برنامه نویسی این میتواند یک کلاس ساده باشد با تعداد محدودی عضو (شامل جرئیات یا صفت های جداول پایگاه داده برای یک شی) و تعدادی تابع برای ذخیره داده در دیتا سورس و استخراج این. این باید از سورس نگهداری کند و از تعاملات کاربری دوری کند. نگهداری این بصورت جداگانه در به حداقل رساندن تلاش برای دسترسی های غیر مجاز کمک خواهد کرد. نکته: بخش تابع میتواند درون کنترلر برای ذخیره داده یا استخراج این اجرا شود. View : View بخش رابط کاربری نرم افزار کاربردی است. تمام طراحی های رابط، همانند Button , فیلدهای ورودی و همانند آن، به این دسته بندی اضافه شده اند. در بیشتر نرم افزار های کاربردی(مانند نرم افزار های کاربردی تحت وب) صفحات HTML برای نمایش استفاده میشوند در حالی که در دیگر برنامه های کاربردی و چهارچوب ها از روش های دیگر برای ایجاد یک رابط استفاده میشود.مانند فایل های XAML در برنامه های WPF. هدف اصلی برای داشتن یه View داشتن داده از مدل و نشان دادن ان به کاربر است. تمام استایل ها و دیگر UI ها و تکنیک های UI باید اینجا پیاده شوند. Viewها اغلب با کنترلرها فراخوانی میشوند و بعد از پر شدن از داده از سمت مدل برای کاربر بازگردانده می شوند. Controller : به بخش مهم این چهارچوب رسیدیم، کنترلر منطق نرم افزار در حال اجراست. بیشتر از تابع های در حال اجرا ترکیب شده است، کدهای منطقی اساسی دیگر برای کاربر و مانند کدهای دیگری که باید اجرا شوند سراسر مرحله اولیه برای خطوط قبلی وقتی که برنامه به پایان میرسد. در برنامه وب، کنترلر مسئول مدیریت درخواست های امده از طرف کاربر و سپس برگرداندن پاسخ به کاربر بعد از ادغام داده ها از مدل به View ضروری است. اگرچه این عملیات شبیه گرفتن درخواست و برگرداندن پاسخ است. اما در واقع این عملیات چیزی است شبیه : 1-درخواست ایجاد شده 2-کنترلر درخواست را مدیریت میکند URL-3 خوانده شده و سپس تابع مناسب با آن اجرا شده 4-درون این تابع، مدل از داده ها خواسته شده و داده ها درون View جاگذاری شده اند View-5 بعد از درخواست برگردانده میشود چهارچوب کلی چیزی شبیه عکس زیر است. به عکس زیر دقت کنید : خب با توجه به عکس بالا ، کاربر با کنترلر در ارتباط خواهد بود . یعنی در خواست های خودش رو به کنترلر میفرسته . مثلا فلان آدرس وب رو میخواد ببینه . بعد از اینکه درخواست به این لایه رسید ، کنترلر میبنیه که این Url مورد نظر نیاز به فراخوانی اطلاعات از دیتابیس داره یا نه . اگر احتیاج به دیتابیس بود ، اون اطلاعات رو از دیتا بیس میگیره و تحویل View میده . و در نهایت لایه view که تقریبا میشه گفت کدهای html ما هستند اطلاعات کلی رو به کاربر نشون میدن . این کل توضیح الگوی MVC به زبان خیلی خیلی ساده بود . آموزش مفاهیم الگوی MVT (Model-View-Tamplate) در جنگو حالا تو جنگو شما جای controller و View رو عوض کنید . به شکل زیر دقت کنید : جای View و Controller عوض شد و بجای Controller لایه Template نشست . برای همین به این الگو در جنگو MVT گفته می شود . Template : در این لایه کدهای HTML تبدیل میشن و به بیان ساده پویا میشن . View : در این لایه Http Request کاربر گرفته میشه و بعد از یکسری عملیات ( در بعضی موافع بعد از اضافه کردن اطلاعات دیتابیس به کدهای HTML تمپلیت ) به کاربر جواب میده . به همین دلیل در زبان های دیگه به View گفته می شود Controller . Model : در این لایه جدول های دیتابیس ساخته میشن و اطلاعات وب سایت داخل این جداول قرار میگیرند و هر وقت لازم بود ، به لایه View میفرسته اطلاعات رو تا با لایه Template مخلوط شده و به کاربر نمایش داده بشه . حالا وقتی که در جلسه بعدی استارت اولین App جنگو رو به شما آموزش بدیم خواهید دید که این الگو چطوری کار میکنه . بسیار شیرین هست . به طور مثال : شما یک url‌ تعریف میکنید مثل pythonyha.ir/help و میگید هر وقت این آدرس رو کاربر صدا زد تابع x اجرا بشه . حالا بعدش میرید تابع X رو مینویسید که باید چه کاری انجام بده . مثلا تابع X فایل help.html رو باید اجرا کنه . پس به راحتی وقتی کاربر آدرس بالا رو بزنه فایل help.html براش به نمایش در میاد . اگر در این صفحه اطلاعاتی قرار باشه از دیتابیس فراخوانی بشه پس لازم میشه قبلش در model براش یک دیتابیس هم بسازیم . همین . کل مفهوم MVC‌ و MVT رو به زبان خیلی خیلی ساده برای شما دوستان عزیز گفتیم تا قشنگ ذهنتون آماده باشه برای جلسه بعدی سری آموزش مقدماتی فریم ورک جنگو . دوستان عزیز اگر اطلاعات تمیز تر و بهتری داشتید حتما با تیم پشتیبانی در ارتباط باشید تا اطلاعات شما به این آموزش اضافه بشه . خب به پایان جلسه چهارم آموزش مقدماتی فریم ورک جنگو رسیدیم . امیدوارم براتون مفید واقع شده باشه موفق و پیروز باشید پایتونی ها
  21. این تاپیک پشتیبانی برای آموزش است آموزش نصب فریم ورک جنگو ( Django ) بر روی ویندوز 31/04/96 19:44 31/04/96 19:44 لطفا اگرهر سوال یا بازخوردی دارید اینجا ارسال کنید.
  22. با سلام خدمت پایتونی های عزیز با قسمت دیگه ای از آموزش مقدماتی جنگو در خدمت شما هستیم با آموزش نصب پایتون و جنگو بر روی ویندوز به همراه PIP اگر فقط قصد نصب پایتون بر روی ویندوز دارید میتونید از لینک آموزش زیر استفاده کنید : آموزش نصب پایتون ۲ و ۳ بر روی ویندوز برای نصب جنگو بر روی ویندوز همراه ما باشید با این آموزش ساده و روان آموزش نصب فریم ورک جنگو ( Django ) بر روی ویندوز برای نصب جنگو در ویندوز ابتدا میتونید به لینک بالا مراجعه کنید تا نحوه نصب پایتون بر روی ویندوز رو یاد بگیرید . بعد از اینکه به راحتی آخرین ورژن پایتون رو از سایت رسمیش دانلود کردید و نصب کردید از طریق مسیر زیر وارد بخش Environment Variables بشید : Control Panel را باز کنید . System and Security را سلکت کنید . System را انتخاب کنید . Advanced System Settings را انتخاب کنید . Advanced تب را انتخاب کنید . Environment Variables را انتخاب کنید . پایین User variables for در قسمت system variables for بخش PATH رو انتخاب کنید . اگر همچین متغیری وجود نداشت بر روی New کلیک کنید و یک متغیر بسازید و اسم اون رو PATH‌ قرار بدید . در انتهای هر چیزی که در Value Variable نوشته شده است ، موارد زیر را اضافه کنید: C:\Python36;C:\Python36\python.exe;C:\Python\36\Lib\site-packages;C:\Python36\Lib\site-packages\django\bin;C:\Python36\Scripts; اگر چیزی در متغیر بود، نتیجه نهایی به صورت زیر خواهد بود: C:\Windows\System32;C:\Python36;C:\Python36\python.exe;C:\Python\36\Lib\site-packages;C:\Python36\Lib\site-packages\django\bin\;C:\Python36\Scripts; سپس Command Prompt را باز کنید و تایپ کنید python و اینتر بزنید . اگر شبیه زیر چیزی دید پس همه چیز اوکی هست : Python 3.6.0 (default, Feb 13 2017, 13:18:45) >>> سپس خارج بشید از پایتون با دستور زیر : >>> exit() نصب Pip در ویندوز : Pip بسته نصب پایتون است ( Python Package Installer ) که به شما اجازه می دهد چیزهایی مانند Django، Virtualenv، درخواست ها و موارد دیگر را بر روی کامپیوتر محلی خود نصب کنید. لازم است برای توسعه با پایتون pip را نصب کنید . خب ابتدا فایل get-pip.py را از اینجا دانلود کنید و بر روی دسکتاپ خود قرار دهید ( یا به سایت مستندات PIP مراجعه کنید ) . و سپس دستورات زیر را بزنید تا فایل دانلود شده اجرا شوند : >>> C:\ > cd Desktop >>> C:\ > python get-pip.py خب حالا باید دستورات زیر را وارد کنید و تمام : >>> C:\ > pip install virtualenv >>> C:\ > pip freeze >>> C:\ > pip install Django خب تمام شد . شما الان جنگو و virtualenv بر روی سیستم خودتون دارید . ولی به شدت توصیه میکنم اگر میخواید به صورت حرفه ای وارد دنیای پایتون و جنگو بشید حتما از سیستم عامل لینوکس استفاده کنید . برای ادامه کار و شروع آموزش پروژه محور طراحی یک وب سایت با پایتون و جنگو به لینک زیر مراجعه کنید : آموزش پروژه محور طراحی سایت با پایتون و فریم ورک جنگو خسته نباشید دوستان برای هرگونه سوال مطرح کردن به تاپیک این آموزش مراجعه کنید موفق و پیروز باشید پایتونی ها
  23. سلام من شنیدم که برای مدل های جنگو برای هر فیلد میشه یه نام در نظر گرفت . که بتونیم از این نام نمایشی در سایت مدیر استفاده کنیم . چجوری باید از نام نمایشی برای فیلدهای مدل در جنگو استفاده کرد؟ با تشکر
  24. با سلام من میخوام تو فایل مدل پروژه جنگو ام یه فیلدی درست کنم که کاربر بتونه مثلا ۳ تا گزینه رو انتخاب کنه . مثلا برای آیتم لباس میخوام یه فیلدی بزارم ( choices field ) به اسم سایز که شامل ۳ بخش کوچک و متوسط و بزرگ باشه و مدیر باید یکی از این هارو انتخاب کنه. و یک لباس نمیتونه هم زمان هم بزرگ باشه و هم متوسط ممنون میشم راهنمایی کنید با تشکر