<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>فصل بیستم  on کتاب Python Crash Course</title>
		<link>https://python.iotwithiman.com/docs/part02/ch20/</link>
		<description>Recent content in فصل بیستم  on کتاب Python Crash Course</description>
		<generator>Hugo</generator>
		<language>fa-IR</language>
		
		
		
		
			<atom:link href="https://python.iotwithiman.com/docs/part02/ch20/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>شکل‌دهی و استقرار</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p01/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p01/</guid>
				<description>&lt;p&gt;سایت Learning Log اکنون کاملاً کارآمد است امّا هیچ شکل و سیاقی ندارد و روی ماشین محلی شما اجرا می‌شود. در این فصل پروژه را به شکلی ساده امّا حرفه‌ای درمی‌آوریم و سپس آن را روی سرور در حال اجرا مستقر می‌کنیم تا هر کس در هر جای دنیا بتواند حساب کاربری بسازد و از آن استفاده کند.&lt;/p&gt;&#xA;&lt;p&gt;برای شکل‌دهی به سایت از کتابخانه‌ی Bootstrap استفاده می‌کنیم که مجموعه‌ای از ابزارها برای سر و شکل دادن به برنامه‌های کاربردی تحت وب است تا آن‌ها در افزاره‌های مدرن حرفه‌ای به نظر برسند، از نمایشگرهای تخت بزرگ گرفته تا گوشی‌های هوشمند. برای چنین کاری از برنامه‌ی django-bootstrap4 کمک می‌گیریم تا علاوه بر هدف اصلی خود، در کار کردن با برنامه‌هایی که دیگر توسعه‌دهندگان جانگو ساخته‌اند تجربه کسب کنید.&lt;/p&gt;</description>
			</item>
			<item>
				<title>شکل دادن به پروژه</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p02/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p02/</guid>
				<description>&lt;p&gt;ما عمداً تا الان به شکل و قیافه‌ی سایت توجّهی نکردیم تا ابتدا روی کارآمدی سایت تمرکز کرده باشیم. این راه خوبی برای توسعه دادن است زیرا یک برنامه تنها زمانی سودمند است که کار کند. البته به محض اطمینان از کارایی، ظاهر آن حیاتی می‌شود تا افراد به استفاده از آن تمایل داشته باشند.&lt;/p&gt;&#xA;&lt;p&gt;در این بخش برنامه‌ی django-bootstrap4 را معرّفی می‌کنم و به شما نشان می‌دهم که چگونه می‌توان آن را در یک پروژه تجمیع کرد تا برای استقرار آماده شود.&lt;/p&gt;</description>
			</item>
			<item>
				<title>تغییر دادن base.html</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p03/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p03/</guid>
				<description>&lt;p&gt;باید برای جای دادن قالب بوت‌استرپ در قالب base.html آن را تغییر داد. فایل base.html جدید را بخش به بخش معرّفی می‌کنم.&lt;/p&gt;&#xA;&lt;h2 id=&#34;تعیین-سربرگهای-html&#34;&gt;تعیین سربرگ‌های HTML&lt;/h2&gt;&#xA;&lt;p&gt;اوّلین تغییری که در base.html ایجاد می‌کنیم تعریف&lt;span class=&#34;fn-ref&#34; data-fn=&#34;174&#34;&gt;&lt;sup&gt;174&lt;/sup&gt;&lt;/span&gt;&#xA; سربرگ‌های HTML در این فایل است تا هر گاه صفحه‌ی Learning Log باز بود مرورگر در نوار عنوان خود نام سایت را نمایش دهد. علاوه بر این تعدادی از نیازمندی‌های مربوط به به‌کارگیری بوت‌استرپ در قالب‌های خود را نیز اضافه می‌کنیم. هر آن‌چه در base.html وجود دارد پاک کنید و کد زیر را جایگزین کنید:&lt;/p&gt;</description>
			</item>
			<item>
				<title>تعریف کردن نوار پیمایش</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p04/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p04/</guid>
				<description>&lt;p&gt;کدی که نوار پیمایش را در بالای صفحه تعریف می‌کند کمی طولانی است زیرا این نوار باید در صفحه‌های کم‌عرض گوشی و نمایشگرهای رومیزی عریض به درستی کار کند. کار بر روی نوار پیمایش را در چند بخش ادامه می‌دهیم.&lt;/p&gt;&#xA;&lt;p&gt;این اوّلین بخش نوار پیمایش است:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--snip--&#xA;&amp;lt;/head&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;&amp;lt;nav class=&amp;#34;navbar navbar-expand-md navbar-light bg-light mb-4 border&amp;#34;&amp;gt;&#xA;  &amp;lt;a class=&amp;#34;navbar-brand&amp;#34; href=&amp;#34;{% url &amp;#39;learning_logs:index&amp;#39;%}&amp;#34;&amp;gt;&#xA;    Learning Log&amp;lt;/a&amp;gt;&#xA;&amp;lt;button class=&amp;#34;navbar-toggler&amp;#34; type=&amp;#34;button&amp;#34; data-toggle=&amp;#34;collapse&amp;#34;&#xA;    data-target=&amp;#34;#navbarCollapse&amp;#34; aria-controls=&amp;#34;navbarCollapse&amp;#34;&#xA;    aria-expanded=&amp;#34;false&amp;#34; aria-label=&amp;#34;Toggle navigation&amp;#34;&amp;gt;&#xA;    &amp;lt;span class=&amp;#34;navbar-toggler-icon&amp;#34;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;اوّلین عنصر، تگ گشایش &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; است (۱). &lt;em&gt;بدنه‌ی&lt;/em&gt; یک فایل HTML دربردارنده‌ی محتویّا&lt;span class=&#34;fn-ref&#34; data-fn=&#34;175&#34;&gt;&lt;sup&gt;175&lt;/sup&gt;&lt;/span&gt;&#xA;تی است که کاربران بر روی صفحه خواهند دید. در ۲ یک عنصر &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; وجود دارد که نشانگر بخش پیوندهای پیمایش صفحه است. سیاق هر چه که داخل این عنصر باشد مطابق قواعد شکل‌دهی بوت‌استرپ تعیین می‌شود که با انتخاب‌گرهای &lt;code&gt;navbar&lt;/code&gt;، &lt;code&gt;navbar-expand-md&lt;/code&gt; و دیگر موارد مشخّص شده‌اند. یک &lt;em&gt;انتخاب‌گر&lt;/em&gt; تعیین می‌کند که مجموعه‌ای از قوانین شکل‌دهی به کدام عنصرها در صفحه اعمال شوند. انتخاب‌گرهای &lt;code&gt;navbar-light&lt;/code&gt; و &lt;code&gt;bg-light&lt;/code&gt; پس‌زمینه‌ی نوار پیمایش را به رنگ روشن درمی‌آورند. &lt;code&gt;mb&lt;/code&gt; در &lt;code&gt;mb-4&lt;/code&gt; سرواژه‌ی &lt;em&gt;margin-bottom (حاشیه‌ی پایین)&lt;/em&gt; است؛ این انتخاب‌گر وجود یک فاصله‌ی کوچک بین نوار پیمایش و دیگر اجزای صفحه را تضمین می‌کند. انتخاب‌گر &lt;code&gt;border&lt;/code&gt; یک لبه‌ی نازک به پس‌زمینه‌ی روشن اضافه می‌کند تا آن را کمی از باقی قسمت‌های صفحه متمایز کند.&lt;/p&gt;</description>
			</item>
			<item>
				<title>تعریف قسمت اصلی صفحه</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p05/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p05/</guid>
				<description>&lt;p&gt;هنوز موارد اندکی مانده تا به base.html اضافه کنیم. باید دو بلوک اضافه کنیم تا صفحه‌های جداگانه بتوانند از آن‌ها برای قرار دادن محتوای مخصوص به خود استفاده کنند.&lt;/p&gt;&#xA;&lt;p&gt;باقی base.html قسمت اصلی صفحه را در برمی‌گیرد:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--snip--&#xA;&amp;lt;/nav&amp;gt;&#xA;&amp;lt;main role=&amp;#34;main&amp;#34; class=&amp;#34;container&amp;#34;&amp;gt;&#xA;    &amp;lt;div class=&amp;#34;pb-2 mb-2 border-bottom&amp;#34;&amp;gt;&#xA;{% block page_header %}{% endblock page_header %}&#xA;    &amp;lt;/div&amp;gt;&#xA;    &amp;lt;div&amp;gt;&#xA;{% block content %}{% endblock content %}&#xA;    &amp;lt;/div&amp;gt;&#xA;&amp;lt;/main&amp;gt;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;در ۱ یک تگ &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; باز می‌کنیم. عنصر &lt;em&gt;بخش اصلی&lt;/em&gt; برای نمایش برجسته‌ترین بخش بدنه‌ی صفحه‌های شما استفاده می‌شود. اینجا از انتخاب‌گر &lt;code&gt;container&lt;/code&gt; بوت‌استرپ بهره می‌گیریم که راهی ساده برای گروه‌بندی عنصرها در یک صفحه است. دو عنصر &lt;code&gt;div&lt;/code&gt; در آن قرار می‌دهیم.&lt;/p&gt;</description>
			</item>
			<item>
				<title>شکل‌دهی به صفحه‌ی خانه به کمک جامباترون</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p06/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p06/</guid>
				<description>&lt;p&gt;برای به‌روزرسانی صفحه‌ی خانه از یک عنصر بوت‌استرپ&lt;span class=&#34;fn-ref&#34; data-fn=&#34;181&#34;&gt;&lt;sup&gt;181&lt;/sup&gt;&lt;/span&gt;&#xA; به نام &lt;em&gt;جامباترون&lt;/em&gt; استفاده می‌کنیم. این عنصر جعبه‌ی بزرگی است که از دیگر بخش‌های صفحه متمایز بوده و می‌تواند هر چیزی را که بخواهید دربربگیرد. به طور معمول از این عنصر در صفحه‌های آغازین پروژه و برای بیان شرحی مختصر از آن استفاده می‌شود و می‌تواند بیننده را به انجام عملی در سایت دعوت کند.&lt;/p&gt;&#xA;&lt;p&gt;این فایل index.html بازبینی‌شده است:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{% extends &amp;#34;learning_logs/base.html&amp;#34; %}&#xA;&#xA;{% block page_header %}&#xA;&amp;lt;div class=&amp;#34;jumbotron&amp;#34;&amp;gt;&#xA;&amp;lt;h1 class=&amp;#34;display-3&amp;#34;&amp;gt;Track your learning.&amp;lt;/h1&amp;gt;&#xA;&amp;lt;p class=&amp;#34;lead&amp;#34;&amp;gt;Make your own Learning Log, and keep a list of the&#xA;topics you&amp;#39;re learning about. Whenever you learn something new&#xA;about a topic, make an entry summarizing what you&amp;#39;ve learned.&amp;lt;/p&amp;gt;&#xA;&amp;lt;a class=&amp;#34;btn btn-lg btn-primary&amp;#34; href=&amp;#34;{% url &amp;#39;users:register&amp;#39; %}&amp;#34;&#xA;role=&amp;#34;button&amp;#34;&amp;gt;Register &amp;amp;raquo;&amp;lt;/a&amp;gt;&#xA;&amp;lt;/div&amp;gt;&#xA;{% endblock page_header %}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;در ۱ به جانگو می‌گوییم که آن‌چه در قسمت &lt;code&gt;page_header&lt;/code&gt; قرار می‌گیرد تعریف کند. جامباترون در عمل یک عنصر &lt;code&gt;div&lt;/code&gt; است که تعدادی دستور شیوه‌دهی به آن اعمال می‌شود (۲). انتخاب‌گر &lt;code&gt;jumbotron&lt;/code&gt; این دستورهای شیوه‌دهی را از کتابخانه‌ی بوت‌استرپ بر این عنصر اعمال می‌کند.&lt;/p&gt;</description>
			</item>
			<item>
				<title>آراستن صفحه‌ی ورود</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p07/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p07/</guid>
				<description>&lt;p&gt;ما ظاهر کلی صفحه‌ی ورود را بازنگری کردیم امّا هنوز به فرم ورود نپرداخته‌ایم. حال با تغییر دادن فایل login.html کاری می‌کنیم که این فرم مشابه بخش‌های صفحه به نظر بیاید:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{% extends &amp;#34;learning_logs/base.html&amp;#34; %}&#xA;{% load bootstrap4 %}&#xA;&#xA;{% block page_header %}&#xA;  &amp;lt;h2&amp;gt;Log in to your account.&amp;lt;/h2&amp;gt;&#xA;{% endblock page_header %}&#xA;&#xA;{% block content %}&#xA;  &amp;lt;form method=&amp;#34;post&amp;#34; action=&amp;#34;{% url &amp;#39;users:login&amp;#39; %}&amp;#34; class=&amp;#34;form&amp;#34;&amp;gt;&#xA;{% csrf_token %}&#xA;{% bootstrap_form form %}&#xA;{% buttons %}&#xA;  &amp;lt;button name=&amp;#34;submit&amp;#34; class=&amp;#34;btn btn-primary&amp;#34;&amp;gt;Log in&amp;lt;/button&amp;gt;&#xA;{% endbuttons %}&#xA;&amp;lt;input type=&amp;#34;hidden&amp;#34; name=&amp;#34;next&amp;#34;&#xA;   value=&amp;#34;{% url &amp;#39;learning_logs:index&amp;#39; %}&amp;#34; /&amp;gt;&#xA;  &amp;lt;/form&amp;gt;&#xA;{% endblock content %}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;در ۱ تگ‌های قالبی bootstrap4 را وارد قالب خود می‌کنیم. در ۲ قسمت &lt;code&gt;page_header&lt;/code&gt; را تعریف می‌کنیم که به کاربر توضیح می‌دهد این صفحه چه می‌کند. دقّت کنید که بخش &lt;code&gt;{% if form.errors %}&lt;/code&gt; را از قالب حذف کرده‌ایم زیرا django-bootstrap4 به طور خودکار خطاهای فرم را مدیریّت می‌کند.&lt;/p&gt;</description>
			</item>
			<item>
				<title>شکل دادن به صفحه‌ی موضوعات</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p08/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p08/</guid>
				<description>&lt;p&gt;حال باید مطمئن شویم که صفحه‌های مربوط به دیدن اطّلاعات هم به خوبی شکل گرفته‌اند، کار را از صفحه‌ی موضوعات شروع می‌کنیم:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{% extends &amp;#34;learning_logs/base.html&amp;#34; %}&#xA;&#xA;{% block page_header %}&#xA;  &amp;lt;h1&amp;gt;Topics&amp;lt;/h1&amp;gt;&#xA;{% endblock page_header %}&#xA;&#xA;{% block content %}&#xA;  &amp;lt;ul&amp;gt;&#xA;{% for topic in topics %}&#xA;  &amp;lt;li&amp;gt;&amp;lt;h3&amp;gt;&#xA;    &amp;lt;a href=&amp;#34;{% url &amp;#39;learning_logs:topic&amp;#39; topic.id %}&amp;#34;&amp;gt;{{ topic }}&amp;lt;/a&amp;gt;&#xA;  &amp;lt;/h3&amp;gt;&amp;lt;/li&amp;gt;&#xA;{% empty %}&#xA;  &amp;lt;li&amp;gt;&amp;lt;h3&amp;gt;No topics have been added yet.&amp;lt;/h3&amp;gt;&amp;lt;/li&amp;gt;&#xA;{% endfor %}&#xA;  &amp;lt;/ul&amp;gt;&#xA;  &amp;lt;h3&amp;gt;&amp;lt;a href=&amp;#34;{% url &amp;#39;learning_logs:new_topic&amp;#39; %}&amp;#34;&amp;gt;Add a new topic&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&#xA;{% endblock content %}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;اینجا به تگ &lt;code&gt;{% load bootstrap4 %}&lt;/code&gt; دیگری احتیاجی نداریم زیرا در این فایل از هیچ‌کدام از تگ‌های قالبی bootstrap4 استفاده نمی‌کنیم. عنوان Topics را به بخش &lt;code&gt;page_header&lt;/code&gt; منتقل می‌کنیم و به جای استفاده از یک تگ ساده‌ی پاراگراف، به آن شکل عنوان می‌دهیم (۱). هر موضوع را به شکل یک عنصر &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; درمی‌آوریم تا در صفحه کمی بزرگ‌تر به چشم بیاید (۲) و همین کار را برای پیوند افزودن موضوع جدید انجام می‌دهیم.&lt;/p&gt;</description>
			</item>
			<item>
				<title>شکل دادن به مطالب در صفحه‌ی موضوع‌ها</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p09/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p09/</guid>
				<description>&lt;p&gt;صفحه‌ی موضوع‌ها بیشترین محتوا را در بین صفحه‌های سایت دارد پس کمی کار بیشتری می‌برد. از مولفه‌ی کارت بوت‌استرپ استفاده می‌کنیم تا هر موضوع متمایز به نظر بیاید. &lt;em&gt;کارت&lt;/em&gt; یک &lt;code&gt;div&lt;/code&gt; با مجموعه‌ای از شیوه‌های منعطف و ازپیش‌تعریف‌شده است که برای نمایش مطالب مرتبط با یک موضوع عالی هستند:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{% extends &amp;#39;learning_logs/base.html&amp;#39; %}&#xA;&#xA;{% block page_header %}&#xA;  &amp;lt;h3&amp;gt;{{ topic }}&amp;lt;/h3&amp;gt;&#xA;{% endblock page_header %}&#xA;&#xA;{% block content %}&#xA;  &amp;lt;p&amp;gt;&#xA;  &#x9;&amp;lt;a href=&amp;#34;{% url &amp;#39;learning_logs:new_entry&amp;#39; topic.id %}&amp;#34;&amp;gt;Add new entry&amp;lt;/a&amp;gt;&#xA;  &amp;lt;/p&amp;gt;&#xA;  {% for entry in entries %}&#xA;&amp;lt;div class=&amp;#34;card mb-3&amp;#34;&amp;gt;&#xA;  &#x9;   &amp;lt;h4 class=&amp;#34;card-header&amp;#34;&amp;gt;&#xA;        {{ entry.date_added|date:&amp;#39;M d, Y H:i&amp;#39; }}&#xA;        &amp;lt;small&amp;gt;&amp;lt;a href=&amp;#34;{% url &amp;#39;learning_logs:edit_entry&amp;#39; entry.id %}&amp;#34;&amp;gt;&#xA;        edit entry&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&#xA;   &amp;lt;/h4&amp;gt;&#xA;   &amp;lt;div class=&amp;#34;card-body&amp;#34;&amp;gt;&#xA;      {{ entry.text|linebreaks }}&#xA;  &#x9;   &amp;lt;/div&amp;gt;&#xA; &amp;lt;/div&amp;gt;&#xA;  {% empty %}&#xA;&amp;lt;p&amp;gt;There are no entries for this topic yet.&amp;lt;/p&amp;gt;&#xA;  {% endfor %}&#xA;{% endblock content %}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ابتدا در ۱ موضوع را داخل بخش &lt;code&gt;page_header&lt;/code&gt; قرار می‌دهیم. سپس فهرست نامرتّبی را که قبلاً در این قالب به کار برده‌ایم، حذف می‌کنیم. به جای آن هر مطلب را به یک عضو فهرست تبدیل می‌کنیم و یک عنصر &lt;code&gt;div&lt;/code&gt; با انتخاب‌گر &lt;code&gt;card&lt;/code&gt; در ۲ درست می‌کنیم. این کارت دو عنصر داخلی دارد: یکی که برچسب زمانی و پیوند ویرایش مطلب را نگه می‌دارد و دیگری بدنه‌ی مطلب را در برمی‌گیرد.&lt;/p&gt;</description>
			</item>
			<item>
				<title>استقرار پروژه</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p10/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p10/</guid>
				<description>&lt;p&gt;اکنون که یک پروژه با قیافه‌ای حرفه‌ای داریم بیایید آن را روی یک سرور در حال کار مستقر کنیم تا هر شخص متّصل به اینترنت بتواند از آن استفاده کند. ما از Heroku استفاده می‌کنیم که یک بستر مبتنی بر وب است و به شما امکان می‌دهد که استقرار نرم‌افزارهای تحت وب خود را مدیریّت کنید. ما پروژه‌ی Learning Log را برپا کرده و روی هروکو اجرا می‌کنیم.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ساختن-یک-حساب-کاربری-هروکو&#34;&gt;ساختن یک حساب کاربری هروکو&lt;/h2&gt;&#xA;&lt;p&gt;برای ساختن یک حساب کاربری به &lt;a href=&#34;https://heroku.com/&#34;&gt;https://heroku.com/&lt;/a&gt; بروید و روی یکی از پیوندهای ثبت نام کلیک کنید. ساختن حساب رایگان است، هروکو یک گزینه‌ی رایگان دارد که به شما اجازه می‌دهد پروژه‌های خود را پیش از استقرار کامل در یک محیط زنده آزمایش کنید.&lt;/p&gt;</description>
			</item>
			<item>
				<title>ساختن فایل‌های پیکربندی</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p11/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p11/</guid>
				<description>&lt;h2 id=&#34;ساختن-یک-فایل-requirementstxt&#34;&gt;ساختن یک فایل requirements.txt&lt;/h2&gt;&#xA;&lt;p&gt;هروکو باید بداند که پروژه‌ی ما روی چه بسته‌هایی بنا شده است بنابراین از pip برای تولید فایلی شامل آن‌ها استفاده می‌کنیم. دوباره در یک محیط مجازی فعّال فرمان زیر را صادر کنید:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-1&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-1&#34;&gt;1&lt;/a&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(ll_env)learning_log$ pip freeze &amp;gt; requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;دستور &lt;code&gt;freeze&lt;/code&gt; از pip می‌خواهد که نام تمام بسته‌هایی که در حال حاضر در پروژه‌ی ما نصب شده در فایل &lt;code&gt;requirements.txt&lt;/code&gt; بنویسد. این فایل را باز کنید تا نام و نسخه‌ی بسته‌های نصب‌شده در پروژه‌ی خود را ببینید:&lt;/p&gt;</description>
			</item>
			<item>
				<title>استفاده از Git برای ردگیری فایل‌های پروژه</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p12/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p12/</guid>
				<description>&lt;p&gt;چنان‌که در فصل ۱۷ گفتیم گیت یک برنامه‌ی کنترل نسخه است که به شما ا&lt;span class=&#34;fn-ref&#34; data-fn=&#34;184&#34;&gt;&lt;sup&gt;184&lt;/sup&gt;&lt;/span&gt;&#xA;مکان می‌دهد هر بار که ویژگی جدیدی را با موفقیّت پیاده می‌کنید تصویری لحظه‌ای از کد بگیرید. اگر هر مشکلی پیش آمد می‌توانید به آخرین تصویری که کار می‌کرده برگردید؛ برای مثال اگر هنگام کار کردن روی ویژگی جدید به طور اتّفاقی ایرادی ایجاد کردید. به هر کدام از این تصویرها یک &lt;em&gt;سپارش&lt;/em&gt; می‌گویند.&lt;/p&gt;</description>
			</item>
			<item>
				<title>ارسال به هروکو و برپا کردن پایگاه داده</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p13/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p13/</guid>
				<description>&lt;h2 id=&#34;ارسال-به-هروکو&#34;&gt;ارسال به هروکو&lt;/h2&gt;&#xA;&lt;p&gt;در نهایت می‌خواهیم پروژه را به هروکو بفرستیم. در یک محیط فعّال مجازی فرمان‌های زیر را وارد کنید:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-1&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-1&#34;&gt; 1&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-2&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-2&#34;&gt; 2&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-3&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-3&#34;&gt; 3&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-4&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-4&#34;&gt; 4&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-5&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-5&#34;&gt; 5&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-6&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-6&#34;&gt; 6&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-7&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-7&#34;&gt; 7&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-8&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-8&#34;&gt; 8&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-9&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-9&#34;&gt; 9&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-10&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-10&#34;&gt;10&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-11&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-11&#34;&gt;11&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-12&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-12&#34;&gt;12&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-13&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-13&#34;&gt;13&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-14&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-14&#34;&gt;14&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-15&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-15&#34;&gt;15&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-16&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-16&#34;&gt;16&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-17&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-17&#34;&gt;17&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-18&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-18&#34;&gt;18&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-19&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-19&#34;&gt;19&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-20&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-20&#34;&gt;20&lt;/a&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(ll_env)learning_log$ heroku login&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;heroku: Press any key to open up the browser to login or q to exit:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Logging in... done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Logged in as eric@example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(ll_env)learning_log$ heroku create&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Creating app... done,  secret-lowlands-82594&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;https://secret-lowlands-82594.herokuapp.com/ |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;https://git.heroku.com/secret-lowlands-82594.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(ll_env)learning_log$ git push heroku master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--snip--&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: -----&amp;gt; Launching...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: Released v5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: https://secret-lowlands-82594.herokuapp.com/ deployed to Heroku&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: Verifying deploy... done.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;To https://git.heroku.com/secret-lowlands-82594.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  * [new branch] master -&amp;gt; master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(ll_env)learning_log$&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;ابتدا فرمان &lt;code&gt;heroku login&lt;/code&gt; را وارد می‌کنید که شما را به صفحه‌ای در مرورگرتان می‌برد تا در آنجا به حساب هروکوی خود وارد شوید (۱). سپس به هروکو می‌گویید که یک پروژه‌ی خالی درست کند (۲). هروکو نامی متشکّل از دو کلمه و یک عدد درست می‌کند؛ می‌توانید آن را بعداً عوض کنید. سپس دستور &lt;code&gt;git push heroku master&lt;/code&gt; را وارد می‌کنیم (۳) که به گیت می‌گوید شاخه‌ی اصلی پروژه را در مخزنی که هروکو ساخته بفرست. هروکو با استفاده از این فایل‌ها پروژه را در سرورهای خود می‌سازد. در ۴ آدرسی قرار دارد که از آن برای دسترسی به پروژه‌ی در حال کار استفاده می‌کنیم و می‌توانیم آن را به همراه نام پروژه عوض کنیم.&lt;/p&gt;</description>
			</item>
			<item>
				<title>بهبود استقرار هروکو</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p14/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p14/</guid>
				<description>&lt;p&gt;اکنون فرآیند استقرار را با ساختن یک ابرکاربر بهبود می‌بخشیم، درست همانند آن چه به صورت محلّی کردیم. همچنین پروژه را با تغییر تنظیم DEBUG به False امن‌تر می‌کنیم تا کاربران در پیام‌های خطا هیچ اطّلاعات اضافی‌تری که با آن‌ها در حمله به سرور کمک می‌کند، مشاهده نکنند.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ساختن-یک-ابرکاربر-در-هروکو&#34;&gt;ساختن یک ابرکاربر در هروکو&lt;/h2&gt;&#xA;&lt;p&gt;شما قبلاً دیده‌اید که می‌توانیم دستورهای یک‌طرفه را به کمک فرمان &lt;code&gt;heroku run&lt;/code&gt; اجرا کنیم. امّا علاوه بر این شما می‌توانید هنگامی که با دستور &lt;code&gt;heroku run bash&lt;/code&gt; به سرور هروکو متّصل شده‌اید، دستورها را با باز کردن یک نشست ترمینال Bash اجرا کنید. بَش یک زبان است که در بسیاری از ترمینال‌های لینوکسی اجرا می‌شود. ما از نشست ترمینال بَش برای ساختن یک ابرکاربر استفاده می‌کنیم تا بتوانیم روی برنامه‌ی در حال کار به سایت مدیر دسترسی داشته باشیم:&lt;/p&gt;</description>
			</item>
			<item>
				<title>امن کردن پروژه‌ی در حال کار</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p15/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p15/</guid>
				<description>&lt;p&gt;یک ایراد امنیّتی چشم‌گیر در نحوه‌ی استقرار فعلی پروژه‌ی ما این است: تنظیم &lt;code&gt;DEBUG=True&lt;/code&gt; در &lt;code&gt;settings.py&lt;/code&gt; که هنگام بروز خطا پیام‌های اشکال‌زدایی را نمایش می‌دهد. صفحه‌های خطای جانگو هنگام توسعه پروژه اطّلاعاتی حیاتی برای اشکال‌زدایی در اختیار شما قرار می‌دهند؛ با این حال اگر آن‌ها را در سرور در حال کار فعّال بگذاریم به مهاجمان اطّلاعاتی بیش از اندازه می‌دهند.&lt;/p&gt;&#xA;&lt;p&gt;این که اطّلاعات اشکال‌زدایی روی سرور زنده نمایش دا&lt;span class=&#34;fn-ref&#34; data-fn=&#34;188&#34;&gt;&lt;sup&gt;188&lt;/sup&gt;&lt;/span&gt;&#xA;ده شوند یا نه با تنظیم یک متغیّر محیطی کنترل می‌شوند. &lt;em&gt;متغیّرهای محیطی&lt;/em&gt; مقدارهایی هستند که در یک محیط خاص تنظیم می‌شوند. این یکی از راه‌های نگهداری اطّلاعات حسّاس روی سرور است: آن‌ها را از دیگر کدهای پروژه جدا می‌کنیم.&lt;/p&gt;</description>
			</item>
			<item>
				<title>ساختن صفحه‌های خطای شخصی</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p16/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p16/</guid>
				<description>&lt;p&gt;در فصل ۱۹ پروژه را طوری پیکربندی کردیم که اگر کاربر صفحه‌ای را درخواست کرد که وجود نداشت یا نوشته‌ای را که متعلّق به او نبود درخواست کرد، یک خطای 404 برگرداند. شما احتمالاً تا الان به برخی خطاهای سرور 500 (خطاهای داخلی) برخورده‌اید. خطای 404 معمولاً به این معنی است که کد جانگو درست است امّا چیزی که درخواست می‌شود وجود ندارد؛ خطای 500 به طور معمول به این معنی است که در کدی که نوشته‌اید خطایی وجود دارد، مانند خطایی در یک تابع در &lt;code&gt;views.py&lt;/code&gt;. هم‌اکنون جانگو همان صفحه‌ی خطای عمومی را در هر دو وضعیّت برمی‌گرداند. امّا می‌توانیم قالب صفحه‌های خطای 404 و 500 خودمان را بنویسیم که به ظاهر کلّی پروژه می‌خورد. این قالب‌ها باید در پوشه‌ی ریشه‌ی قالب‌ها قرار بگیرند.&lt;/p&gt;</description>
			</item>
			<item>
				<title>استفاده از get_object_or_404()</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p17/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p17/</guid>
				<description>&lt;p&gt;تا اینجا اگر کاربر موضوع یا مطلبی را که وجود ندارد به صورت دستی درخواست کند به خطای سرور 500 برمی‌خورد. جانگو سعی می‌کند صفحه‌ای را که وجود ندارد بسازد امّا چون برای این کار اطّلاعات کافی ندارد خطای 500 ایجاد می‌شود. این وضعّیت به طور دقیق‌تر شبیه به خطای 404 است و می‌توانیم این رفتار را به کمک تابع میان‌بر &lt;code&gt;get_object_or_404()&lt;/code&gt; جانگو پیاده‌سازی کنیم. این تابع تلاش می‌کند که شیء درخواستی را از پایگاه داده بگیرد، امّا اگر وجود نداشت یک استثنای 404 ایجاد می‌کند. این تابع را در &lt;code&gt;views.py&lt;/code&gt; وارد می‌کنیم و آن را به جای &lt;code&gt;get()&lt;/code&gt; می‌گذاریم:&lt;/p&gt;</description>
			</item>
			<item>
				<title>توسعه‌های آینده و نکته‌های پایانی</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p18/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p18/</guid>
				<description>&lt;p&gt;شما ممکن است بخواهید پس از انتقال اوّلیّه‌ی پروژه به سرور آن را توسعه دهید یا پروژه‌های خود را برای استقرار توسعه دهید. فرآیندی تقریباً یکسان برای به‌روزرسانی پروژه‌ها وجود دارد.&lt;/p&gt;&#xA;&lt;p&gt;ابتدا هر تغییری که مورد نیاز است در پروژه‌ی محلّی خود ایجاد می‌کنید. اگر این تغییرات به ایجاد فایل‌های جدید منجر می‌شود آن‌ها را با دستور &lt;code&gt;git add .&lt;/code&gt; به مخزن گیت اضافه کنید. (مطمئن شوید که نقطه را در پایان دستور می‌آورید.) هر تغییری در انتقال پایگاه داده به این دستور نیاز دارد چون در هر انتقال یک فایل انتقال جدید ساخته می‌شود.&lt;/p&gt;</description>
			</item>
			<item>
				<title>خلاصه</title>
				<link>https://python.iotwithiman.com/docs/part02/ch20/p19/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://python.iotwithiman.com/docs/part02/ch20/p19/</guid>
				<description>&lt;p&gt;در این فصل آموختید که چگونه به کمک کتابخانه‌ی بوت‌استرپ و برنامه‌ی django-bootstrap4 پروژه‌های خود ظاهری ساده امّا حرفه‌ای بدهید. به کمک بوت‌استرپ شکل و شیوه‌ای که انتخاب می‌کنید تقریباً روی هر افزاره‌ای که مردم برای دیدن پروژه‌ی شما استفاده می‌کنند به یک شکل به نظر می‌آید.&lt;/p&gt;&#xA;&lt;p&gt;شما درباره‌ی قالب‌های بوت‌استرپ آموختید و از قالب Navbar static برای ساختن یک شکل و ظاهر ساده برای Learning Log استفاده کردید. از جامباترون برای متمایز کردن پیام صفحه‌ی خانه استفاده کردید و آموختید که چگونه تمام صفحه‌ها را به یک صورت شکل دهید.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
