با عرض سلام و وقت بخیر خدمت کاربران محترم، در این مقاله آموزشی که چکیده آموزش جنگو از سایت بهمراه مطالب تکمیلی تر, سعی شده یک آموزش کاربردی و پروژه محور از جنگو ارایه گردد. ایده این سری مقاله های آموزشی از این موضوع سرچشمه می گیرد که بخشی از خوانندگان وجود دارد که به محتوای نوشتاری آنلاین بهتر پاسخ می دهند و ترجیج می دهند مهارت های جدید را به سرعت از طریق خواندن افزایش دهند. این سری اموزش ها با ارایه اولین پکیج آموزشی در خصوص مانگودبی آغاز می شود که انتظار می رود با واکنش مثبت کاربران همراه شود. Django Tutorial جنگو یک چارچوب توسعه وب است که به ساخت و حفظ برنامه های کاربردی وب با کیفیت کمک می کند. جنگو به حذف کارهای تکراری کمک می کند و فرآیند توسعه را به تجربه ای آسان و صرفه جویی در زمان تبدیل می کند. این آموزش درک کاملی از جنگو می دهد. این آموزش برای توسعه دهندگانی طراحی شده است که می خواهند یاد بگیرند که چگونه برنامه های کاربردی وب با کیفیت را با استفاده از تکنیک ها و ابزارهای هوشمند ارایه شده توسط جنگو توسعه دهند. قبل از ادامه، مطمین شوید که اصول برنامه نویسی رویه ای و شی گرا را درک کرده اید: ساختارهای کنترل، ساختارهای داده و متغیرها، کلاس ها، اشیاء و غیره. جنگو یک چارچوب وب سطح بالا پایتون است که توسعه سریع و طراحی تمیز و عملی را تشویق می کند. جنگو ساخت برنامه های وب بهتر را به سرعت و با کد کمتر آسان تر می کند. توجه - جنگو یک علامت تجاری ثبت شده بنیاد نرم افزار جنگو است و تحت مجوز BSD t فعالیت می کند. History of Django - توسط Adrian Holovaty و Simon Willison به عنوان یک پروژه داخلی در روزنامه Lawrence Journal - World آغاز شد. - ژوییه منتشر شد و نام آن را جنگو به نام جانگو راینهارت، نوازنده گیتار جاز، گذاشت. - به اندازه کافی بالغ شده تا بتواند چندین سایت پر ترافیک را مدیریت کند. کنونی جنگو اکنون یک پروژه منبع باز با مشارکت کنندگان در سراسر جهان است. جنگو با فلسفه های طراحی زیر ارایه می شود: هدف جنگو این است که هر عنصر Stack خود را مستقل از بقیه کند. کد کمتر به نوبه خود توسعه سریع. - همه چیز باید دقیقا در یک مکان توسعه داده شود به جای تکرار دوباره و دوباره. فلسفه جنگو این است که تمام تلاش خود را برای تسهیل توسعه سریع انجام دهد. جنگو به شدت یک طراحی تمیز را در سراسر کد خود حفظ می کند و پیروی از بهترین شیوه های توسعه وب را آسان می کند. Advantages of Django در اینجا چند مزیت استفاده از جنگو بیان می شود: جنگو پلی بین مدل داده و موتور پایگاه داده فراهم می کند و از مجموعه بزرگی از سیستم های پایگاه داده از جمله MySQL ، Oracle ، Postgres و غیره پشتیبانی می کند. جنگو همچنین از پایگاه داده NoSQL از طریق فورک جنگو - nonrel پشتیبانی می کند. در حال حاضر، تنها پایگاه داده های NoSQL پشتیبانی شده MongoDB و google app هستند جنگو از طریق سیستم بین المللی سازی داخلی خود از وب سایت های چند زبانه پشتیبانی می کند. بنابراین می توانید وب سایت خود را توسعه دهید که از چندین زبان پشتیبانی می کند جنگو دارای پشتیبانی داخلی از Ajax ، RSS ، Caching و فریمورک های مختلف دیگر است. جنگو یک رابط کاربری خوب و آماده برای استفاده برای فعالیت های اداری ارایه می دهد. جنگو دارای یک وب سرور سبک وزن است تا توسعه و آزمایش برنامه های کاربردی را تسهیل کند. همانطور که می دانید جنگو یک چارچوب وب پایتون است. و مانند اکثر فریم ورک های مدرن، جنگو از الگوی MVC پشتیبانی می کند. ابتدا بیایید ببینیم الگوی Model - View - Controller ( MVC ) چیست و سپس به ویژگی جنگو برای الگوی Model - View - Template ( MVT ) خواهیم پرداخت. MVC Pattern وقتی در مورد برنامه هایی که رابط کاربری (وب یا دسکتاپ) را ارایه می دهند صحبت می کنیم، معمولا در مورد معماری MVC صحبت می کنیم. و همانطور که از نام آن پیداست، الگوی MVC بر اساس سه جزء است: Model ، View و Controller . DJANGO MVC - MVT Pattern Model - View - Template ( MVT ) کمی با MVC متفاوت است. در واقع تفاوت اصلی بین این دو الگو این است که خود جنگو از بخش Controller (کد نرم افزاری که تعاملات بین Model و View را کنترل می کند) مراقبت می کند و الگو را به ما واگذار می کند. این قالب یک فایل HTML است که با زبان قالب جنگو ( DTL ) ترکیب شده است. نمودار زیر نشان می دهد که چگونه هر یک از اجزای الگوی MVT با یکدیگر تعامل می کنند تا یک درخواست کاربر را ارایه دهند - توسعه‌دهنده مدل، نمای و قالب را ارایه می‌کند و سپس آن را به یک URL نگاشت می‌کند و جنگو کارهای جادویی را برای ارایه آن به کاربر انجام می‌دهد. محیط توسعه جنگو شامل نصب و راه اندازی پایتون، جنگو و یک سیستم پایگاه داده است. از آنجایی که جنگو با برنامه های کاربردی وب سر و کار دارد، لازم به ذکر است که شما به راه اندازی وب سرور نیز نیاز دارید. Step Installing Python جنگو با کد % خالص پایتون نوشته شده است، بنابراین باید پایتون را روی سیستم خود نصب کنید. آخرین نسخه جنگو به پایتون . . یا بالاتر نیاز دارد اگر از آخرین توزیع‌های لینوکس یا Mac OS X استفاده می‌کنید، احتمالا از قبل پایتون را نصب کرده‌اید. می توانید با تایپ دستور پایتون در خط فرمان آن را ت یید کنید. اگر چیزی شبیه به این مشاهده کردید، پس پایتون نصب شده است. در غیر این صورت می توانید آخرین نسخه پایتون را از لینک http : www . python . org / download دانلود و نصب کنید. Step - Installing Django نصب جنگو بسیار آسان است، اما مراحل لازم برای نصب آن به سیستم عامل شما بستگی دارد. از آنجایی که پایتون یک زبان مستقل از پلتفرم است، جنگو یک بسته دارد که بدون در نظر گرفتن سیستم عامل شما در همه جا کار می کند. آخرین نسخه جنگو را می توانید از لینک http : www . djangoproject . com / download دانلود کنید. UNIX / Linux and Mac OS X Installation اگر سیستم عامل لینوکس یا مک را اجرا می کنید، دو راه برای نصب جنگو دارید - می توانید از مدیر بسته سیستم عامل خود استفاده کنید یا در صورت نصب از easy _ install یا pip استفاده کنید. با استفاده از آرشیو رسمی که قبلا دانلود کرده اید، آن را به صورت دستی نصب کنید. ما گزینه دوم را پوشش خواهیم داد زیرا اولین مورد به توزیع سیستم عامل شما بستگی دارد. اگر تصمیم گرفته اید گزینه اول را دنبال کنید، فقط مراقب نسخه جنگویی که نصب می کنید باشید. فرض کنید بایگانی خود را از لینک بالا دریافت کرده اید، باید چیزی شبیه به Django - x . xx . tar . gz باشد You can test your installation by running this command اگر نسخه فعلی جنگو را روی صفحه نمایش می بینید، همه چیز تنظیم شده است. ما فرض می کنیم که بایگانی جنگو و پایتون خود را روی رایانه خود نصب کرده اید. First , PATH verification . در برخی از نسخه های ویندوز (ویندوز ) ممکن است لازم باشد مطمین شوید که متغیر Path system مسیر زیر را دارد، البته C : Python ; C : Python Lib site - packages django bin . بسته به نسخه پایتون شما Then , extract and install Django . سپس، جنگو را با اجرای دستور زیر نصب کنید که برای آن به مجوزهای مدیریتی در پوسته ویندوز" cmd " نیاز دارید - برای آزمایش نصب خود، یک خط فرمان باز کنید و دستور زیر را تایپ کنید - اگر نسخه فعلی جنگو را روی صفحه نمایش می بینید، همه چیز تنظیم شده است. یا یک دستور cmd را اجرا کنید و python را تایپ کنید و سپس جنگو از چندین موتور اصلی پایگاه داده پشتیبانی می کند و شما می توانید هر یک از آنها را بر اساس راحتی خود تنظیم کنید. برای نصب و پیکربندی پایگاه داده دلخواه خود می توانید به مستندات مربوطه مراجعه کنید. توجه - شماره و پایگاه داده NoSQL هستند جنگو با یک وب سرور سبک وزن برای توسعه و آزمایش برنامه ها ارایه می شود. این سرور برای کار با جنگو از قبل پیکربندی شده است و مهمتر از آن، هر زمان که کد را تغییر دهید دوباره راه اندازی می شود. با این حال، جنگو از آپاچی و سایر وب سرورهای محبوب مانند Ligاین وبسایت پشتیبانی می کند. ما هر دو رویکرد را در فصل های آینده در حین کار با مثال های مختلف مورد بحث قرار خواهیم داد. حالا که جنگو را نصب کردیم، بیایید شروع به استفاده از آن کنیم. در جنگو، هر برنامه وب که می خواهید ایجاد کنید پروژه نامیده می شود. و یک پروژه مجموعه ای از برنامه های کاربردی است. اپلیکیشن مجموعه ای از فایل های کد است که بر الگوی MVT تکیه دارند. به عنوان مثال فرض کنید می خواهیم یک وب سایت بسازیم، وب سایت پروژه ما است و انجمن، اخبار، موتور تماس برنامه های کاربردی هستند. این ساختار جابجایی یک برنامه را بین پروژه ها آسان تر می کند زیرا هر برنامه مستقلی است. چه در ویندوز یا لینوکس هستید، فقط یک ترمینال یا یک دستور cmd دریافت کنید و به مکانی که می خواهید پروژه شما ایجاد شود بروید، سپس از این کد استفاده کنید - این یک پوشه" myproject " با ساختار زیر ایجاد می کند: پوشه" myproject " فقط محفظه پروژه شماست، در واقع شامل دو عنصر - است این فایل نوعی django - admin محلی پروژه شما برای تعامل با پروژه شما از طریق خط فرمان (راه اندازی سرور توسعه، همگام سازی db . است. برای دریافت لیست کامل دستورات قابل دسترسی از طریق manager . py می توانید از کد استفاده کنید این پوشه بسته پایتون واقعی پروژه شما است. شامل چهار فایل: فقط برای پایتون، این پوشه را به عنوان بسته در نظر بگیرید. همانطور که از نام آن مشخص است، تنظیمات پروژه شما. همه پیوندهای پروژه شما و عملکردی که باید فراخوانی کنید. نوعی ToC پروژه شما. اگر نیاز به استقرار پروژه خود بر روی WSGI دارید. پروژه شما در زیر پوشه myproject / settings . py تنظیم شده است. در زیر چند گزینه مهم وجود دارد که ممکن است نیاز به تنظیم داشته باشید - این گزینه به شما امکان می دهد تعیین کنید که آیا پروژه شما در حالت اشکال زدایی است یا خیر. حالت Debug به شما امکان می دهد اطلاعات بیشتری در مورد خطای پروژه خود دریافت کنید. هرگز آن را برای یک پروژه زنده روی" True " تنظیم نکنید. با این حال، اگر می‌خواهید سرور Django light فایل‌های استاتیک را ارایه دهد، باید روی "درست" تنظیم شود. این کار را فقط در حالت توسعه انجام دهید. پایگاه داده در فرهنگ لغت"پایگاه داده" تنظیم شده است. مثال بالا برای موتور SQLite است. همانطور که قبلا گفته شد، جنگو از نیز پشتیبانی می کند MySQL ( django . db . backends . mysql ) PostGreSQL ( django . db . backends . postgresql _ psycopg ) Oracle ( django . db . backends . oracle ) and NoSQL DB MongoDB ( django _ mongodb _ engine ) قبل از تنظیم هر موتور جدید، مطمین شوید که درایور صحیح db را نصب کرده اید. همچنین می توانید گزینه های دیگری مانند: TIME _ ZONE , LANGUAGE _ CODE , TEMPLATE . اکنون که پروژه شما ایجاد و پیکربندی شده است، مطمین شوید که کار می کند - با اجرای کد بالا چیزی شبیه به زیر دریافت خواهید کرد Django - Apps Life یک پروژه مجموعه ای از برنامه های کاربردی زیاد است. هر برنامه یک هدف دارد و می تواند مجددا در پروژه دیگری استفاده شود، مانند فرم تماس در یک وب سایت می تواند یک برنامه کاربردی باشد و می تواند برای دیگران استفاده مجدد شود. آن را به عنوان یک ماژول از پروژه خود ببینید. Create an Application ما فرض می کنیم که شما در پوشه پروژه خود هستید. در پوشه اصلی" myproject " ما، همان پوشه و سپس manager . py شما به تازگی برنامه myapp را ایجاد کرده اید و مانند پروژه، جنگو یک پوشه" myapp " با ساختار برنامه ایجاد می کند - فقط برای اینکه مطمین شوید پایتون این پوشه را به عنوان یک بسته مدیریت می کند. این فایل به شما کمک می کند تا برنامه را در رابط مدیریت قابل تغییر کنید. این جایی است که تمام مدل های برنامه ذخیره می شوند. این جایی است که آزمون های واحد شما قرار دارد. نماهای برنامه شما اینجاست. در این مرحله ما برنامه" myapp " خود را داریم، اکنون باید آن را با پروژه جنگو" myproject " خود ثبت کنیم. برای انجام این کار، INSTALLED _ APPS tuple را در فایل settings . py پروژه خود به روز کنید (نام برنامه خود را اضافه کنید) - جنگو یک رابط کاربری آماده برای استفاده برای فعالیت های اداری ارایه می دهد. همه ما می دانیم که چگونه یک رابط مدیر برای یک پروژه وب مهم است. جنگو به طور خودکار رابط کاربری مدیریت را بر اساس مدل های پروژه شما ایجاد می کند. Starting the Admin Interface رابط مدیریت به ماژول django . countrib بستگی دارد. برای اینکه کار کند، باید مطمین شوید که برخی از ماژول‌ها در INSTALLED _ APPS و MIDDLEWARE _ CLASSES فایل myproject / settings . py وارد شده‌اند. For INSTALLED _ APPS make sure you have For MIDDLEWARE _ CLASSES قبل از راه اندازی سرور خود، برای دسترسی به رابط مدیریت خود، باید پایگاه داده را راه اندازی کنید - syncdb جداول یا مجموعه های لازم را بسته به نوع db شما ایجاد می کند، که برای اجرای رابط مدیریت لازم است. حتی اگر سوپرکاربر نداشته باشید، از شما خواسته می شود که یکی را ایجاد کنید. اگر قبلا یک ابرکاربر دارید یا آن را فراموش کرده‌اید، همیشه می‌توانید با استفاده از کد زیر یکی ایجاد کنید اکنون برای شروع رابط مدیریت، باید مطمین شویم که یک URL برای رابط مدیریت خود پیکربندی کرده ایم. myproject را باز کنید Now just run the server . And your admin interface is accessible at : / admin / Once connected with your superuser account , you will see the following screen این رابط به شما امکان می دهد گروه ها و کاربران جنگو و همه مدل های ثبت شده در برنامه خود را مدیریت کنید. این رابط به شما این توانایی را می دهد که حداقل عملیات CRUD (ایجاد، خواندن، به روز رسانی، حذف) را روی مدل های خود انجام دهید. تابع view یا به اختصار" view " به سادگی یک تابع پایتون است که یک درخواست وب را می گیرد و یک پاسخ وب را برمی گرداند. این پاسخ می تواند محتویات HTML یک صفحه وب، یا تغییر مسیر، یا یک خطای ، یا یک سند XML ، یا یک تصویر و غیره باشد. مثال: شما از view برای ایجاد صفحات وب استفاده می کنید، توجه داشته باشید که باید یک نما را مرتبط کنید. به یک URL برای دیدن آن به عنوان یک صفحه وب. در جنگو، نماها باید در فایل views . py برنامه ایجاد شوند. Simple View ما یک نمای ساده در myapp ایجاد می کنیم تا بگوییم"به برنامه من خوش آمدید!" در این نما، ما از HttpResponse برای رندر HTML استفاده می‌کنیم (همانطور که احتمالا متوجه شده‌اید که HTML به صورت سخت در نما کدگذاری شده است) برای دیدن این نما به عنوان یک صفحه، فقط باید آن را به یک URL ترسیم کنیم (این مورد در فصل آینده مورد بحث قرار خواهد گرفت) ما از HttpResponse برای رندر HTML در نمای قبلی استفاده کردیم. این بهترین راه برای رندر صفحات نیست. جنگو از الگوی MVT پشتیبانی می کند، بنابراین برای ایجاد نمای قبلی، مانند جنگو - MVT ، به آن نیاز داریم - A template : myapp / templates / hello . html And now our view will look like Views can also accept parameters هنگامی که به یک URL پیوند داده می شود، صفحه شماره ارسال شده را به عنوان پارامتر نمایش می دهد. توجه داشته باشید که پارامترها از طریق URL ارسال می شوند (در فصل بعدی بحث شده است) Django - URL Mapping اکنون که یک نمای کاری داریم همانطور که در فصل های قبل توضیح داده شد. ما می خواهیم از طریق URL به آن نمای دسترسی پیدا کنیم. جنگو راه خاص خود را برای نقشه برداری URL دارد و با ویرایش فایل url . py پروژه شما ( myproject ) انجام می شود هنگامی که کاربر درخواستی برای صفحه ای در برنامه وب شما می کند، کنترلر جنگو وظیفه جستجوی نمای مربوطه را از طریق فایل url . py می کند و سپس پاسخ HTML یا خطای not found را، در صورتی که پیدا نشد، برمی گرداند. در url . py ، مهمترین چیز تاپل" urlpatterns " است. جایی است که شما نگاشت بین URL ها و نماها را تعریف می کنید. نقشه برداری یک تاپل در الگوهای URL مانند - است خط علامت گذاری شده نشانی اینترنتی را نشان می دهد Regexp مطابق با URL مورد نظر برای حل و نقشه برداری. هر چیزی که می تواند با ماژول ' re ' پایتون کار کند برای الگو واجد شرایط است (زمانی که می خواهید پارامترها را از طریق url ارسال کنید مفید است) - مانند زمانی که یک ماژول را وارد می کنید. برای انجام معکوس کردن URL ، باید از الگوهای URL با نام همانطور که در مثال های بالا انجام شد استفاده کنید. پس از اتمام، فقط سرور را برای دسترسی به نمای خود از طریق: http : . . . / hello راه اندازی کنید Organizing Your URLs تا کنون URL ها را در فایل myprojects / url . py ایجاد کرده ایم، اما همانطور که قبلا در مورد جنگو و ایجاد یک برنامه گفته شد، بهترین نکته این بود که بتوانیم از برنامه ها در پروژه های مختلف استفاده مجدد کنیم. اگر همه URL های خود را در فایل" projecturl . py " ذخیره کنید، به راحتی می توانید ببینید مشکل چیست. بنابراین بهترین روش این است که یک" url . py " برای هر برنامه ایجاد کنید و آن را در فایل url . py پروژه های اصلی خود بگنجانید (ما قبلا URL های مدیریت را برای رابط مدیر قرار داده بودیم) ما باید با استفاده از کد زیر یک فایل url . py در myapp ایجاد کنیم Then myproject / url . py will change to the following ما همه URL ها را از برنامه myapp اضافه کرده ایم. home . html که از طریق " حالا بیایید تصور کنیم که نمای دیگری در myapp " morning " داریم و می‌خواهیم آن را در myapp ترسیم کنیم This can be re - factored to همانطور که می بینید، ما اکنون از اولین عنصر تاپل urlpattern خود استفاده می کنیم. این می تواند زمانی مفید باشد که می خواهید نام برنامه خود را تغییر دهید. اکنون می دانیم که چگونه URL را نقشه برداری کنیم، چگونه آنها را سازماندهی کنیم، اکنون اجازه دهید نحوه ارسال پارامترها را به نماها ببینیم. یک نمونه کلاسیک نمونه مقاله است (شما می خواهید به مقاله از طریق" دسترسی داشته باشید ما می خواهیم آن را در myapp / url . py ترسیم کنیم تا بتوانیم از طریق "/ myapp / article / articleId " به آن دسترسی داشته باشیم، در " myapp / url . py " به موارد زیر نیاز داریم - وقتی جنگو url را ببیند: "/ myapp / article / " پارامترهای ' ' را به viewArticle view منتقل می کند و در مرورگر خود باید نتیجه زیر را دریافت کنید - The corresponding file will look like اکنون وقتی به "/ myapp / articles / / /" می روید، "نمایش مقالات: / " را دریافت می کنید، اما اگر پارامترها را معکوس کنید، نتیجه مشابهی دریافت نمی کنید. برای جلوگیری از آن، می توان یک پارامتر URL را به پارامتر view پیوند داد. برای آن، url . py ما خواهد شد جنگو امکان جداسازی پایتون و HTML را فراهم می کند، پایتون در view ها و HTML در قالب ها قرار می گیرد. برای پیوند این دو، جنگو به تابع رندر و زبان قالب جنگو متکی است. The Render Function این تابع سه پارامتر می گیرد درخواست اولیه این مسیر مربوط به گزینه TEMPLATE _ DIRS در متغیرهای project settings . py است. دیکشنری که شامل تمام متغیرهای مورد نیاز در قالب است. این متغیر می تواند ایجاد شود یا می توانید از locals ( برای ارسال تمام متغیرهای محلی اعلام شده در view استفاده کنید. Django Template Language ( DTL ) موتور قالب جنگو یک زبان کوچک برای تعریف لایه رو به روی کاربر برنامه ارایه می دهد. Displaying Variables یک متغیر به این شکل است: {متغیر} الگو با متغیر ارسال شده توسط view در پارامتر سوم تابع رندر جایگزین متغیر می شود. بیایید hello . html خود را برای نمایش تاریخ امروز تغییر دهیم - Then our view will change to اکنون پس از دسترسی به URL خروجی زیر را دریافت خواهیم کرد همانطور که احتمالا متوجه شده اید، اگر متغیر یک رشته نباشد، جنگو از متد _ str _ برای نمایش آن استفاده می کند. و با همان اصل می توانید به یک ویژگی شی دسترسی داشته باشید، درست مانند آنچه در پایتون انجام می دهید. به عنوان مثال: اگر بخواهیم تاریخ سال را نمایش دهیم، متغیر من این خواهد بود: { today . year } Filters آنها به شما کمک می کنند تا متغیرها را در زمان نمایش تغییر دهید. ساختار فیلترها به شکل زیر است: { var | filters } این فیلتر رشته را کوتاه می کند، بنابراین شما فقط کلمه اول را خواهید دید. رشته را به حروف کوچک تبدیل می کند. از محتویات رشته فرار می کند، سپس شکستگی خط را به برچسب تبدیل می کند. همچنین می توانید پیش فرض را برای یک متغیر تنظیم کنید. Tags برچسب‌ها به شما امکان می‌دهند عملیات زیر را انجام دهید: if condition ، برای حلقه، وراثت الگو و موارد دیگر. Tag if برچسب‌ها به شما امکان می‌دهند عملیات زیر را انجام دهید: if condition ، برای حلقه، وراثت الگو و موارد دیگر. در این قالب جدید، بسته به تاریخ روز، قالب مقدار مشخصی را ارایه می دهد. Tag for دقیقا مانند " if "، تگ " for " را داریم که دقیقا مانند پایتون کار می کند. بیایید نمای hello خود را تغییر دهیم تا لیستی را به الگوی خود منتقل کنیم - The template to display that list using { for } And we should get something like Block and Extend Tags یک سیستم قالب نمی تواند بدون وراثت الگو کامل شود. به این معنی که وقتی قالب های خود را طراحی می کنید، باید یک الگوی اصلی با حفره هایی داشته باشید که الگوی کودک با توجه به نیاز خود آن ها را پر می کند، مانند اینکه ممکن است یک صفحه برای برگه انتخاب شده به css خاصی نیاز داشته باشد. بیایید الگوی hello . html را به ارث بردن از main _ template . html تغییر دهیم. در مثال بالا، با فراخوانی/ myapp / hello ، همچنان همان نتیجه قبلی را خواهیم داشت، اما اکنون برای بازگرداندن کد خود به extensions و block تکیه می کنیم. در main _ template . html بلوک ها را با استفاده از بلوک تگ تعریف می کنیم. بلوک عنوان حاوی عنوان صفحه و بلوک محتوا محتوای اصلی صفحه خواهد بود. در home . html از extensions برای ارث بردن از main _ template . html استفاده می کنیم سپس بلوک تعریف شده در بالا (محتوا و عنوان) را پر می کنیم. Comment Tag تگ کامنت به تعریف نظرات در قالب ها کمک می کند، نه نظرات HTML ، آنها در صفحه HTML ظاهر نمی شوند. این می تواند برای مستندسازی یا فقط نظر دادن یک خط کد مفید باشد. مدل کلاسی است که جدول یا مجموعه را در DB ما نشان می دهد و هر ویژگی کلاس فیلدی از جدول یا مجموعه است. مدل ها در برنامه تعریف شده است Creating a Model Following is a Dreamreal model created as an example هر مدلی از django . db . models . Model ارث می برد. کلاس ما دارای ویژگی ( CharField و Integer ) است که اینها فیلدهای جدول خواهند بود. کلاس Meta با ویژگی db _ table به ما امکان می دهد تا جدول یا نام مجموعه واقعی را تعریف کنیم. جنگو به طور خودکار جدول یا مجموعه را نامگذاری می کند: myapp _ modelName . این کلاس به شما امکان می دهد نام جدول را به چیزی که دوست دارید مجبور کنید. نوع فیلدهای بیشتری در django . db . models وجود دارد که می توانید در این وبسایت در مورد آنها اطلاعات بیشتری کسب کنید: بیایید یک نمای" crudops " ایجاد کنیم تا ببینیم چگونه می توانیم عملیات CRUD را روی مدل ها انجام دهیم. برنامه ما بیایید دستکاری های دیگری را که می توانیم روی Models انجام دهیم را بررسی کنیم. توجه داشته باشید که عملیات CRUD بر روی نمونه هایی از مدل ما انجام شد، اکنون ما مستقیما با کلاسی که مدل ما را نشان می دهد کار خواهیم کرد. Let ' s create a ' datamanipulation ' view in Django ORM راه برای پیوند مدل ها ارایه می دهد - یکی از اولین مواردی که در اینجا خواهیم دید، روابط یک به چند است. همانطور که در مثال بالا مشاهده می کنید، شرکت Dreamreal می تواند چندین وب سایت آنلاین داشته باشد. تعریف آن رابطه با استفاده از django . db . models . ForeignKey انجام می شود همانطور که در myapp / models . py به روز شده مشاهده می کنید، ما مدل آنلاین را اضافه کرده و آن را به مدل Dreamreal خود پیوند دادیم. بیایید بررسی کنیم که چگونه همه اینها از طریق shell manager . py کار می کنند ابتدا اجازه دهید چند شرکت (ورودی های Dreamreal ) برای آزمایش در پوسته جنگو ایجاد کنیم - Now some hosted domains دسترسی به ویژگی شرکت میزبان (ورودی Dreamreal ) از یک دامنه آنلاین ساده است - و اگر بخواهیم تمام دامنه آنلاین میزبانی شده توسط یک شرکت در Dreamreal را بدانیم، از کد - استفاده خواهیم کرد >>> dr . online _ set . all ( برای دریافت QuerySet ، توجه داشته باشید که تمام روش های دستکاری که قبلا دیده ایم ( filter , all , exclude , order _ by . همچنین می توانید به ویژگی های مدل پیوند شده برای عملیات فیلتر دسترسی داشته باشید. می‌گویید که می‌خواهید همه دامنه‌های آنلاینی را که نام Dreamreal حاوی"شرکت" است، دریافت کنید توجه - این نوع پرس و جو فقط برای SQL DB پشتیبانی می شود. برای DB غیر رابطه ای که در آن Join وجود ندارد و دو"_" وجود دارد، کار نمی کند. اما این تنها راه برای پیوند دادن مدل ها نیست، شما همچنین OneToOneField دارید، پیوندی که تضمین می کند که رابطه بین دو شی منحصر به فرد است. اگر در مثال بالا از OneToOneField استفاده کنیم، به این معنی است که برای هر ورودی Dreamreal فقط یک ورودی آنلاین و از راه دیگر امکان پذیر است. و آخرین مورد، ManyToManyField برای ( n - n ) رابطه بین جداول. توجه داشته باشید، این موارد مربوط به DB مبتنی بر SQL هستند. Django - Page Redirection تغییر مسیر صفحه به دلایل زیادی در برنامه وب مورد نیاز است. ممکن است بخواهید زمانی که یک عمل خاص اتفاق می افتد یا اساسا در صورت بروز خطا، کاربر را به صفحه دیگری هدایت کنید. به عنوان مثال، هنگامی که کاربر وارد وب سایت شما می شود، اغلب به صفحه اصلی اصلی یا داشبورد شخصی خود هدایت می شود. در جنگو، تغییر مسیر با استفاده از روش ' redirect ' انجام می شود. متد ' redirect ' به عنوان آرگومان در نظر گرفته می‌شود: نشانی اینترنتی که می‌خواهید به عنوان نام یک view ' s name به آن هدایت شود. The myapp / views looks like the following so far Let ' s change the hello view to redirect to djangoproject . com and our viewArticle to redirect to our internal '/ myapp / articles '. To do so the myapp / view . py will change to در مثال بالا، ابتدا ریدایرکت را از django . shortcuts وارد کردیم و برای تغییر مسیر به وب سایت رسمی جنگو، فقط URL کامل را به روش ' redirect ' به عنوان رشته ارسال می کنیم و برای مثال دوم (نمای viewArticle ) ' redirect ' را ارسال می کنیم. متد نام view و پارامترهای آن را به عنوان آرگومان می گیرد. Accessing / myapp / hello , will give you the following screen And accessing / myapp / article / , will give you the following screen همچنین می توان با افزودن پارامتر دایمی = True مشخص کرد که ' redirect ' موقت است یا دایم. کاربر هیچ تفاوتی نمی بیند، اما اینها جزییاتی هستند که موتورهای جستجو هنگام رتبه بندی وب سایت شما در نظر می گیرند. همچنین به یاد داشته باشید که پارامتر" name " را در url . py خود در حین نگاشت URL ها تعریف کردیم - این نام (در اینجا مقاله) می تواند به عنوان استدلال برای روش ' redirect ' استفاده شود، سپس تغییر مسیر viewArticle ما می تواند از TO توجه - همچنین یک تابع برای تولید URL وجود دارد. از آن به همان شیوه تغییر مسیر استفاده می شود. روش" reverse " ( django . core . urlresolvers . reverse ) این تابع یک شی HttpResponseRedirect را بر نمی گرداند، بلکه فقط یک رشته حاوی URL به نمای کامپایل شده با هر آرگومان ارسال شده است. جنگو با یک موتور سبک آماده و آسان برای ارسال ایمیل ارایه می شود. مشابه پایتون شما فقط نیاز به واردات smtplib دارید. در جنگو فقط باید django . core . mail را وارد کنید. برای شروع ارسال ایمیل، فایل settings . py پروژه خود را ویرایش کرده و گزینه های زیر را تنظیم کنید smtp server . Login credential for the smtp server . Password credential for the smtp server . smtp server port . True if secure connection . Sending a Simple E - mail Let ' s create a " sendSimpleEmail " view to send a simple e - mail . در اینجا جزییات پارامترهای send _ mail - آمده است E - mail subject . E - mail body . E - mail from . List of receivers ' e - mail address . Bool , if false send _ mail will raise an exception in case of error . User login if not set in settings . py . User password if not set in settings . py . E - mail backend . ( new in Django . ) if present , the e - mail will be multipart / alternativ Let ' s create a URL to access our view from django . conf . urls import patterns , url urlpatterns = paterns (' myapp . views ', url ( r '^ simpleemail /? P [ w . + - ] [ A - Za - z - . - ] + . [ A - Za - z ] { , }', ' sendSimpleEmail ', name = ' sendSimpleEmail ') So when accessing / myapp / simpleemail / you will get the following page Sending Multiple Mails with send _ mass _ mail این روش تعداد پیام هایی که با موفقیت تحویل داده شده است را برمی گرداند. این همان send _ mail است اما یک پارامتر اضافی می گیرد. datatuple ، نمای sendMassEmail ما پس از آن خواهد بود Let ' s create a URL to access our view When accessing / myapp / massemail / we get send _ mass _ mail parameters details are A tuple where each element is like ( subject , message , from _ email , recipient _ list ) Bool , if false send _ mail will raise an exception in case of error . User login if not set in settings . py . User password if not set in settings . py . E - mail backend همانطور که در تصویر بالا مشاهده می کنید، دو پیام با موفقیت ارسال شد. توجه - در این مثال ما از سرور اشکال زدایی smtp پایتون استفاده می کنیم که می توانید با استفاده از - راه اندازی کنید. این بدان معنی است که تمام ایمیل های ارسالی شما در stdout چاپ می شود و سرور ساختگی روی localhost : اجرا می شود. ارسال ایمیل به ادمین ها و مدیران با استفاده از روش های mail _ admins و mail _ managers = (' polo ', ' ') = (' popoli ', ' ') کد بالا برای هر مدیری که در قسمت ADMINS تعریف شده است یک ایمیل ارسال می کند. کد بالا برای هر مدیری که در قسمت MANAGERS تعریف شده است یک ایمیل ارسال می کند. Parameters details E - mail subject . E - mail body . Bool , if false send _ mail will raise an exception in case of error . E - mail backend . ( new in Django . ) if present , the e - mail will be multipart / alternative . Sending HTML E - mail Sending HTML message in Django >= . is as easy as این یک ایمیل چند بخشی/جایگزین تولید می کند. اما برای Django ، و RSS مطابقت دارند. روش آیتم ها، عناصری را که باید در فید به عنوان عنصر آیتم وارد شوند، برمی گرداند. در مورد ما پنج نظر آخر. روش item _ title ، چیزی را به عنوان عنوان مورد فید ما دریافت می کند. در مورد ما عنوان، نام کاربری خواهد بود. روش item _ description ، آنچه را که به عنوان توضیحات برای مورد فید ما خواهد بود، دریافت می کند. در مورد ما خود نظر. متد item _ link پیوند را به آیتم کامل می‌سازد. در مورد ما، شما را به نظر می رساند. اکنون که فید خود را داریم، بیایید یک نمای نظر در views . py اضافه کنیم تا نظر خود را نمایش دهیم - We also need some URLs in our myapp urls . py for mapping When accessing / myapp / latest / comments / you will get our feed سپس با کلیک بر روی یکی از نام‌های کاربری به موارد زیر هدایت می‌شوید: بنابراین، تعریف یک فید RSS فقط یک موضوع زیر طبقه بندی کلاس Feed و اطمینان از تعریف URL ها (یکی برای دسترسی به فید و دیگری برای دسترسی به عناصر فید) است. درست به عنوان نظر، این می تواند به هر مدلی در برنامه شما متصل شود. Django - Ajax Ajax اساسا ترکیبی از فناوری‌هایی است که برای کاهش تعداد بارگذاری صفحات با یکدیگر یکپارچه شده‌اند. ما معمولا از Ajax برای سهولت تجربه کاربر نهایی استفاده می کنیم. استفاده از Ajax در Django را می توان با استفاده مستقیم از یک کتابخانه Ajax مانند JQuery یا موارد دیگر انجام داد. فرض کنید می خواهید از JQuery استفاده کنید، سپس باید کتابخانه را از طریق آپاچی یا سایرین روی سرور خود دانلود و سرویس کنید. سپس از آن در قالب خود استفاده کنید، درست مانند کاری که ممکن است هنگام توسعه هر برنامه مبتنی بر Ajax انجام دهید. راه دیگر استفاده از Ajax در جنگو استفاده از فریمورک Django Ajax است. رایج ترین مورد استفاده، django - dajax است که ابزاری قدرتمند برای توسعه آسان و فوق العاده سریع منطق ارایه ناهمزمان در برنامه های وب، با استفاده از پایتون و تقریبا بدون کد منبع جاوا اسکریپت است. چهار مورد از محبوب ترین فریم ورک های آژاکس را پشتیبانی می کند: Prototype ، jQuery ، Dojo و MooTools . Using Django - dajax اولین کاری که باید انجام دهید این است که django - dajax را نصب کنید. این را می توان با استفاده از easy _ install یا pip انجام داد این به طور خودکار django - dajaxice مورد نیاز django - dajax را نصب می کند. سپس باید هم dajax و هم dajaxice را پیکربندی کنیم. dajax و dajaxice را در تنظیمات پروژه خود در گزینه INSTALLED _ APPS اضافه کنید Make sure in the same settings . py file , you have the following Now go to the myapp / url . py file and make sure you have the following to set dajax URLs and to load dajax statics js files Let us create a simple form based on our Dreamreal model to store it , using Ajax ( means no refresh ) At first , we need our Dreamreal form in myapp / form . py . Then we need an ajax . py file in our application : myapp / ajax . py . That ' s where is our logic , that ' s where we put the function that will be saving our form then return the popup Now let ' s create the dreamreal . html template , which has our form Add the view that goes with the template in myapp / views . py Add the corresponding URL in myapp / urls . py Now let ' s add the necessary in our template to make the Ajax work At the top of the file add And in the section of our dreamreal . html template add We are using the JQuery library for this example , so add The Ajax function that will be called on click Note that you need the " jquery - . . . min . js " in your static files directory , and also the jquery . dajax . core . js . To make sure all dajax static files are served under your static directory , run Sometimes the jquery . dajax . core . js can be missing , if that happens , just download the source and take that file and put it under your static folder . You will get to see the following screen , upon accessing / myapp / dreamreal / On submit , you will get the following screen