<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.0">Jekyll</generator><link href="https://unprettycoder.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://unprettycoder.github.io/" rel="alternate" type="text/html" /><updated>2020-09-21T12:29:18+00:00</updated><id>https://unprettycoder.github.io/feed.xml</id><title type="html">CodeLab</title><subtitle>UnprettyCoder's Blog</subtitle><entry><title type="html">2013 CPA 경영학 12번 문제 풀이 (변형)</title><link href="https://unprettycoder.github.io/CPA-2013-management-12/" rel="alternate" type="text/html" title="2013 CPA 경영학 12번 문제 풀이 (변형)" /><published>2020-09-20T00:00:00+00:00</published><updated>2020-09-20T00:00:00+00:00</updated><id>https://unprettycoder.github.io/CPA-2013-management-12</id><content type="html" xml:base="https://unprettycoder.github.io/CPA-2013-management-12/">&lt;h2 id=&quot;2013-cpa-management-part-12번-풀이&quot;&gt;2013 CPA Management part 12번 풀이&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;㈜한국은 1월부터 6월까지 6개월 동안의 월별 생산계획을 수립하였다. 생산계획에 따르면 외주를 주지 않고, 매월 동일한 양의 제품을 생산하며, 수요 변동은 재고와 추후납품으로 흡수한다. 다음의 표는 6개월 동안의 제품 수요이다. &lt;strong&gt;계획 시작시점인 1월의 기초재고는 0이고, 생산계획에 따른 6월의 기말재고는 0이 된다.&lt;/strong&gt; 매월 발생되는 재고에 대해 다음 달 납품시점까지의 재고유지비용은 개당 1만원이고 다음 달에 추후납품을 하기 위해서는 개당 5만원의 비용이 발생한다. ㈜한국의 생산계획에 따라 발생하는 6개월 동안의 재고관련 비용(재고유지비용과 추후납품비용의 합)의 최소값과 가장 가까운 것은? (단, ㈜한국은 제품들을 생산된 순서에 따라 순차적으로 납품하고, 미납주문을 우선적으로 충족시킨다.)&lt;/li&gt;
&lt;/ol&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;월&lt;/th&gt;
      &lt;th&gt;1&lt;/th&gt;
      &lt;th&gt;2&lt;/th&gt;
      &lt;th&gt;3&lt;/th&gt;
      &lt;th&gt;4&lt;/th&gt;
      &lt;th&gt;5&lt;/th&gt;
      &lt;th&gt;6&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;수요(단위:개)&lt;/td&gt;
      &lt;td&gt;100&lt;/td&gt;
      &lt;td&gt;200&lt;/td&gt;
      &lt;td&gt;200&lt;/td&gt;
      &lt;td&gt;300&lt;/td&gt;
      &lt;td&gt;300&lt;/td&gt;
      &lt;td&gt;100&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;① 533만원  ② 550만원  ③ 600만원 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;④ 800만원&lt;/code&gt;  ⑤ 1,200만원&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;solve&quot;&gt;Solve&lt;/h3&gt;

&lt;p&gt;문제 자체는 매우 간단한 문제입니다. 문제 조건 중 &lt;strong&gt;기초재고 : 0, 기말재고 : 0&lt;/strong&gt;이 주어져 있기 때문이죠.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;월&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;1&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;2&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;3&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;4&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;5&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;6&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;수요(단위:개)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;100&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;300&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;300&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;100&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;생산량(단위:개)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;x&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;x&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;x&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;x&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;x&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;x&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;6개월 동안의 수요량 총합은 1,200입니다.&lt;/p&gt;

&lt;p&gt;기초재고가 0이고, 기말재고가 0이므로 월 최대생산량은 200개로 한정됩니다.&lt;/p&gt;

&lt;p&gt;문제에서 재고유지비용은 10,000/unit이고, 추후납품비용은 50,000/unit으로 주어져 있습니다.&lt;/p&gt;

&lt;p&gt;즉, &lt;strong&gt;재고고갈로 인한 추후납품비용이 과잉생산으로 인한 재고유지비용에 비해 High risk&lt;/strong&gt;라는 것을 알 수 있습니다.&lt;/p&gt;

&lt;p&gt;다소 과잉생산을 하여 재고유지비용을 지불하더라도 재고고갈은 피하는 것이 이득이겠죠?&lt;/p&gt;

&lt;p&gt;매우 &lt;strong&gt;상식적으로 현재는 월 최대생산량 200개를 최적생산량으로 생각&lt;/strong&gt;하고 추후납품비용을 최소화해야 할 것입니다.&lt;/p&gt;

\[x=200\]

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;월&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;1&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;2&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;3&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;4&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;5&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;6&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;수요(단위:개)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;100&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;300&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;300&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;100&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;생산량(단위:개)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;200&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;재고수준&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;100&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;100&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;100&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;재고고갈&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;100&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;재고유지비용&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$1,000,000&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$1,000,000&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$1,000,000&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;추후납품비용&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$0&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$5,000,000&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;$0&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;\(x=200\)일 때, 재고관련비용은 총 $8,000,000이 됩니다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;solve2-except-one-constraint&quot;&gt;Solve.2 [Except one constraint]&lt;/h3&gt;

&lt;p&gt;이렇게 하면 문제가 재미없기 때문에 &lt;strong&gt;기말재고가 0이라는 제약조건을 제외하고 생산계획을 수립&lt;/strong&gt;해보도록 하겠습니다.&lt;/p&gt;

&lt;p&gt;먼저 \(x\)의 범위를 나누어 생각해보도록 하겠습니다.&lt;/p&gt;

&lt;p&gt;순차적으로 한 시점 기준으로 재고가 남는 \(x\)와 재고고갈이 발생하는 \(x\)로 범위를 나누겠습니다.&lt;/p&gt;

&lt;h5 id=&quot;1월-수요량--100&quot;&gt;1월 (수요량 : 100)&lt;/h5&gt;

&lt;p&gt;1월에 발생할 수 있는 비용은 2가지입니다.&lt;/p&gt;

&lt;p&gt;\(x&amp;lt;100\) : 추후납품비용 \((100-x)\cdot 5\) -&amp;gt; 월말 재고 : 0&lt;/p&gt;

&lt;p&gt;\(x\ge100\) : 재고유지비용 \((x-100)\cdot 1\) -&amp;gt; 월말 재고 : \(x-100\)&lt;/p&gt;

&lt;p&gt;\(x&amp;lt;100\)인 경우는 더 이상 나눌 필요가 없겠죠? 이제 2월로 넘어가겠습니다.&lt;/p&gt;

&lt;h5 id=&quot;2월-수요량--200&quot;&gt;2월 (수요량 : 200)&lt;/h5&gt;

&lt;p&gt;2월에 발생할 수 있는 비용은 3가지이지만 2가지만 보겠습니다.(\(x&amp;lt;100\)인 경우 제외)&lt;/p&gt;

&lt;p&gt;\(100\le x\lt 150\) : 추후납품비용(월초 재고 \(x-100\)) \((300-2x)\cdot 5\)  -&amp;gt; 월말 재고 : 0&lt;/p&gt;

&lt;p&gt;\(x\ge 150\) : 재고유지비용(월초 재고 \(x-100\)) \((2x-300)\cdot1\) -&amp;gt; 월말 재고 : \(2x-300\)&lt;/p&gt;

&lt;h5 id=&quot;3월-수요량--200&quot;&gt;3월 (수요량 : 200)&lt;/h5&gt;

&lt;p&gt;3월 또한 마찬가지로 \(x\ge150\)인 경우만을 고려하겠습니다.&lt;/p&gt;

&lt;p&gt;\(150\le x\lt \frac{500}{3}\) : 추후납품비용(월초 재고 \(2x-300\)) \((500-3x)\cdot5\) -&amp;gt; 월말 재고 : 0&lt;/p&gt;

&lt;p&gt;\(x\ge\frac{500}{3}\) : 재고유지비용(월초 재고 \(2x-300\)) \((3x-500)\cdot1\) -&amp;gt; 월말 재고 : \(3x-500\)&lt;/p&gt;

&lt;h5 id=&quot;4월-수요량--300&quot;&gt;4월 (수요량 : 300)&lt;/h5&gt;

&lt;p&gt;4월 또한 \(x\ge\frac{500}{3}\)인 경우만 고려하겠습니다.&lt;/p&gt;

&lt;p&gt;\(\frac{500}{3}\le x\lt 200\) : 추후납품비용(월초 재고 \(3x-500\)) \((800-4x)\cdot5\) -&amp;gt; 월말 재고 : 0&lt;/p&gt;

&lt;p&gt;\(x\ge200\) : 재고유지비용(월초 재고 \(3x-500\)) \((4x-800)\cdot1\) -&amp;gt; 월말 재고 : \(4x-800\)&lt;/p&gt;

&lt;h5 id=&quot;5월-수요량--300&quot;&gt;5월 (수요량 : 300)&lt;/h5&gt;

&lt;p&gt;5월 또한 \(x\ge200\)인 경우만 고려합니다.&lt;/p&gt;

&lt;p&gt;\(200\le x\lt220\) : 추후납품비용(월초 재고 \(4x-800\)) \((1100-5x)\cdot5\) -&amp;gt; 월말 재고 : 0&lt;/p&gt;

&lt;p&gt;\(x\ge220\) : 재고유지비용(월초 재고 \(4x-800\)) \((5x-1100)\cdot1\) -&amp;gt; 월말 재고 : \(5x-1100\)&lt;/p&gt;

&lt;h5 id=&quot;6월-수요량--100&quot;&gt;6월 (수요량 : 100)&lt;/h5&gt;

&lt;p&gt;6월에는 특이한 현상이 발생합니다.&lt;/p&gt;

&lt;p&gt;\(x\ge200\)인 경우는 6월에 추후납품비용이 발생할 수 없는 것입니다. 그래서 5월에 재고고갈이 발생했다 할지라도 6월에는 다시 재고유지비용을 부담하게 됩니다.&lt;/p&gt;

&lt;p&gt;\(200\le x\lt220\)의 경우에 5월에 추후납품을 약속한 미납분을 6월 생산량에서 제외하고, 6월 수요를 충족시킨 후 남는 재고에 대해 재고유지비용이 발생해야 합니다.&lt;/p&gt;

&lt;p&gt;즉, \(200\le x\lt220\)일 때의 6월 재고유지비용은 아래와 같이 계산됩니다.&lt;/p&gt;

\[6월말\ 재고수준\ =\ 6월\ 생산량\ -(6월\ 수요량\ +\ 5월\ 미납분)\\
\ \ \ \ \ \ \ \ \  \ \ \ \ \ \ \ \ \ \ \ \ \ =\ x-(100+(1100-5x))=6x-1200\]

&lt;p&gt;\(x\ge220\) : 재고유지비용(월초 재고 \(5x-1100\)) \((6x-1200)\cdot1\)인 것은 당연하겠죠?&lt;/p&gt;

&lt;p&gt;이 전체 과정을 하나의 그림으로 표현해보겠습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../../assets/img/stock cost calculation.png&quot; alt=&quot;stock cost calculation&quot; /&gt;&lt;/p&gt;

&lt;p&gt;이를 가지고 \(x\) 각 범위에서 발생하는 재고관련비용을 계산하고 최적의 생산량을 찾아보겠습니다.&lt;/p&gt;

&lt;h4 id=&quot;calculate-optimal--x&quot;&gt;Calculate Optimal $ x$&lt;/h4&gt;

&lt;p&gt;Case \(x&amp;lt;100\) :&lt;/p&gt;

\[Total\ Cost=5\{(100-x)+(300-2x)+(500-3x)+(800-4x)+(1100-5x)+(1200-6x)\}=20000-105x\]

&lt;p&gt;Case \(100\le x\lt150\) :&lt;/p&gt;

\[Total\ Cost=(x-100)+5\{(300-2x)+(500-3x)+(800-4x)+(1100-5x)+(1200-6x)\}=19400-99x\]

&lt;p&gt;Case \(150\le x\lt\frac{500}{3}\) :&lt;/p&gt;

\[Total\ Cost=(x-100)+(2x-300)+5\{(500-3x)+(800-4x)+(1100-5x)+(1200-6x)\}=17600-87x\]

&lt;p&gt;Case \(\frac{500}{3}\le x\lt200\) :&lt;/p&gt;

\[Total\ Cost=(x-100)+(2x-300)+(3x-500)+5\{(800-4x)+(1100-5x)+(1200-6x)\}=14600-69x\]

&lt;p&gt;Case \(200\le x\lt220\) :&lt;/p&gt;

\[Total\ Cost=(x-100)+(2x-300)+(3x-500)+(4x-800)+(5500-25x)+(6x-1200)=2600-9x\]

&lt;p&gt;Case \(220\le x\) :&lt;/p&gt;

\[Total\ Cost=(x-100)+(2x-300)+(3x-500)+(4x-800)+(5x-1100)+(6x-1200)=21x-4000\]

&lt;p&gt;( \(x\) 범위에 따라 더 세분화되어야 하지만 이정도까지만 하도록 하겠습니다.[최적해 부근에서는 문제가 없으므로] )&lt;/p&gt;

&lt;p&gt;이를 데카르트 좌표계에 나타내면 다음과 같습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZsAAAEWCAYAAACwtjr+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeXhU1fnA8e+bBUIIO2EHg4DIIkS2oIhVaRWpFdxRqyAo7uuvKi5VaxXXiqWKVgQFBdyqVqtWqUuRyr4Ksm8SQQiERXYC7++PcwJDmIQhyeROkvfzPPfJnXO3996ZzDv33nPPEVXFGGOMiaa4oAMwxhhT9lmyMcYYE3WWbIwxxkSdJRtjjDFRZ8nGGGNM1FmyMcYYE3WWbIwxRxARFZHmUVjvZyLSLwrrfV1EHivu9ebZRn8RmRTNbZRllmzKCRFZJSK/DjiGqH8hhNlmFxH5VES2iEi2iEwTkWuKuM4S34/SSEQeEZE3Q8tU9VxVHR1UTCY4lmxMqSEi8cc4/ynAV8B/geZALeBG4Nzijy46RCQhFtZhTJGpqg3lYABWAb/24/2BScCzwGZgJXCun9YXmJFn2TuBj/x4Rb/cj8B64GWgkp92BpAJ/B+wAVgHXOOnDQL2AXuB7cDHvrwV8A2wBVgAnB+y3deBl4BPgR3A3X6bCSHzXATMyWefJwEvHuW4XAcsA7KBj4AGvlyAoX4/tgLzgLb57UeY9SpwG7AC2Ag8A8SFTB8ALPTH/3PguDzL3gwsBVaGWXean2cQsNYf5/8Lmf4I8B7wJrANuNa/b8/7+df68Yohy9zt17PWx6ZAcz/tG+DakHn7A5NCXrcBJvhjuB64H+jpj9E+f5zm5l0X7sfug8Bqf5zHANXy7GM/3GdtI/BAAe/j68BjIa/PA+b4z9V3QDtfPhh4L8+yfwWG+fFqwEh/LH4CHgPiw+23Dcf4HRR0ADaU0Bt9ZLLZh/uijcf92l+L+4JNBn4BWoQsOx3o68efx30p1wSqAB8DT/hpZwA5wKNAItAL2AnU8NPzfiEk4r7o7wcqAGf5bbcMmX8r0M1/MSUBP+ATo5/nA0K+aEPKk4H9wJkFHJOz/JdYB9yX8d+AiX7aOcBMoLo/Lq2A+uH2I591K/C1P05NgCUc+pLt4/e7FZCA+8L9Ls+yE/yylcKsO83PMx6oDJwEZIW8v4/497ePP26V/HsyBagDpOK+gP/s5++JSxJt/frGEWGy8Z+BdbgfGEn+dUZIHG/mif3gunBJbRlwPJACvA+8kWcfR/j42wN7gFb5HO+D74l/PzcAGbjPdz/c578icBzuM1nVzxvv4+/qX38I/N0fhzrANOD6vPttQyG+g4IOwIYSeqOPTDbLQqYl+3/sev71m8BDfrwFLgEk4750dwDNQpY9Bf/rG5dsdnH4mceGkH/kg18I/nV34GcO/8U/HngkZP4xefbjXmCsH6/pvzjqh9nfhn6fTizgmIwEng55nYL7kk7DJaIlQNfQ+MLtRz7rVqBnyOubgC/9+GfAwJBpcX4/jgtZ9qwC1p2Wd9+Ap4GRfvwRfNIMmb4c6BXy+hxglR8fBTwZMu0EIk82lwOz84nzEQpONl8CN4VMa+mPf0LIPjYKmT4N/6MnzLYOvie4s+E/55m+GPiVH58EXO3HfwMs9+N1cQmtUshylwNf591vG459sHs25dfPuSOqutOPpvi/43D/ZABXAB/6eVJxSWemv+G+Bfi3L8+1SVVzQl7vDFlvXg2ANap6IKRsNS5R5FqTZ5k3gd+JSApwKfCtqq4Ls+7NwAGgfj7bzt3+6twXqrod2AQ0VNWvgBeAF4H1IvKKiFQtYF3hhMa+2m8P3K/rv4Ycw2xcIi9ov49l/eGWP2xf88zfIMy6ItUYl8gKI1xMCbgv/Vw/h4wX9FkKdRzwf7nH1x/jxhza37yf73EhyyUC60KW+zvuDMcUkSUbE84XQG0RScf9U+b+M27Enbm0UdXqfqimqpF8AYD7pRpqLdBYREI/h01w18rDLqOqPwGTgQuAq4A3wm7IJcfJuHs6+VmL+4IBQEQq4yoR/OTXMUxVO+LuSZyAu68Rbj/y0zhkvInfHrgv9utDjmF1Va2kqt+F7kIR1h9u+cP2Nc/868KsK9QO3I+MXPVCxtcAzfKJ72j7EC6mHNwlvaJYAzye5/gmq+p4P/1d4AwRaYT7HI0LWW4PUDtkuaqq2qaI8Rgs2Zgw/JnJe7ib2jVx9w/wZyAjgKEiUgdARBqKyDkRrno97vp8rqm4L7J7RCRRRM4Afge8dZT1jAHuwd2r+KCA+e4B+ovI3SJSy8fbXkRy1z8OuEZE0kWkIjAEmKqqq0Sks4hkiEiij3E37h5QuP3Iz90iUkNEGgO3A2/78peB+0SkjY+pmohcEsH68vqjiCT79VwTsv5wxgMPikiqiNQGHsKdJQK8gztOrUUkGXg4z7JzgAv9tpoDA0Om/QuoJyJ3iEhFEakiIhl+2nogLc+Pibwx3SkiTf2Z6hDg7TxnxoUxArjBv38iIpVF5LciUgVAVbNwl/New10CXujL1+F+aP1FRKqKSJyINBORXxUxHoMlG5O/ccCvgXfz/PPfi7upO0VEtgH/wV1rj8RIoLW/RPGhqu4FzsdVRd4IDMddS190lPV8gPtF/IGq7shvJn+mcJYfVohINvAKrnYbqvol8EfgH7hf981wtfEAquK+tDbjLu9swtXCO2I/Cojzn7hKBnOAT/xyqOoHwFPAW/4Yzqdw1bH/i3svvgSeVdUvCpj3MWAGrlbd98AsX4aqfoar+PGVX99XeZYdiqtZth4YDYzNnaCqv+Due/wOd8lrKXCmn/yu/7tJRGaFiWkU7sx0Iq5G5G7g1qPs81Gp6gxc5ZcXcO/fMtz9llC5n+9xecqvxlVW+cEv+x4FX4o1ERJ/48uYUkVEluMuRf0n6FjCERHF1ehbFoV1p+G+nBOL4SzAmBJhZzam1BGRi3D3A/L+AjfGxCh7stiUKiLyDdAauCpPLTZjTAyzy2jGGGOizi6jGWOMibpydxmtdu3ampaWFnQYxhhTqsycOXOjqqYefc7wyl2ySUtLY8aMGUGHYYwxpYqIHEvLEkewy2jGGGOizpKNMcaYqLNkY4wxJuos2RhjjIk6SzbGGGOizpKNMcaYqLNkY4wxJuos2RhjjIm68pdsdv8M1n6jMcaUqPKXbPZuhll/gP27g47EGGPKjfKXbJLqQdYkmHY97MkOOhpjjCkXyl+yqVADTn4GflkGU66BHT8GHZExxpR55S/ZANT9FXT5O+TscAln87ygIzLGmDKtfCYbgOptoetrkFgVpt8A678OOiJjjCmzym+yAajcGLqOgqotYfY9sOqtoCMyxpgyqXwnG3D3cDq/BHV+BYuehUVDrWq0McYUs6glGxEZJSIbRGR+mGl/EBEVkdr+tYjIMBFZJiLzRKRDyLz9RGSpH/qFlHcUke/9MsNERAodbHwSnPw0NLkMVo2FuffD/r2FXp0xxpjDRfPM5nWgZ95CEWkM/AYIrQZ2LtDCD4OAl/y8NYGHgQygC/CwiNTwy7zk581d7ohtHROJg1Z/gJZ3wM//gRk3wb5tRVqlMcYYJ2rJRlUnAuEeZBkK3ANoSFlvYIw6U4DqIlIfOAeYoKrZqroZmAD09NOqqupkVVVgDNCnyEGLQNPfQ/shsGWBq6m2c22RV2uMMeVdid6zEZHzgZ9UdW6eSQ2BNSGvM31ZQeWZYcrz2+4gEZkhIjOysrKOHmj9s6HzcNfawJT+sPWHoy9Tzny8+GM+Xvxx0GGUGSV9PMv6+xcL+xcLMcSSEks2IpIMPAA8FG5ymDItRHlYqvqKqnZS1U6pqamRhAs1T4aMkRBXEaYNgqz/RbacMcaYI5TkmU0zoCkwV0RWAY2AWSJSD3dm0jhk3kbA2qOUNwpTXrxSmsIpr0PlNJh5J6x5v9g3YYwx5UGJJRtV/V5V66hqmqqm4RJGB1X9GfgIuNrXSusKbFXVdcDnwNkiUsNXDDgb+NxP+0VEuvpaaFcD/4xK4BVrQZdXoHZXWDAElgwHzfckyhhjTBjRrPo8HpgMtBSRTBEZWMDsnwIrgGXACOAmAFXNBv4MTPfDo74M4EbgVb/McuCzaOwHAAnJ0GEoNOoDK0bB9w/DgX1R25wxxpQ1CdFasapefpTpaSHjCtycz3yjgFFhymcAbYsW5TGIi4c2D0ClBrB0OOzZCOlPQ2JKiYVgjDGllbUgcCxEoNkAOOlRyJ4JU6+F3RuCjsoYY2KeJZvCaNgLOv4Ndq2Fyf1h29KgIzLGmJhmyaawandxVaMBpg6EjdOCjccYY2KYJZuiqNrCVY2u1ABm3go/fRJ0RMYYE5Ms2RRVUh3IeBVqdnS11JaPtKrRxhiThyWb4pCYAh3/Cg16wdKXYMHjcCAn6KiMMSZmRK3qc7kTlwgn/Qkq1XdnN7s3QPqT7hkdY4wp5+zMpjiJQIsb3fM4G6e4NtX2bAo6KmOMCZwlm2hofAF0HAo7Vruq0dtXBh2RMcYEypJNtKR2c22qHdjjqkZnzwo6ImOMCYwlm2iq1gq6vg4VasL0m2HdF0FHZIwxgbBkE23JDaDrKKjeFubeDyvfsKrRxphyx5JNSUisCp1ehHq/gcV/hYXPgB4IOipjjCkxVvW5pMRXgPaPQ1JdWPWmqxrd/jGITwo6MmOMiTo7sylJEgcn3gGt7oYN/4VpN8DezUFHZYwxUWfJJgjHXQYnPw2/LIEpA2DHmqAjMsaYqLJkE5S6Z0Lnl2HfNphyDWz5PuiIjDEmaizZBKlGO+j6mmtbbdoNsP6boCMyxpiosGQTtMpNIGMUVGkOs++G1e8EHZExxhS7qCUbERklIhtEZH5I2TMiskhE5onIByJSPWTafSKyTEQWi8g5IeU9fdkyERkcUt5URKaKyFIReVtEKkRrX6KuYk3o8neoczosfBoW/dWqRhtjypRontm8DvTMUzYBaKuq7YAlwH0AItIa6Au08csMF5F4EYkHXgTOBVoDl/t5AZ4ChqpqC2AzMDCK+xJ98Ulw8jPQ5FJY9QbMfRD27w06KmOMKRZRSzaqOhHIzlP2harmdvQyBWjkx3sDb6nqHlVdCSwDuvhhmaquUNW9wFtAbxER4CzgPb/8aKBPtPalxEicqxZ9wm3w8xcw4xZXgcAYY0q5IO/ZDAA+8+MNgdD6v5m+LL/yWsCWkMSVWx6WiAwSkRkiMiMrK6uYwo8SETj+amg/xNVQmzIQdq4NOipjjCmSQJKNiDwA5ABjc4vCzKaFKA9LVV9R1U6q2ik1NfVYww1G/bOh84uwZ6OrGr11UdARGWNMoZV4shGRfsB5wJWqB1ukzAQah8zWCFhbQPlGoLqIJOQpL1tqdoCuI10voNOug6zvgo7IGGMKpUSTjYj0BO4FzlfVnSGTPgL6ikhFEWkKtACmAdOBFr7mWQVcJYKPfJL6GrjYL98P+GdJ7UeJSjnedVOQ3ARm3gFrPgw6ImOMOWbRrPo8HpgMtBSRTBEZCLwAVAEmiMgcEXkZQFUXAO8APwD/Bm5W1f3+nswtwOfAQuAdPy+4pHWXiCzD3cMZGa19CVxSbcgYAbW7woLHYOnL1k2BMaZUiVqrz6p6eZjifBOCqj4OPB6m/FPg0zDlK3C11cqHhGTo8BwseAKWvwq71kHbB90lNmOMiXHWxUBpEpfgEkyl+rDsZdiTBelPu+ZujDEmhllzNaWNCDS/Fk56BLJnuooDuzcEHZUxxhTIkk1p1fA86DgMdv4Ek/vDL8uCjsgYY/JlyaY0q50BGa8CClMHwsZpQUdkjDFhWbIp7aqe4KpGJ9WDmbfBT0fUpTDGmMAdNdmIyIWRlJkAVarrznBqpMP3D8HyUVY12hgTUyI5s3kwTNkDxR2IKaLEKtDpb1D/XFg6HH54Ag7sDzoqY4wBCqj67PuU6Qk0FJHnQiZVBayzlVgUlwjtHnVVo1eMgl3rIf0J94yOMcYEqKAzmw3AfGA3sCBk+ALXv4yJRSJwwk3Q5n7YOBmmXQ97NgUdlTGmnMv3zEZVZwOzRWSsqu4GEJFqQENV3VhSAZpCanwhVKwDcwe7VqM7DoOUtKCjMsaUU5Hcs/lERKqKSA3ge2CciDwT5bhMcahzGnR5BfbvhqkDYPOcoCMyxpRTkSSbmqq6DbgQ1yPmycA5UY3KFJ9qrV3V6Ao1YPpN8PN/go7IGFMORZJsEkQkFbgE+DikDxpTWiQ3gIxRULUVzBkMK8da1WhjTImKJNk8DvwXWKOq00TkeGBldMMyxa5CNej8EtTtAYuHwqK/gFqlQmNMyThqslHVt1S1tape51+vUNXe0Q/NFLv4Cq4q9HFXwOq3YM69sH9P0FEZY8qBSFoQaCAi74jIOj+8LSINSiI4EwUSB63ughP/D9Z/A9NvhL1bgo7KGFPGRXIZ7TVgApDmhwm+zJRmaZdD+lOwbRFMGQA7M4OOyBhThkWSbOqq6ghV3eOHV4G60Q7MlIB6Z0Hnl2HfVvcszpYFR1/GGGMKIZJkky0ifeWQy4DsaAdmSkiNdtD1NYhPhmmDYMPEoCMyxpRBkSSbAcDVwEYgC7gKGHi0hURklIhsEJH5IWU1RWSCiCz1f2v4chGRYSKyTETmiUiHkGX6+fmXiki/kPKOIvK9X2aYiEjku20OU7mJSzgpzWDWH+DHd4OOyBhTxkRSG22VqvZS1VqqWltVz1PVSKo+v45ryDPUYOBLVW0BfOlfg2trrYUfBgEvgUtOwMNABtAFeDg3Qfl5BoUsl3db5lhUrAld/g6pp8EPT8HiYVY12hhTbPJNNiLyhIhcH6b8ThF5/GgrVtWJHHm5rTeuFQL83z4h5WPUmQJUF5H6uJYKJqhqtqpuxlVO6OmnVVXVyf4h0zEh6zKFlVAJOjwLjS+GlWNg7oOwf2/QURljyoCCzmx6AyPClA/z0wqjrqquA/B/6/jyhsCakPkyfVlB5ZlhysMSkUEiMkNEZmRlZRUy9HJC4qD1vXDCrfDzFzDjFti3LeiojDGlXEHJ5oDqkddRVHU/UNz3R8KtTwtRHpaqvqKqnVS1U2pqaiFDLEdE4Ph+0O4x2DIPpl4Lu9YFHZUxphQrKNnsFpFmeQt92e5Cbm+9vwSG/7vBl2cCjUPmawSsPUp5ozDlpjg16AmdX4TdG2Byf9i2OOiIjDGlVEHJ5mHgUxH5vYi08sNVwCd+WmF8BOTWKOsH/DOk/GpfK60rsNVfZvscOFtEaviKAWcDn/tpv4hIV18L7eqQdZniVLMjdB0FcQkw9TrImhx0RMaYUqigztM+EZFM4B7gbl88H+irqkftGEVExgNnALX9eh4GngTeEZGBwI+4lqQBPgV6AcuAncA1PoZsEfkzMN3P96iq5lY6uBFX460S8JkfTDSkHO+6KZh5uxvaPkjxX0k1xpRl+SYbAFWdC1xZmBWr6uX5TOoRZl4Fbs5nPaOAUWHKZwBtCxObKYSkVMh4FWbfA/Mf5biUDFbXtm6NjDGRieShTmOchGTo+Dw0PJ8mG7/ghHVvwYGcoKMyxpQClmzMsYlLgLZ/ZHXts6m7dbq7rJazI+iojDExLpIuBqqXRCCmFBHhx9SeLKl/GWTPcBUHdm84+nLGmHIrkjObmSIyXkTOjno0plRZXz0DOv7VdU8wuT9sXRR0SMaYGBVJsmmBaw7mOt8Y5qPhnr8x5VTtrq7igAhMHQg/fxV0RMaYGBRJQ5wHVPUzVb0EuA7X4vMcEflSRLpEPUIT+6qeAKe8AVVbwpx7YNkI0HwbdDDGlEMR3bMRkZtFZCquleY7gZrAA8DbUY7PlBYVa7qO2Br8Fpb9HebeD/sL29CEMaasKfA5G286MA64VFVXh5RPEZFwDXWa8iq+Apz0CFRp7roo2JkJHf4CSXWOuqgxpmwr8MxGROKBD1T14TyJBgBVHRK1yEzpJAJNr4IOz8GO1TD5autu2hhTcLLxLTx3LKFYTFlSp7vr/TOuAky7Dtb+O+iIjDEBiuQy2mwReR94Fzj49J6qfhS1qEzZUKUZnDLGNXEz70HYvgJa3OD6zDHGlCuRJJu6uCTTK6RMcS01G1OwCtVdNwU/PAUrRrmE0+5R1/SNMabcOGqyUdWrSiIQU4bFJUKbByClOSx6zj2P0+E5qFQ/6MiMMSUkkqrPDUTkXRFZ54e3RaRBSQRnyhARSOsLnYa5Xj8nXw2b5wYdlTGmhERy8fw14AsgzQ8TfJkxx652VzhlNCRUgWnXQ+bHQUdkjCkBkSSbuqo6QlX3+OFV3H0cYwqn8nFwyutQswPM/xMseh70QNBRGWOiKJJkky0ifeWQy4Dsoy5lTEESq0LHYdDkUlj1Jsy8E/ZtDzoqY0yURJJsBgBXAxuBLOAqX2ZM0cQlQOt7oPV9sGkKTLnGtTpgjClzIkk29VS1l6rWUtXaqnoeUC/agZlypMlF0OlF2LvJVRzInhl0RMaYYhZJshkepuzFomxURO4UkQUiMt/3lZMkIk1FZKrvxuBtEang563oXy/z09NC1nOfL18sIucUJSYTsFqd3AOgFWrB9JtgzftBR2SMKUb5JhsR6SIitwOpInJbyPAgkFjYDYpIQ+A2oJOqtgXigb7AU8BQVW0BbMZ1ZYD/u1lVmwND/XyISGu/XBugJzDct+VmSqvkRq6Jm1pdYcEQ+OEZOLA/6KiMMcWgoDObykBt3IOfqSHDXuCSIm43AagkIglAMrAOOAt4z08fDfTx4739a/z0HiIivvwtX0NuJbAMsP51SrvEFOg4FNJ+Dz++DTNvhX3bgo7KGFNE+bYgoKpfA1+LyGuquqK4NqiqP4nIs8CPwC7cMzwzgS2qmuNnywQa+vGGwBq/bI6IbAVq+fIpIasOXeYwIjIIGATQpEmT4toVEy0SByfeASnHuzOcyf1dAqp8XNCRGWMKKZJ7NnEiMlxEPhWRL3KHwm5QRGrgzkqaAg1wZ1Dnhpk1t6tHyWdafuVHFqq+oqqdVLVTamrqsQdtgtHofOjyMuT8ApP7wcYpR1/GGBOTImmI8z1gJPAmUBwX0H8NrFTVLADfovSpQHURSfBnN42AtX7+TKAxkOkvu1XDPeeTW54rdBlTVtRIh66jYdZdMOM2OPEuOO4y1/yNMabUiOTM5oCq/k1Vv1PVqblDEbb5I9BVRJL9vZcewA/A18DFfp5+wD/9+Ef+NX76V6qa2+p0X19brSnQAphWhLhMrEpuAF1HuT5yFj0LPzwBB/YFHZUx5hhEkmz+KSKDRCRVRKrmDoXdoE9U7wGzgO99DK8A9wJ3icgy3D2ZkX6RkUAtX34XMNivZwHwDi5R/Ru42Xf2ZsqihGQ4+Rk4foCrFj39Zti7JeiojDERiuQy2rX+7x9DyhQo9J12VX0YeDhP8QrC1CZT1d3kU/tNVR8HHi9sHKaUkTg44SZXcWD+o+4B0I7Pu9fGmJh21DMbVW0cZrAqXSY4DXpCl1dg/x5XU23Dt0FHZIw5ikj6s6kkIoNF5CX/urmIhKs9ZkzJqd4WTn0DKjdxlQdWjAENWxnRGBMDIrlnM8rP192/XgsMiVpExkQqqQ5kvAr1esCSYfD9n2D/3qCjMsaEEUmyaaGqQ4B9AKq6k/DPuBhT8uKToP0T0Px6WPsvmH4D7LEeMIyJNZEkm70ikoR/YNJXM7afjyZ2iEDz6yD9Kdi22FUc2LYk6KiMMSEiSTZ/xlUtbiQio3HPw9wX1aiMKYx6PSBjpOv1c+oAWP910BEZY7xIaqN9hqt6fB3wAdBFVb+MdmDGFEq1E11XBSnNYfbdsHyUVRwwJgZEUhvtH8AZwBeq+qGqboh6VMYURVJtVzW6/rmwdDjMfcBVkzbGBCbSztN+AyzyHZ31ye3YzJiYFV8B2j0KJ9wCP0+AqdfB7qygozKm3IrkMtqXqjoIaAaMAX4P2NmNiX0icHx/OPlZ2LHSVRzY+kPQURlTLkVyZoOIVATOB/oDnYDxUYzJmOJV91eQMQokAaZeC+sK3UOGMaaQIrlnMxZYAvTCNYrZTFVvjHZgxhSrqi3g1DFQrTXMvR+WvuxqrRljSkQkDXGOB/qrqrXpbkq3CjWg80uw4AlY/ipsXwEn/QkSKgUdmTFl3lGTjar+S0S6iEha6PyqOi6KcRkTHXGJ0PaPUKU5LHoedg6EDs9BpXpBR2ZMmRbJZbTXgRdwPWx298Np0Q3LmCgSgbQrXPcEu35yFQc2zws6KmPKtEguo3UFWqvaBW5TxqSeCl1fh1l3wrTroe2D0PC3QUdlTJkUSW20BUDtaAdiTCBSmkLX0VAjHb5/GBYPs4oDxkRBJGc21YCFIjIFOPgYtqpeGLWojClJFapBp7/Bwmdh5RjYvhLaP+66ojbGFItIks0TUY/CmKDFJUCbwVClGfzwDEy5BjoMheQGQUdmTJkQaQsCRwxF2aiIVBeR90RkkYgsFJFTRKSmiEwQkaX+bw0/r4jIMBFZJiLzRKRDyHr6+fmXiki/osRkDABNLoFOL8CeLJh8FWTPCjoiY8qEfJONiGwWkewww2YRKWrvVH8F/q2qJwLtgYXAYOBLVW0BfOlfA5wLtPDDICC3e+qawMNABtAFeDg3QRlTJLW7uIoDFarD9BthzYdBR2RMqVfQmU1tIDXMkFteKCJSFTgd1xoBqrpXVbcAvYHRfrbRQB8/3hsYo84UoLqI1AfOASaoaraqbgYmAD0LG5cxh6ncxCWcWl1gwWOw8C9wYH/QURlTauWbbFR1f0FDEbZ5PJAFvCYis0XkVRGpDNRV1XV+2+uAOn7+hsCakOUzfVl+5cYUj8Qq0OF5OO4KWD0eZt4O+34JOipjSqWIGuIsZglAB+AlVT0Z2MGhS2bhSJgyLaD8yBWIDBKRGSIyIyvLmpk3xyAuHlrdBW0ehOwZMKU/7Pgx6KiMKXWCSDaZQKaqTvWv38Mln/X+8hj+74aQ+RuHLN8IWFtA+RFU9RVV7aSqnVJTC30F0JRnjftA5+GwdytM7gcbpwUdkTGlSoknG1X9GVgjIi19UQ/gB+AjILdGWT/gn378I+BqXyutK7DVX2b7HDhbRGr4igFn+zJjoqNmB9fldFIdmHELrH4n6IiMKTXyfYpSpQkAAB+ISURBVM5GRDYT/rKUAKqqNYuw3VuBsb7HzxXANbjE946IDAR+BC7x836K695gGbDTz4uqZovIn4Hpfr5HVbWoteSMKVhyA+j6Gsx9EBY+7VqObvUH95yOMSZfBf2HRK2JGlWdg+uELa8eYeZV4OZ81jMKGFW80RlzFAnJ0OFZWPIirBwNO1ZB+lOuJQJjTFgR10bDNVtTN2QwpvySOGh5K5z0KGyeC1P6uWZujDFhRdLFwG9FZAnuhvxU//eraAdmTKnQsBd0+Tvk7HQ11bK+CzoiY2JSJBUEHge6AYtVtTHuYcpvohmUMaVKjXau4kClhjDzDlg5FjRsLXxjyq1Ikk2OqmYBcSIiqjoBV1XZGJOrUj3IGAl1z4DFQ2H+n2H/3qCjMiZmRFKFZqt/wn8SMEZENgDW4YcxeSVUgvQnYdkIWD4Cdv4I6U9DxaJU3DSmbIjkzKYPsBu4A3f57CfgvCjGZEzpJXHQ4npoPwS2/uAeAN22NOiojAlcJMnmPl8jbZ+qjlTV54C7oh2YMaVa/bMh41XQHJg6ANb/N+iIjAlUJMkmXEvK1lG7MUdTrbWrOFC5Kcz+Ayx/zSoOmHKroP5srheR2UBLEZkVMizFNS9jjDmapFTIGOHOdJa+CPMesooDplwqqILAO7hOzJ7g8FaZf1HVDeEXMcYcIb4itHsMUprB0uGu4sDJf4GkqDXSYUzMKagFgc2qukxVLwEqAb/xgzWbbMyxEoFmA+DkZ1x7apOvhq2Lgo7KmBITSQsCN+POcpr44R0RuSnagRlTJtU90z2PI3EwdSD8/J+gIzKmRERSQeB6oIuq3q+q9wMZwA3RDcuYMqzqCa7iQNUTYc5gWPYKqD26Zsq2SJKNAPtCXu8jfC+ZxphIVawJnV+CBufBslc48ac3iDtgFQdM2VVQfzYJqpoDvAFMEZF/+EkXAKNLIjhjyrT4CnDSw1ClGalzH6XS6o3QtLvrnM2YMqagM5tpAKr6NDAI13HZLuAGVX22BGIzpuwTgaZXsaDxtVTamwXf/R42Tj36csaUMgUlm4OXylR1uqo+p6p/UdXpBSxjjCmE7JTWzEm7AypUhxk3w+JhcGDf0Rc0ppQo6DmbVBHJt1ka32yNMaaY7KxYz1UcWDQUVo6BTTMgfQgkNwo6NGOKrKAzm3ggBaiSz2CMKW7xSdDmPtda9M418L8r4KdPg47KmCIr6Mxmnao+Gq0Ni0g8MAP4SVXPE5GmwFtATWAWcJWq7hWRisAYoCOwCbhMVVf5ddwHDAT2A7ep6ufRiteYElXvLNe22rw/wvcPwaYp0HowJCQHHZkxhRLRPZsouR1YGPL6KWCoqrYANuOSCP7vZlVtDgz18yEirYG+QBtcY6HDfQIzpmyoVA86vwzNB8Haf8N3V7huC4wphQpKNj2itVERaYRrOfpV/1qAs4D3/Cyjcf3oAPTmUFXr94Aefv7ewFuqukdVVwLLgC7RitmYQMTFu2ST8YqrMDDlGlgxxh4CNaVOQW2jZUdxu88D93Cox89awBb/XA9AJtDQjzcE1viYcoCtfv6D5WGWMaZsqZEO3cZDnV/BkmEw41bYvTHoqIyJWCQtCBQrETkP2KCqM0OLw8yqR5lW0DJ5tzlIRGaIyIysrKxjiteYmJFYFdKfgjYPwOY58N3lkPW/oKMyJiIlnmyAbsD5IrIKVyHgLNyZTnURya2w0AhY68czgcbgWjUAqgHZoeVhljmMqr6iqp1UtVNqqjVabUoxEWh8AZz6BlSoBTNvh4XPWR85JuaVeLJR1ftUtZGqpuFu8H+lqlcCXwMX+9n6Af/04x/51/jpX6mq+vK+IlLR12RrgW/1wJgyL+V490xOk0th9TiY0h92rA46KmPyVVDV55J2L/CWiDwGzAZG+vKRwBsisgx3RtMXQFUXiMg7uF5Dc4CbVXV/YTa8b98+MjMz2b17d1H3odxosK8BAAsXHqpQmJSURKNGjUhMTAwqrPIlvgK0vgdqd4Xv/wTfXQmt7oGGv3NnQMbEkECTjap+A3zjx1cQpjaZqu4GLsln+ceBx4saR2ZmJlWqVCEtLQ2xf9KIbNm9BYDqSdUBUFU2bdpEZmYmTZs2DTK08qfO6a7ywLyHYP6jsHEKtLkfElOCjsyYg4K4ZxNzdu/eTa1atSzRFIGIUKtWLTs7DEpSHeg8HFrc5Dpk++4K2Dwv6KiMOciSjWeJpujsGAZM4lzX0139Feip18LyUfZMjokJlmyMKWuqnwSnjoN6v4alw2H6jbB7Q9BRmXLOkk2M+Pnnn+nbty/NmjWjdevW9OrViyVLlhzTOoYMGRKl6Eypk5gC7R+Htg/B1gXwv76wYWLQUZlyzJJNDFBVLrjgAs444wyWL1/ODz/8wJAhQ1i/fv0xrceSjTmMCDQ6H04dC0n1YdZd8MPTsH9P0JGZciiWqj7HhoV/gW2Li3edVVtCq//Ld/LXX39NYmIiN9xww8Gy9PR0VJW7776bzz77DBHhwQcf5LLLLmPdunVcdtllbNu2jZycHF566SU++eQTdu3aRXp6Om3atGHs2LHFuw+m9Kp8HHR9DZa84J7JyZ5FctUerv8cY0qIJZsYMH/+fDp27HhE+fvvv8+cOXOYO3cuGzdupHPnzpx++umMGzeOc845hwceeID9+/ezc+dOunfvzgsvvMCcOXMC2AMT8+IrQKu7/DM5D3PyyudYXrcP6Hn2TI4pEZZs8irgDKSkTZo0icsvv5z4+Hjq1q3Lr371K6ZPn07nzp0ZMGAA+/bto0+fPqSnpwcdqiktUk+Fbm+xdeLVtPj5PZixzX3mU44POjJTxtk9mxjQpk0bZs6ceUS5a5XnSKeffjoTJ06kYcOGXHXVVYwZMybaIZqypGIt5jcexPK6F7j+cSb1dfdy9m0LOjJThlmyiQFnnXUWe/bsYcSIEQfLpk+fTo0aNXj77bfZv38/WVlZTJw4kS5durB69Wrq1KnDddddx8CBA5k1axYAiYmJ7Nu3L6jdMKWJxLG2Znc4/QNofCH8+B5M7AOr34EDhWr1yZgCWbKJASLCBx98wIQJE2jWrBlt2rThkUce4YorrqBdu3a0b9+es846i6effpp69erxzTffkJ6ezsknn8w//vEPbr/9dgAGDRpEu3btuPLKKwPeI1NqVKgObQa7GmtVToCFT7uuCzZam7ameEl+l2rKqk6dOumMGTMOK1u4cCGtWrUKKKLSKW/baLnsWBbOx4s/BuB3LX8X3PZUYcM3sOh52PUTpJ4OJ94JlRuHX0kMK+njGasxFCcRmamqnQq7vJ3ZGGMcEah7Jpz2LpxwC2TPgEmXwOJhkLMj6OhMKWfJxhhzuPgKcHx/6P4+NDgXVo6BiRdA5j+tnTVTaJZsjDHhJdWGkx52nbQlN4L5f4bJV7suqY05RpZsjDEFq9YaMkZCu8dgT7ZrTXrO/bDr56AjM6WIJRtjzNGJQIOe0P0f0Ow6V5Hg2wth6d8hZ1fQ0ZlSwJKNMSZyCZWgxfUu6dQ5A5aPgG8vgrWfu9psxuTDkk1hbd8OS5a4vyXs+eefZ+fOnQdf9+rViy1btpR4HKYcq1Qf0odAlxFQoQbMewCmDnQtEhgThiWbY5WTA7feCnXqQMeO7u+tt7ryEpI32Xz66adUr169gCWMiZKaJ8Opb0DbP8LOTFeB4Ps/we6NQUdmYkyJJxsRaSwiX4vIQhFZICK3+/KaIjJBRJb6vzV8uYjIMBFZJiLzRKRDyLr6+fmXiki/EtmBO++EUaNg1y53VrNrl3t9551FWu1zzz1H27Ztadu2Lc8//zyrVq3ixBNPpF+/frRr146LL76YnTt3MmzYMNauXcuZZ57JmWeeCUBaWhobN248uMy1115L27ZtufLKK/nPf/5Dt27daNGiBdOmuafCH3nkEZ599tmD227bti2rVq2KeHljDiNx0Ki3a/qm6dWw9jN3P2fF67B/b9DRmRgRxJlNDvB/qtoK6ArcLCKtgcHAl6raAvjSvwY4F2jhh0HAS+CSE/AwkAF0AR7OTVBRs307jBwJIWcVgHs9cmShL6nNnDmT1157jalTpzJlyhRGjBjB5s2bWbx4MYMGDWLevHlUrVqV4cOHc9ttt9GgQQO+/vprvv766yPWtWzZMm6//XbmzZvHokWLGDduHJMmTeLZZ5+NqHO1oi5vyrGEytDyNjjtHajZyfWfM+kSWP+13c8xJZ9sVHWdqs7y478AC4GGQG9gtJ9tNNDHj/cGxqgzBaguIvWBc4AJqpqtqpuBCUDPqAa/di3Ex4efFh/vphfCpEmTuOCCC6hcuTIpKSlceOGFfPvttzRu3Jhu3boB8Pvf/55JkyYddV1NmzblpJNOIi4ujjZt2tCjRw9EhJNOOolVq1ZFfXljqNwEOj4HnV6E+Iow+26YfhP8sizoyEyAAr1nIyJpwMnAVKCuqq4Dl5CAOn62hsCakMUyfVl+5eG2M0hEZojIjKysrMIH3KAB7M+nRdz9+930QsivfTrJ06lV3tfhVKxY8eB4XFzcwddxcXHk+PtKCQkJHDhw6Enw3bt3H9PyxkSkdgacOh5a3QO/LIb/XQELnoS9VpmlPAos2YhICvAP4A5VLagjjXDfsFpA+ZGFqq+oaidV7ZSamnrsweZKSYGBAyE5+fDy5GRXnpJSqNWefvrpfPjhh+zcuZMdO3bwwQcf0L17d3788UcmT54MwPjx4znttNMAqFKlCr/88kuhdyMtLe1gtwSzZs1i5cqVhV6XMQWKi4fjLoXuH0CTi2HN+67pm1Xj4YD9eClPAkk2IpKISzRjVfV9X7zeXx7D/93gyzOB0GZnGwFrCyiPrqFDYcAAqFTJJZdKldzroUMLvcoOHTrQv39/unTpQkZGBtdeey01atSgVatWjB49mnbt2pGdnc2NN94IuK4Ezj333IMVBI7VRRddRHZ2Nunp6bz00kuccMIJhY7dmIhUqAat74HT3nItEiz6C/yvL2R9F3RkpoSUeBcD4q4FjQayVfWOkPJngE2q+qSIDAZqquo9IvJb4BagF64ywDBV7eIrCMwEcmunzQI6qmp2Qdsvti4Gtm9392gaNCj0GU1BVq1axXnnncf8+fOLfd3FwboYKF4x0cVASVGFrG9h0VDYuQZST4MT73L3eopJLDTvHwsxFKeidjGQUJzBRKgbcBXwvYjktuh3P/Ak8I6IDAR+BC7x0z7FJZplwE7gGgBVzRaRPwPT/XyPHi3RFKuUFLAzAmOOnQjUOR1qdYXVb8HyV12tteP6QrNrIbFK0BGaKCjxZKOqkwh/vwWgR5j5Fbg5n3WNAkYVX3SxIy0tLWbPaowpFvEV4PiroeF5sORFWDUO1n4KLW6ERn3c8zumzLB30xgTrIo14aQ/wilvQOXjYMEQ+O73kD0r6MhMMbJkY4yJDdVOdG2ttX8C9m2DaYNg9r2wM/r1fkz0WbIxxsQOEaj/G9eqdPMbIGsSTLoYlgyHnJ1HX97ErCAqCBhjTMHiK0Lza6Hh72DJ32DFKPjpYzjhVtevjt3Pib4D+2Hnj67lh+1Fb/3Bkk0YuVUWi8vRqj5u2bKFcePGcdNNN/HNN9/w7LPP8q9//atYY3j99deZMWMGL7zwQsTLpKWlMWPGDGrXrn1Y+SOPPEJ8xXhuvfPWYo3RmCNUqgvtH4Mml8LCZ+H7h+DHd6DVH6B626CjKxtUYU+WSyq5ieWXZbBjFRzIbUi16Mndkk0M2LJlC8OHD+emm26KeJn9+/cTn187bcaUNTXawSmvu9pqi/8GU/pDg15wwi2QVOdoS5tcOTsPTyi54/tCGnGpmApVmkOtDPe3SnOo3BSomO9qI2HJJgYMHjyY5cuXk56eTmJiIpUrV+biiy9m/vz5dOzYkTfffBMRIS0tjQEDBvDFF19wyy230LlzZ26++WaysrJITk5mxIgRnHjiibz77rv86U9/Ij4+nmrVqjFx4kQA1q5dS8+ePVm+fDkXXHABTz/9NOCawhkyZAiqym9/+1ueeuqpI2J8/PHHGTNmDI0bNyY1NZXW7VqX6DEyBolz1aTrngXLR8GqsbD+Kzh+AKRd6S69GedAzqFLYKFJZVdIZYv4ZJdI6v0aUpofSiyJVaMSkiWbGPDkk08yf/585syZwzfffEPv3r1ZsGABDRo0oFu3bvzvf/872C5aUlLSwdafe/Towcsvv0yLFi2YOnUqN910E1999RWPPvoon3/+OQ0bNjysB885c+Ywe/ZsKlasSMuWLbn11luJj4/n3nvvZebMmdSoUYOzzz6bDz/8kD59+hxcbubMmbz11lvMnj2bnJwcOnToYMnGBCchGVreAo0vgMXPw9LhkPkhtLzdJaIIGqwtM1Rh94Yjz1S2rwLd52eKg5Q0qNbWPb9UpblLLpXql+ixsmQTg7p06UKjRo0ASE9PZ9WqVQeTzWWXXQbA9u3b+e6777jkkksOLrdnzx4AunXrRv/+/bn00ku58MILD07v0aMH1apVA6B169asXr2aTZs2ccYZZ5DbQOmVV17JxIkTD0s23377LRdccAHJvgHS888/P1q7bkzkkhvCyc/Apumw8C8w516o0cHdzymL9m2H7cuPvAyWE9Iob8U6LpnUPuXQ2UrlNPcAbcAs2cSg0Gb+4+PjD2vav3LlygAcOHCA6tWrM2fOnCOWf/nll5k6dSqffPIJ6enpB+cJt95I28aLpHsDYwJRqzOcOhYyP4ClL8F3V9I86UR+qnkG7PsFElKCOdvZvQuys6Hh9mNrP/HAPtix+sgb9rt/PjRPQmVIaeaqiac0hyotoEqzqF0CKw6WbGJAYboMqFq1Kk2bNuXdd9/lkksuQVWZN28e7du3Z/ny5WRkZJCRkcHHH3/MmjVr8l1PRkYGt99+Oxs3bqRGjRqMHz+eW289vJbZ6aefTv/+/Rk8eDA5OTl8/PHHXD3g6kLtqzFRERfvujCofzYse5V6i/9O/S1TYO1LQJxrdTqxKiRWg8Tqh7+uUN2X+7Lc14W9B5ST47qJ/+YViIuDpXe5LkiGDoWEkK9cVdi93ieVpSG1wFaD+h+YEu/OTGq0h5SLDt1XSapX6i4XWrIJo6Rbaa1VqxbdunWjbdu2VKpUibp160a03NixY7nxxht57LHH2LdvH3379qV9+/bcfffdLF26FFWlR48etG/fPuwZEED9+vV54oknOPPMM1FVevXqRe/evQ+bp0OHDlx22WWkp6dz3HHH0b179yLvszFRkVgVWt3FzJzqVNm5iow6LWHfVti3xdW42rvVnSFsW+TKD+zJf11xFX0yqnYoGYWOh5uWUNUlmlGjoJGvNrwLGDsSkrPg5otCzliWQ05IV/JJdd1ZSupp/kyluWu+Jy4xqoespJR4FwNBK7YuBso562KgeJWrLgZKQMT7t3+PSzp7t/qktM0lptDXe7f48a2H5uVAPus7ANPmwvYDrEmA/fsgLQGoCsQJtE+HilUP3aTPPVNJaRbzrV2Xxi4GjDEmNsRXhPg6x/asjirk7Dg8+eSOZy6B+Qsgfi85DSA+EVgFrAe2JkHvF6D1KaXuElhxsGRjjDHHQgQSU9xAw8On1doOnz0Bu2C+7+6qyRI/rRJwXLtymWjAGuI8qLxdTowGO4am3EtJcZUB/GMCByUnu/Io9OpbWtiZDe5ByU2bNlGrVi2r4ltIqsqmTZtISkoKOhRjgjV0qPubWxutksCAAYfKyylLNkCjRo3IzMwkKysr6FBKjZ37XHPvyYmHfsElJSUdfBjVmHIrIQH+9jeY2909Z9P59+X6jCaXJRsgMTGRpk2bBh1GqVLWazMZU2RJlaBBQ0s0Xqm/ZyMiPUVksYgsE5HBQcdjjDHmSKU62YhIPPAicC7QGrhcRKyFSGOMiTGlOtkAXYBlqrpCVfcCbwG9j7KMMcaYElba79k0BEIb/soEMvLOJCKDgEH+5R4RmV8CsRVVbWBj0EEcRWmIESzO4mZxFq/SEmfLoixc2pNNuHrKRzzsoaqvAK8AiMiMojS5UFJKQ5ylIUawOIubxVm8SlOcRVm+tF9GywQah7xuBKzNZ15jjDEBKe3JZjrQQkSaikgFoC/wUcAxGWOMyaNUX0ZT1RwRuQX4HIgHRqnqgqMs9kr0IysWpSHO0hAjWJzFzeIsXuUiznLXxYAxxpiSV9ovoxljjCkFLNkYY4yJujKdbERklYh8LyJzcqvtiUhNEZkgIkv93xoBx9jSx5c7bBORO0TkERH5KaS8VwCxjRKRDaHPJeV3/MQZ5psNmiciHQKO8xkRWeRj+UBEqvvyNBHZFXJcXw44znzfZxG5zx/PxSJyTsBxvh0S4yoRmePLAzmeItJYRL4WkYUiskBEbvflMfX5LCDOmPp8FhBn8X0+VbXMDrg+8mrnKXsaGOzHBwNPBR1nSGzxwM/AccAjwB8Cjud0oAMw/2jHD+gFfIZ79qkrMDXgOM8GEvz4UyFxpoXOFwPHM+z7jGt+aS5QEWgKLAfig4ozz/S/AA8FeTyB+kAHP14FWOKPWUx9PguIM6Y+nwXEWWyfzzJ9ZpOP3sBoPz4a6BNgLHn1AJar6uqgAwFQ1YlAdp7i/I5fb2CMOlOA6iJSP6g4VfULVc3xL6fgnsEKVD7HMz+9gbdUdY+qrgSW4ZpnirqC4hQRAS4FxpdELPlR1XWqOsuP/wIsxLUoElOfz/zijLXPZwHHMz/H/Pks68lGgS9EZKa4JmsA6qrqOnAHGDiGzsejri+H/xPf4k+zRwV9uS9EfscvXNNBBX1YS9IA3K/aXE1FZLaI/FdEugcVVIhw73OsHs/uwHpVXRpSFujxFJE04GRgKjH8+cwTZ6iY+nyGibNYPp9lPdl0U9UOuFahbxaR04MOKD/iHko9H3jXF70ENAPSgXW4SxexLKKmg0qaiDwA5ABjfdE6oImqngzcBYwTkapBxUf+73NMHk/gcg7/QRTo8RSRFOAfwB2quq2gWcOUldjxzC/OWPt8homz2D6fZTrZqOpa/3cD8AHuNG997umz/7shuAgPcy4wS1XXA6jqelXdr6oHgBGU0CWUCOR3/GKu6SAR6QecB1yp/kKzP+3f5Mdn4q41nxBUjAW8z7F4PBOAC4G3c8uCPJ4ikoj7Yhyrqu/74pj7fOYTZ8x9PsPFWZyfzzKbbESksohUyR3H3ZCbj2vOpp+frR/wz2AiPMJhvxjzXE++ABd7LMjv+H0EXO1r/XQFtuZezgiCiPQE7gXOV9WdIeWp4vpBQkSOB1oAK4KJssD3+SOgr4hUFJGmuDinlXR8efwaWKSqmbkFQR1Pf+9oJLBQVZ8LmRRTn8/84oy1z2cBcRbf57Okaz2U1AAcj6stMRdYADzgy2sBXwJL/d+aMRBrMrAJqBZS9gbwPTDPv7H1A4hrPO7UeR/ul8zA/I4f7rT6Rdwvse+BTgHHuQx3TXmOH172817kPw9zgVnA7wKOM9/3GXjAH8/FwLlBxunLXwduyDNvIMcTOA132WZeyHvcK9Y+nwXEGVOfzwLiLLbPpzVXY4wxJurK7GU0Y4wxscOSjTHGmKizZGOMMSbqLNkYY4yJOks2xhhjos6SjTER8K3xFupZJxE5Q0RODXl9g4hcXcR4ZvpWJ6JCRO4PGS/0vhuTy5KNKddyH6CLsjOAg8lGVV9W1TGFXZlvu+onVd1b5Mjyd//RZzEmcpZsTJnlf5EvEpHRviHB90QkWVx/LA+JyCTgEhFJF5Epcqhvkdw+UDqKyFwRmQzcHLLe/iLyQsjrf4nIGX68p4jM8st96RPDDcCd4voD6S6uj5A/+Pnz2/Y3IvKUiEwTkSV5GmQ8F/i3n2+7n2+miPxHRLr4ZVeIyPl+niQReU1c306zReTMkP14X0T+La7/l6d9+ZNAJR9vbptd8SIyQlxfJ1+ISKVifrtMGWfJxpR1LYFXVLUdsA24yZfvVtXTVPUtYAxwr5/ne+BhP89rwG2qekokGxKRVFz7URepanvgElVdBbwMDFXVdFX9Ns9i+W0bXH8nXYA78pT3xCcboDLwjap2BH4BHgN+g2ta5FE/z80AqnoSrlmk0SKS5KelA5cBJwGXiUhjVR0M7PLxXunnawG8qKptgC24J92NiZglG1PWrVHV//nxN3HNcoBvTFJEqgHVVfW/vnw0cHqY8jci2FZXYKK6/j1Q1QL7rslv2yGz5DbaOBPXqVZu6+CNVDW3vay9HEo83wP/VdV9fjzNl5+WG7+qLgJWc6hxxy9V/7+9++dlMIriOP494hV0pqPJ0DcgjIxGESmLN8PKwHuw8AqEWKmEsXYDjQhNcQz3uXn+pP9UnzRtfp+lfZp7cm+H9uT+ybnecvdP4IFwcV83TXe/LY5HZFhKNjLrivWY4vP7gDjrEht9kf/txFlCv5hRtJPXb2A+eb8CXGXadDytOfUTYzxU6Y0x3crBF/so9jNqO5GulGxk1lXNLC6DbZH/o8bdW8BLZk9khzA7eAVaZhZnQtuZsCegZmZzZrZIWnb9BlhNquBiZpXk8zfCVbs5vfoe8H3WyV+0NYzLOH4zWwKqhOKJ/XQslJwXGQslG5l1j0DdzBpAhXAZVFEdOEja1Ej3OvaAo+SAwEem/TXQJCxVHRKq8+Luz8A+cGZmd6T3vpwDm/GAwJB997LG4IRUdEzY4L9PxrTr7u0BMSdAI3NAQORfVPVZZlZyEuzC3ZcnPJSxMLMF4NTdNyY9FpG/0rqryJTwcGmZEo1MJc1sRESkdNqzERGR0inZiIhI6ZRsRESkdEo2IiJSOiUbEREp3S+C264wBNeSdAAAAABJRU5ErkJggg==&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;최적해 부근을 더 확대해서 보도록 하겠습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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OSKQ9TtoNRBW/AG25VS9jDHGhKFsQnnttddo0aJFDCOKrmg2G54JfAD0FJFcEZlQSfXXgLXAauAx4CoAVd0O3Aos9I9bfFlkJTeAE+6G9C6w5FewZ23EN2GMiZH8fFi40D1HwL333ktWVhZZWVncf//9rF+/nuOPP55x48bRr18/fvSjH1FQUMCDDz7Ixo0bOe200zjttNMAyMzMZOvWrYeXufzyy8nKymLs2LH85z//YciQIfTo0YOPPvoIgClTpnDPPfcc3nZWVhbr168Pe/k6p6r17jFw4ECtkb1fq875nuo7Z6nu31qzddRDL336UqxDMEZVVT/55JNSr3fs21H5AjNmqDZqpNq8uXueMaNW28/JydGsrCzds2eP7t69W3v37q2LFy9WQOfPn6+qquPHj9e7775bVVW7deum+fn5h5cveb1u3TpNTk7W5cuXa1FRkQ4YMEDHjx+vxcXF+uKLL+qYMWNUVfXmm28+vC5V1T59+ui6devCXr4yZfelqiqQo7X47j16esqHI72j66NSuMMN02J9VIxJXPn5MGEC7NsHu3a55wkTanWkMn/+fM477zwaN25MkyZN+MEPfsB7771Hly5dGDJkCAD/+7//y/z586tcV/fu3enbty9JSUn06dOHESNGICL07duX9evXR335aLCEUlbzXtD/j+72wct+A8VFsY7IGFMT69dDgwaly1JTXXkNaQXdC6TMbTHKvg6lYcOGh6eTkpIOv05KSuLQIdc3LiUlheLi4sP19u/fX63l65ollFDaDoXeN0L+fFh1t/VRMSYRZWbCwYOlywoLXXkNDRs2jBdffJGCggL27t3LrFmzGDp0KF999RUffPABADNnzuSUU04BoGnTpuzevbvG28vMzDw85P3ixYtZt25djddVFyyhVKTrD6H7JbDheVj391hHY4yprowMmDYNGjWCZs3c87RprryGBgwYwKWXXsrgwYM56aSTuPzyy2nZsiW9evVi+vTp9OvXj+3bt/PTn/4UcMPUjxo16vBF+er64Q9/yPbt28nOzuaRRx7huOOOq3HsdeHoGb6+JrQYlv0WNr0J/e+ADqH6ZNZ/L3/2Mmf3PDvWYRhTbsj1nft30iKtima4+fnuNFdmZq2SSUXWr1/PWWedxcqV5cbBjWvRGL7+6LjBVk1JEvSdAge2wPKboWEGtDoh1lEZY6oj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&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;6월말 재고가 0이라는 제약조건이 없으면 재고관련비용은 $6,200,000까지 내려갈 수 있는 것을 확인하였습니다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h4 id=&quot;시사점&quot;&gt;시사점&lt;/h4&gt;

&lt;p&gt;하지만 여기서 생산량 \(x\)의 최적점이 220개라고 판단할 수는 없겠죠?&lt;/p&gt;

&lt;p&gt;이 경우에는 6월말에 재고가 120개 발생합니다. 즉, 이 재고 120개가 유용한 것인지를 판단하여야 합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;이 재고는 다음분기로 넘어가서 어차피 또 수요가 있다면 \(x\)의 최적점은 220임이 틀림없습니다.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;그러나 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;이 재고가 다음분기로 넘어가면 모두 폐기해야 하는 경우라면 비용을 다시 계산&lt;/code&gt;할 필요가 있습니다.&lt;/p&gt;

&lt;p&gt;\(x\)가 200일 때 재고관련비용은 $8,000,000입니다.&lt;/p&gt;

&lt;p&gt;\(x\)가 220일 때 재고관련비용과 $1,800,000 차이가 발생하죠.&lt;/p&gt;

&lt;p&gt;그러나 \(x\)가 200일 때는 생산비용과 폐기비용을 고려할 필요가 없지만 \(x\)가 220일 때는 그것을 고려할 필요가 생깁니다.&lt;/p&gt;

&lt;p&gt;즉, 해당 제품 120개의 생산비용과 폐기비용의 합이 $1,800,000을 넘어가면 두번째 대안은 기각해야겠죠.&lt;/p&gt;

\[120개\ 생산비용_X\ +120개\ 폐기비용_X\ (&amp;lt;or&amp;gt;or=)\ \ $\ 1,800,000\\\]

&lt;p&gt;&lt;strong&gt;결론적으로 관리자는 다음과 같은 의사결정을 해야합니다.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;\(if\ \  단위생산비용_X+단위폐기비용_X&amp;lt;$\ 15,000\) : \(x=220\)으로 설정&lt;/p&gt;

&lt;p&gt;\(if\ \ 단위생산비용_X+단위폐기비용_X&amp;gt;$\ 15,000\) : \(x=200\)으로 설정&lt;/p&gt;

&lt;p&gt;물론 이 전에 다음분기로 넘어간 재고가 폐기된다는 전제가 있을 때의 이야기입니다.&lt;/p&gt;

&lt;p&gt;폐기되지 않고, 정상적으로 활용될 수 있다면 당연히 \(x=220\)으로 설정하는 것이 맞을 것입니다.&lt;/p&gt;</content><author><name></name></author><category term="[&quot;others&quot;]" /><summary type="html">2013 CPA 경영학 12번 문제에 대한 자세한 분석, 변형 풀이</summary></entry><entry><title type="html">2018 CPA 경영학 20번 문제 풀이</title><link href="https://unprettycoder.github.io/CPA-2018-management-20/" rel="alternate" type="text/html" title="2018 CPA 경영학 20번 문제 풀이" /><published>2020-09-20T00:00:00+00:00</published><updated>2020-09-20T00:00:00+00:00</updated><id>https://unprettycoder.github.io/CPA-2018-management-20</id><content type="html" xml:base="https://unprettycoder.github.io/CPA-2018-management-20/">&lt;h2 id=&quot;2018-cpa-management-part-20번-풀이&quot;&gt;2018 CPA Management part 20번 풀이&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;A사에서 판매하는 제품의 일일 수요는 평균이 20개이고 표준편차가 5개인 정규분포를 따르며 서로 독립이다. A사는 외부 업체로부터 제품을 조달하며, 주문 후 입고되기까지의 조달기간(lead time)은 9일이다. A사가 95%의 서비스수준(service level)을 충족하는 최소의 안전재고를 유지하고자 할 때, A사의 재고시스템에 관한 설명으로 가장 적절한 것은? (단, \(Z\)를 표준정규분포를 따르는 확률변수라고 할 때, \(P(Z&amp;gt;1.6)=0.05\)로 가정하라.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;① 정량발주시스템(Q시스템)을 사용하는 경우, 필요한 안전재고는 50개보다 많다.&lt;/p&gt;

&lt;p&gt;② 정량발주시스템을 사용하는 경우, 재주문점(reorder point)은 180개이다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;③ 주문주기가 16일인 정기발주시스템(P시스템)을 사용하는 경우, 필요한 안전재고는 40개이다.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;④ 주문주기가 16일인 정기발주시스템을 사용하는 경우, 최대 재고량의 목표치는 352개이다.&lt;/p&gt;

&lt;p&gt;⑤ 주문주기가 16일인 정기발주시스템을 사용하는 경우, 주문시점에서 30개의 재고가 남아있었다면 주문량은 600개보다 많다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;solve&quot;&gt;Solve&lt;/h3&gt;

&lt;p&gt;먼저 제품의 일일 수요를 확률변수 X로 둡니다.&lt;/p&gt;

&lt;p&gt;그러면 문제 조건에서 알 수 있는 정보는 아래와 같습니다.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;\(X\ \sim \ N(20,5^2)\).&lt;/li&gt;
  &lt;li&gt;\(L\)(Lead Time) : 9일&lt;/li&gt;
  &lt;li&gt;Service Level : 0.95&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;1-q-system&quot;&gt;1. Q-System&lt;/h4&gt;

&lt;p&gt;A사가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Q-System&lt;/code&gt;을 이용하는 경우, 주문관리를 어떻게 해야하는지 알아보겠습니다.&lt;/p&gt;

&lt;p&gt;현재는 재고유지비용, 주문비용 등이 제시되어 있지 않아 EOQ(Economic Order Quantity)는 미지입니다.&lt;/p&gt;

&lt;p&gt;Q-System에서는 안전재고를 고려할 때 &lt;strong&gt;Lead time동안의 재고고갈만 고려&lt;/strong&gt;해주면 되겠죠? (\(L=9\))&lt;/p&gt;

&lt;p&gt;제품의 일일 수요는 X, 총 9일의 리드타임이 있으니 9일 동안의 제품 수요에 대해 고려해야 합니다.&lt;/p&gt;

\[9일\ 동안의\ 제품\ 수요\ X'=9X\]

\[X' \sim N(180,\ 15^2)\]

&lt;p&gt;\(9X\)인 \(X'\)이 왜 위와 같은 정규분포를 따르는지는 따로 설명하지 않겠습니다.&lt;/p&gt;

&lt;p&gt;\(X'\)에 대한 확률밀도함수를 그려보겠습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;\(X'\)은 위와 같은 pdf(probability density function)를 가지게 될 것입니다.&lt;/p&gt;

&lt;p&gt;여기서 A사의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;목표 Service Level이 95%&lt;/code&gt;라고 했으니 그에 맞는 안전재고를 설정해주어야 합니다.&lt;/p&gt;

&lt;p&gt;문제에서 \(P(Z&amp;gt;1.6)=0.05\)라고 제시되어 있기 때문에 이를 기반으로 \(P(X'&amp;lt;R)=0.95\)가 성립하는 \(R\)을 찾아줍니다.&lt;/p&gt;

\[Standardazation\\
Z=\frac{X'-\mu}{\sigma}=\frac{X'-180}{15}\\
P(Z&amp;lt;1.6)=0.95,\ \ P(\frac{X'-180}{15}&amp;lt;1.6)=0.95\]

&lt;p&gt;위 풀이를 통해 \(R\)이 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;204&lt;/code&gt;라는 것을 알 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYAAAAEZCAYAAACervI0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3de5xN9f748dd7MMb9OgpDiFyTMuTU6aYSnYoupFOhlE5FIRWdZHRViY7ookjEryvle7pQkU4ll6Tk2qRiUK7JJcbw/v3xWaNt7DF7ZvbM2pf38/HYj9l73fZ7zZ5Z770+67PeH1FVjDHGxJ8EvwMwxhjjD0sAxhgTpywBGGNMnLIEYIwxccoSgDHGxClLAMYYE6csARjjEZFbRORpv+MIFxFpLSLDRKRWAdZdKCLNiyIuEzksAZhiIyLlReRnEflnwLQKIrJORK7yXk8SkV5hft9JIqIi0jZgWkMR0YDXicD9wJMB08aLyGoROZQzJnEeFpENIrJTRD4NPGCKSGkRmSgif4jIryIyMB/xnicic73t/hxk/s8i8qeI7PYes4Ms0wT4ELgA+FBEKueY31NEvvbiyxCRJ0SkZMAiI4EHQ43ZRCdLAKbYqOpuoA/wHxFJ9iY/ASxW1beK+O23Aw8fY35nYJWqbgiY9i1wG7AkyPJdgRuBs4CqwHxgSsD8NKARcAJwHnCPiHQMMdY9wETg7mMsc6mqlvceHQJniEgK8AEwBDgbmAvMFJGkgMXKAv2B6sDpwPnAoID5M4HzRKRmiDGbKGQJwBQrVZ0NvAeMEZFzgW7A7cXw1q8ALUXknFzmdwLmBU5Q1XGq+gmwL8jy9YHPVXWtqh4EXgWaBczvATykqjtUdSXwItArlEBVdaGqTgHWhrJ8IBGpivv9DlXVl9S5E/gSeE1ESnjv8Zyq/k9VM72kNxU4MyCGfcDXQIej38XEipJ5L2JM2A0AVgAXAoNUdVP2DFXtVdCNioho7rVN9gKPAo8Afw8y/2Tct+ZQvQZcLSInAT8BPXFNLohIFaAW7gwi27dAl3xsPy9TRSQB+Aa4W1W/BVDV7cApORdW1cF5bO9sYHmOaSuDbcvEDjsDMMVOVXfgDjZlgemhricilUXkBRFZLyKrRGSoiDQQkZNE5CWgbh6beAGoKyKdgsyrDOwKNRZgE/A/YDXwJ65JaIA3r7z3c2fA8juBCvnY/rFcC9TDNS/NBWblbOPPDxG5AUjFtfsH2oX7vZgYZQnAFDsRuQ53APsYeDwfq3bCtcefiPs2XQ34HHgXWKqqvxxrZVXdDzzkPSTH7B3k7wA9DGgD1AGSgOHAHBEpC+z2lqkYsHxF8pdgcqWqX6jqn6q6V1UfA37HXYvINxHpAowAOqnq1hyzK3jbNjHKEoApViJSAxgN3AzcAnQTkbNDXP11VX3Ba7depar9VbWWqjZV1bEhbuNloBJweY7p3wEnhbgNcE0jr6tqhqpmqeokoArQzDvD2cSRzSencHQTS7goRye0PHkXpV/EXVBeFmSRphzZjGVijCUAU9zGAu+o6lyv7f8e4EURKZ3Xiqp6qLBvrqpZuB469+aY9T5wxAViEUn0es4IUEpEkrx2d4BFQFcROU5EEkTkeqAUkO7NnwzcLyJVvC6ZNwOTArat3kXwo3jbS/K2J977Jnrz6orImdmxicjduJ48X+Tn9yAi7XEXfq9U1YVB5pcGWgMf5We7Jsqoqj3sUSwPXLPNRqByjumfAI8U4ftOAh4OeJ0AfO/+/A9PKwWsA2oFTPsU9+068HGuNy8JGIf7pv8HrmmqY8C6pXFdOf8AfgMGBsxLwTUHVcsl3nODvO+n3rzmuLOVPcA273eXWoDfyVwgC9dclf34IGB+V2C6338z9ijah3gftjFxT0T64Jpw+hfx+1wHNFfVIUX5PoUhIguA3qr6vd+xmKJjCcAYY+KUXQMwxpg4ZQnAGGPilCUAY4yJU1FVCqJ69epar149v8Mwxpio8vXXX29V1eSc06MqAdSrV4/Fixf7HYYxxkQVEQl6l7w1ARljTJyyBGCMMXHKEoAxxsSpqLoGYIzx34EDB8jIyGDfvmDj5Bg/JSUlkZKSQqlSpUJa3hKAMSZfMjIyqFChAvXq1UMk30VITRFRVbZt20ZGRgb169cPaR1rAjLG5Mu+ffuoVq2aHfwjjIhQrVq1fJ2ZWQIwxuSbHfwjU34/F2sCMqag9uyBXbtg3z44eBDKlIHy5aFCBbADpIkClgCMyYsq/PQTLF0K338Pq1fDpk3wxx/Bl09Kgtq1oX59OPlk92jeHEqUKN64jcmDNQEZE4wqLF8OTz4JnTtDt27w6KPw2WdQtSpcdBHccQcMHcqUJo8wuelj8MADMHAgXHGFSwArVsDo0XDjjXDhhTBsGHz+ORwq9MBmcU9EuOuuuw6/HjlyJGlpaYdfP/3000yePBmAN998k+bNm5OQkHBEJYEDBw7Qs2dPTj75ZJo2bcpjjz12eN6HH35I48aNadiwISNGjMgzns8++4zTTjuNkiVL8tZbbx0xr0SJErRq1YpWrVpx2WWXHbXuo48+SmJiIlOmTDli+tSpU2nZsiUtW7bkjDPO4Ntv3eicmZmZnH322WRlZeUZV17sDMCYQPv2wcyZMH06pKdD6dJw+ulwww3Qti3UqnVU886P33hPjv7fhm3bYMkS+N//3OO996BGDejSBa68EqpVK/JdikWlS5dm+vTpDBkyhOrVqx8xLysri4kTJ7JkyRIAWrRowfTp07nllluOWO7NN99k//79LFu2jL1799KsWTOuueYa6tSpw+23385HH31ESkoKbdq04bLLLqNZs2a5xlO3bl0mTZrEyJEjj5pXpkwZli5dGnS9V199lVmzZrFixQquuuoqjj/+eC688EIA6tevz7x586hSpQoffPABffr0YcGCBSQmJnL++efz+uuvc+211+br95aTJQBjwLXnv/EGTJsGO3ZAs2Zw333um365cgXfbrVq7tv/hRdCVpY7g5gxA158ESZNcmcLPXtC8lF1uqLDU0+5JrFwatwYAr7dB1OyZEn69OnD6NGjeeSRR46YN2fOnMPfxgGaNm0adBsiwp49e8jKyuLPP/8kMTGRihUrsnDhQho2bEiDBg0A6N69O+++++4xE0B2kcqEhNAbVT7++GNeeeUV3n//fcqVK8fs2bPp0qULycnJtGrVijPOOOPwsu3atSMjI+Pw6y5dujBkyJBCJwBrAjLx7dAh922/SxcYNw6aNoUJE2DyZHdwLszBP6eSJaF9e3jmGXj7bejY0SWdzp3h2Wdh797wvVccuP3225k6dSo7d+48YvoXX3xB69at81z/qquuoly5ctSsWZO6desyaNAgqlatyoYNG6hTp87h5VJSUtiwYUOB49y3bx+pqam0a9eOd9555/D0Cy64gI8++ohy3t9YjRo1+PLLL2nVqtVR25gwYQKdOnU6/LpFixYsWrSowDFlszMAE7+++w5GjIA1a6BVK/jPf9w3/+JQt667ZtC7Nzz/PEycCP/9L/Tv784WoqUXUR7f1ItSxYoV6dGjB2PGjKFMmTKHp2/atCnX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&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;리드타임 9일간 평균수요는 180개이고, Service Level 95%를 유지하기 위한 안전재고는 24개라는 것을 알았습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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5T//saWke+2117j44otZsGABgwcP5le/+hUA9957L3V1dWRlZXH11VcD8MQTTzBy5EhGjhzJU089BUB2djbDhw/n1ltvZdy4cfzxj3/kzjvvbB7/xRdf5K677mr3c3jzzTeZNGkSWVlZ3HzzzVgsFp577rlmWRxy/vznP2+zvasopVibvdbl9mdc3FMf48ePV74ipzxHrdi/QtU01rh1/brj69S3p75Va46tUUdKj3hYusClor5C5ZTnKKvV2qnrDhQfUCv2r1Bb8rao4+XHPSrT999/f9rzDTkbzngcKzumlFKqydLU6vmc8hyllFINTQ1nnHMFnU6nxowZ0/xYvny5UkqplStXqilTpqh33nlHzZ8/v7k9oN58802llFIPPviguu2225RSSs2aNUsdPHhQKaXU5s2b1cyZM5VSSl1++eXqySeftL2GpiZVXl6ujh07pkaMGNH8WXz++efqxhtvVFarVVksFnX++eertWvXqu3bt6uRI0eqmpoaVVFRoQYOHKj+/OifVVldmTJbzMpqtSqr1aruv/9+9dhjjymllJoxY4a66667lFJKffrpp2r27NlKKaWeeOIJ9fvf/14ppdTJkyfV4MGDlVJK3XfffeqNN95QSilVVlamBg8erKqrq9Wrr76qMjIyVHl5uaqrq1P9+/dXOTm29zo8PLz5/XDIWF1draqqqlRmZqbauXOnOnbsmBIRtWnTJqWUUtXV1WrAgAGqsbFRKaXU1KlT1e7du8/4PNLS0lRRUZH6/vvv1cKFC5vb/+xnP1PLli1ThYWFauDAgc3tFyxYoNatW9dme+c+W+L8/bNYLWrF/hUK2K46eb/VzFBu4uoGd1tMT52OiLAlbwsHig+QEplCkD7IkyIGJJHBkW6Z9obEDcFsMZNbmUtRTRH9TP16VQxGW2aouXPn8q9//YvbbruNb7/9tvm4Tqdrzqt0zTXXcPHFF1NdXc3GjRu57LLLmts1NNgq361evbp5P0Gv1xMVFUVZWRlWZaXWXEt4UDgrV65k5cqVjB07FoDq6moOHTpEVVUVixcvJizMlmftggsuQCc6ooKjAKhrqmv1NbWWHv3yyy9n7ty5PPjgg7z33nvNsq5cuZIVK1Y0r0zq6+vJyckBYPbs2URF2cbKzMzk+PHjpKaennVh/fr1LF68uDlL7sUXX8y6deu44IILSEtLY8qU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&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;현재 EOQ는 미지인 상태이므로 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Q = 300이라 가정&lt;/code&gt;하고 재고 전략을 플롯으로 나타낸 것입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;재주문점&lt;/strong&gt;\(R\)&lt;strong&gt;은 204이고, 리드타임은 9일, 안전재고는 24&lt;/strong&gt;인것을 확인할 수 있습니다.&lt;/p&gt;

&lt;h4 id=&quot;2-p-system&quot;&gt;2. P-System&lt;/h4&gt;

&lt;p&gt;A사가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;P-System&lt;/code&gt;을 이용하는 경우, 주문관리를 어떻게 해야하는지도 알아보겠습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;주문주기는 보기에서 제시된 16일을 사용&lt;/strong&gt;하도록 하겠습니다.&lt;/p&gt;

&lt;p&gt;P-System에서는 안전재고를 고려할 때, 재고고갈을 고려해야 하는 기간이 &lt;strong&gt;Lead time + Order period&lt;/strong&gt;입니다.&lt;/p&gt;

&lt;p&gt;즉, 리드타임 9일과 주문주기 16일을 합하여 총 25일 동안의 재고고갈을 고려해서 안전재고를 설정해야 합니다.&lt;/p&gt;

\[25일\ 동안의\ 제품\ 수요\ X''=25X\]

\[X'' \sim N(500,\ 25^2)\]

&lt;p&gt;당연히 \(X''\)은 위와 같은 정규분포를 따르겠죠?&lt;/p&gt;

&lt;p&gt;그럼 \(X''\)에 대한 확률밀도함수를 그려보겠습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;\(X''\)은 위와 같은 pdf(probability density function)를 가지게 될 것입니다.&lt;/p&gt;

&lt;p&gt;마찬가지로 A사의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;목표 Service Level이 95%&lt;/code&gt;라고 했으니 그에 맞는 안전재고를 설정해주어야 합니다.&lt;/p&gt;

&lt;p&gt;문제에서 \(P(Z&amp;gt;1.6)=0.05\)라고 제시되어 있기 때문에 이를 기반으로 \(P(X''&amp;lt;T)=0.95\)가 성립하는 \(T\)를 찾아줍니다.&lt;/p&gt;

\[Standardazation\\
Z=\frac{X''-\mu}{\sigma}=\frac{X''-500}{25}\\
P(Z&amp;lt;1.6)=0.95,\ \ P(\frac{X''-500}{25}&amp;lt;1.6)=0.95\]

&lt;p&gt;위 풀이를 통해 \(T\)가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;540&lt;/code&gt;라는 것을 알 수 있습니다.&lt;/p&gt;

&lt;p&gt;이때 \(T\)가 최대 재고량 목표치입니다. 즉, 16일 주기로 재고수준을 540으로 맞추도록 부족분을 주문하는 것입니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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pZfo1q0bDRs2pG3bthx55JE/22dBQcHW9926dWPIkCE7nQDS6QKaC7SQ1ExSDaAnMD1pnelAn+h1d2BWcdPpRcv+ARwXNXXk5/cUnKtYy5bBiBHQrRs88QQceSSMGQPPPgtXXAG//nXKk3+JqlaFAw6A88+HRx+FqVPDZ7z6auguuuQSWLiwxN247V100UVMmTKFNWvW/Kz9zTff5LDDDvtZ2/3338/BBx9Mv379WL16NQBffPEF++yz7dq2adOmfPHFF0W2p2v8+PF07tx56/v169fTvn17jjjiCJ555pmt7SeccAIvv/wyu+4apqVu1KgRb731Fm3bti1xnwcddBBz585NO6ailPgNwMw2SRoEzASqAhPMbKGkEcA8M5sOjAcmSconXPn3LNxe0qdAXaBGNDn4SdEIomujbe4mTLp97k4fjXOltXYtjBsH06ZBlSrhar93b9gr5S2pnde8OVxzDQwaBI89Bo88An36hK6hyy8P3ziySQlX6uWpbt269O7dm3vvvZdddtlla/uXX37JgQceuPX9hRdeyNChQ5HE0KFDufLKK5kwYQKprlElsWXLlpTt6Zg8eTLz5s3jtdde29r2+eef07hxYz7++GOOP/54fvWrX/HLX/4y7eOcPXs248eP54033tjaVrVqVWrUqMHatWupU6dO2vtKltaDYGY2A5iR1HZ9wuv1wBlFbJtXRPtnwDHpBupcmTKDF14IXTJr1kCXLuEmboMixy6Urdq1oW9f6NEjfDN46CF4800499yQgHbk20YOuuyyyzj00EM599xt14+77LLLz8bC75WQzM8//3xOPfVUIFzZL1u2bXxLQUEBjRs3BiiyvTivvPIKI0eO5LXXXqNmzZpb2wu33X///TnuuON49913004A77//Pueddx4vvPACDZL+bW7YsIFatWqltZ+ieC0gl3tWrAjdOtdfD/vuC5MmwdChFXfyT1S7Npx3Hjz5JPzv/8Jf/xq+EUQ3I13x6tevT48ePRg/fvzWtgMPPJD8/Pyt77/88sutr59++mkOOig8ktSlSxemTp3Khg0b+OSTT/jwww/p0KEDhx9+OB9++CGffPIJGzduZOrUqVtH7wwZMoSnn36aZO+++y4XXHAB06dPp1GjRlvbV69ezYYNGwD45ptvePPNN4u9l5Do888/5/TTT2fSpEm0bNnyZ8tWrlxJ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&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;안전재고는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;40개&lt;/code&gt;라는 것을 알 수 있겠죠?&lt;/p&gt;

\[Safety\ stock=T-\mu=540-500=40\]

&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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7BCRlthGEmXz70ZgyxSmo6NTj6xfv56RI0cybdo0unTpwnXXXYdSiu+++47p06efV2/iRFuW07Vr1zJ48GD69OnDNddcQ25uLmALt/PYY4/Rp08fevbsyYEDBzhx4gRvvfUWL7/8MrGxsWzYsIGEhARGjRpFTEwMo0aN4uRJ23Tl/PnzWbhwIZdeein3338/0dHRnDt3DgCr1UrHjh1JTU2lMs6dO8fUqVPp378//fv3Z+PGjVitViIjI8nM/KsT7dixI2fPnq2wvk7NccgEtz2ngUEplWPfHwv8SykVVqbOCaCfUipVRNYAd4rIR9gmtrOUUqeru86BI8cZOXLkecemT5/O7bffTn5+PuPHj7/gnPnz5zN//nxSU1OZNm3aBeW33XYbM2bMIDExkTlz5lxQfu+99zJx4kQOHjzILbfcckH5I488wujRo9m1axd33333BeXPPPMMQ4YMYdOmTTz88MMXlL/yyivExsaybt06nnrqqQvK3377bTp37sxXX33Fiy++eEH5+++/T5s2bfj444958803LyhfvXo1ISEhLFu2jGXLll1Q/u233+Lj48Mbb7zBJ598ckH5+vXrAXjhhRf4+uuvzyvz9vbmu+++A+DJJ5/kp59+AkChsJpSCWu5jE8//RSAhx56iM2bN593fkREBCtW2LJn3n333ezateu88k6dOrFokS0Pzs0338yhQ4fOK4+NjeWVV14BYPbs2SQlJZ1XPnjwYJ599lkApk6dSlpa2nnlo0aN4p///CcAV1xxBQUFBeeVT5gwgfvuuw/ggu8dVP7de+yxxzAYDAQHB/P65rPsTc6isLDggvPd3T1wc3NDKVVludVqpajoLw+XqCBPbhsYSqtWrWjWrBn5+fkkJiaed65SqrST37lzJ2vWrCEsLIxrr72WDz/8kF69erF582Zyc3MxF+Xx9ttvM2LECLZs2cI//vEPFi1aRNeuXfnvf//LM888w7x58zCZTFgsFj788ENWrlzJc889x5IlS5g3bx5KKW688UbA9psbN24c9957L++//z633norL7/8MllZWZw4cYI33ngDo9FIs2bN+OCDD5g1axZfffUVUVFRpKWllT6nzp1tGXXz8/M5ePAg9957L7NmzaJv376cPn2aBQsWsH//fkaPHs0bb7zB1KlT2b17N2FhYeTk5PDoo49yzz33EBkZyeHD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&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;최대 재고 목표량 \(T\)=540, 안전재고 40, 주문주기 16일, 리드타임 9일&lt;/strong&gt;의 P-System 주문전략입니다.&lt;/p&gt;

&lt;p&gt;(plot이 다소 어긋난 부분이 있지만 너그러이 양해해주시면 감사하겠습니다.)&lt;/p&gt;</content><author><name></name></author><category term="[&quot;others&quot;]" /><summary type="html">2018 CPA 경영학 20번 문제에 대한 자세한 분석</summary></entry><entry><title type="html">Bookmark Project</title><link href="https://unprettycoder.github.io/Bookmark-Project/" rel="alternate" type="text/html" title="&lt;Django Web Programming&gt; Bookmark Project" /><published>2020-03-24T00:00:00+00:00</published><updated>2020-03-24T00:00:00+00:00</updated><id>https://unprettycoder.github.io/Bookmark-Project</id><content type="html" xml:base="https://unprettycoder.github.io/Bookmark-Project/">&lt;h2 id=&quot;bookmark-project&quot;&gt;BookMark Project&lt;/h2&gt;

&lt;hr /&gt;

&lt;p&gt;이번 프로젝트에서 만들어 볼 것은 간단한 북마크 서비스이다.&lt;/p&gt;

&lt;p&gt;목록 페이지, 북마크 추가, 북마크 상세, 북마크 수정, 북마크 삭제, 관리자 페이지를 생성/조작한다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;create-project&quot;&gt;Create Project&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ pip install django&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ django-admin startproject config .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py createsuperuser&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Django 프로젝트 기본 생성/테스트 과정이다.&lt;/p&gt;

&lt;h3 id=&quot;add-bookmark-application&quot;&gt;Add BookMark application&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py startapp bookmark&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;create-model&quot;&gt;Create Model&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/models.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.db&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;site_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CharField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;max_length&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;URLField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Site URL'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'django.contrib.admin'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'django.contrib.auth'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ... ,
&lt;/span&gt;	&lt;span class=&quot;s&quot;&gt;'bookmark'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py makemigrations bookmark&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py migrate bookmark&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;enroll-models-in-admin-page&quot;&gt;Enroll Models in Admin Page&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/admin.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;127.0.0.1:8000/admin&lt;/code&gt;에 접속하여 관리자 페이지에 모델이 정상적으로 등록되었는지 확인&lt;/p&gt;

&lt;p&gt;(관리자 페이지에서 북마크를 추가할 수 있다. 그러나 원하는대로 출력되지는 않는다.)&lt;/p&gt;

&lt;h3 id=&quot;add-__str__-method-in-models&quot;&gt;Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;__str__()&lt;/code&gt; method in Models&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/models&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.db&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__str__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;# printed value when printing Object
&lt;/span&gt;        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;name : &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;, addr : &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(이제 관리자 페이지에서 목록을 확인하면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name : google, addr : google.com&lt;/code&gt;과 같은 형식으로 출력된다.)&lt;/p&gt;

&lt;h3 id=&quot;create-listview&quot;&gt;Create ListView&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.views.generic.list&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ListView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookmarkListView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ListView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Django에서 제공하는 Generic view를 이용하여 클래스형 뷰로 구성한다. [simple]&lt;/p&gt;

&lt;h3 id=&quot;connect-url&quot;&gt;Connect URL&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'bookmark/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'bookmark.urls'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'admin/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;urls&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.views&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkListView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkListView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'list'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;(아직 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localhost:8000/bookmark/&lt;/code&gt;에 접속해도 템플릿 파일이 없다는 오류 메시지를 출력한다.)&lt;/p&gt;

&lt;h3 id=&quot;make-templates-bookmark_listhtml&quot;&gt;Make Templates [bookmark_list.html]&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_list.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- &amp;lt;html&amp;gt;&amp;lt;head&amp;gt; ... --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn-group&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-info&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Add Bookmark&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;table&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;table&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;thread&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;#&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Site&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;URL&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Modify&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Delete&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/thread&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;tbody&amp;gt;&lt;/span&gt;
        	{% for bookmark in object_list %}
            	&lt;span class=&quot;nt&quot;&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
            		&lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&lt;/span&gt;{{ forloop.counter }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ bookmark.site_name }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{ bookmark.url }}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;targer=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;_blank&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ bookmark.url }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;td&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-success btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Modify&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-danger btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Delete&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
            {% endfor %}
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localhost:8000/bookmark/&lt;/code&gt;에 접속하여 관리자 페이지에서 추가한 북마크가 정상 출력되는지 확인&lt;/p&gt;

&lt;h3 id=&quot;implement-sub-functions-of-bookmark&quot;&gt;Implement Sub-Functions of Bookmark&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.views.generic.edit&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reverse_lazy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookmarkCreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fields&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'site_name'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'url'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;success_url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reverse_lazy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'list'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;template_name_suffix&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'_create'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.views&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkListView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkCreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkLustView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'list'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'add/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkCreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'add'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_create.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		{% csrf_token %}
        &lt;span class=&quot;c&quot;&gt;&amp;lt;!-- CSRF[Cross Site Request Forgery] 공격으로부터 서버를 지키기 위한 옵션 --&amp;gt;&lt;/span&gt;
		{{ form.as_p }}
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Add&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-info btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localhost:8000/bookmark/add/&lt;/code&gt;에 접속하면 북마크를 추가할 수 있는 페이지가 출력된다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_list.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'add' %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-info&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Add Bookmark&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark_list.html&lt;/code&gt;파일의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Add Bookmark&lt;/code&gt; 링크가 작동할 수 있도록 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;href&lt;/code&gt;를 설정해준다.&lt;/p&gt;

&lt;h3 id=&quot;create-bookmark-detail-page&quot;&gt;Create Bookmark Detail Page&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.views.generic.detail&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookmarkDetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.views&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkLustView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'list'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'add/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkCreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'add'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'detail/&amp;lt;int:pk&amp;gt;/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkDetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'detail'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_detail.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
	{{ object.site_name }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
	{{ object.url }}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_list.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'detail' pk=bookmark.id %}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ bookmark.site_name }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark_list.html&lt;/code&gt;에 상세 정보를 보여줄 수 있도록 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;href&lt;/code&gt;를 수정한다.&lt;/p&gt;

&lt;h3 id=&quot;bookmark-edit-function-implementation&quot;&gt;Bookmark Edit-Function Implementation&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.views.generic.edit&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookmarkUpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fields&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'site_name'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'url'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;template_name_suffix&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'_update'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'update/&amp;lt;int:pk&amp;gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkUpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'update'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_update.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	{% csrf_token %}
	{{ form.as_p }}
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Update&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-info btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;	

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_list.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'update' pk=bookmark.id %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-success btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Modity&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/models.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;	&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;get_absolute_url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'detail'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;bookmark-delete-function-implementation&quot;&gt;Bookmark Delete-Function Implementation&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.views.generic.edit&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookmarkDeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;success_url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reverse_lazy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'list'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'delete/&amp;lt;int:pk&amp;gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookmarkDeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'delete'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_list.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'delete' pk=bookmark.id %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-danger btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Delete&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark_list.html&lt;/code&gt;의 Delete 부분 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;href&lt;/code&gt;를 수정하여 목록 제거 작업을 수행할 수 있도록 한다.&lt;/p&gt;

&lt;p&gt;(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Delete&lt;/code&gt;버튼을 누르면 삭제 페이지로 이동하지만 아직 오류 메시지 출력)&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_confirm_delete.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		{% csrf_token %}
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;alert alert-danger&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Do you wnate to delete Bookmark &quot;{{ object }}&quot;?&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Delete&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-danger&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;삭제를 실수로 누를 때를 대비하여 재확인 페이지를 구현하여 확인한다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;set-design&quot;&gt;Set Design&lt;/h2&gt;

&lt;h3 id=&quot;expend-template&quot;&gt;Expend Template&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/setting.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;TEMPLATES&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;s&quot;&gt;'BACKEND'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'django.template.backends.django.DjangoTemplates'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s&quot;&gt;'DIRS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BASE_DIR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;templates&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)],&lt;/span&gt;
		&lt;span class=&quot;s&quot;&gt;'APP_DIRS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s&quot;&gt;'OPTIONS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;s&quot;&gt;'context_processors'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
				&lt;span class=&quot;s&quot;&gt;'django.template.context_processors.debug'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;s&quot;&gt;'django.template.context_processors.request'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;s&quot;&gt;'django.contrib.auth.context_processors.auth'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;s&quot;&gt;'django.contrib.messages.context_processors.messages'&lt;/span&gt;
			&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;templates/base.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;charset=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;{% block title %}{% endblock %}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
	{% block content %}
	
	{% endblock %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;block&lt;/code&gt;: 기준 템플릿에 다른 템플릿에서 껴넣을 공간을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;block&lt;/code&gt; 태크를 사용해 만들어두고 하위 템플릿에서는 이 블록에 껴넣을 내용을 결정하여 내용을 채운다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_confirm_delete.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}Confirm Delete{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	{% csrf_token %}
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;alert alert-danger&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Do you want to delete Bookmark &quot;{{object}}&quot;?&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Delete&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-danger&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;

{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extends&lt;/code&gt;: 상속해 올 기준이 되는 템플릿을 지정&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_create.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}Bookmark Add{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	{% csrf_token %}
	{{ form.as_p }}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_detail.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}Detail{% endblock %}

{% block content %}
{{ object.site_name }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
{{ object.url }}
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_list.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}Bookmark List{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn-group&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'add' %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-info&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Add Bookmark&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;table&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;table&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;thread&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;#&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Site&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;URL&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Modify&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;th&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scope=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Delete&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/thread&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;tbody&amp;gt;&lt;/span&gt;
        	{% for bookmark in object_list %}
            	&lt;span class=&quot;nt&quot;&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
            		&lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&lt;/span&gt;{{ forloop.counter }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'detail' pk=bookmark.id %}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ bookmark.site_name }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{ bookmark.url }}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;targer=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;_blank&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ bookmark.url }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;td&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'update' pk=bookmark.id %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-success btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Modity&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'delete' pk=bookmark.id %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-danger btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Delete&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
            {% endfor %}
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_update.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}Bookmark Update{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	{% csrf_token %}
	{{ form.as_p }}
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Update&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-info btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;지금까지 템플릿의 확장을 이용하지 않고 작성했던 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;html&lt;/code&gt;파일들을 모두 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;base.html&lt;/code&gt;에서 확장한 형태로 수정한다.&lt;/p&gt;

&lt;h3 id=&quot;using-bootstrap&quot;&gt;Using Bootstrap&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://getbootstrap.com/&lt;/code&gt;(부트스트랩 공식 홈페이지)에 접속하여 부트스트랩을 이용하도록 한다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bootstrap&lt;/code&gt;: One of css Frameworks &lt;design&gt;&lt;/design&gt;&lt;/p&gt;

&lt;p&gt;홈페이지 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Nav&lt;/code&gt;의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Documentation&lt;/code&gt;에 들어가서 CSS, JS 참고 코드를 긁어서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;base.html&lt;/code&gt;의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;head&amp;gt;&lt;/code&gt;에 추가한다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;templates/base.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- skip other contents --&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;integrity=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;crossorigin=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;anonymous&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;https://code.jquery.com/jquery-3.4.1.slim.min.js&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;integrity=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;crossorigin=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;anonymous&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;integrity=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;crossorigin=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;anonymous&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;integrity=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;crossorigin=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;anonymous&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;이것을 적용한 것 만으로도 페이지의 디자인이 훨씬 더 아름다워진다. &lt;class attr=&quot;&quot;&gt;&lt;/class&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bootstrap&lt;/code&gt;은 HTML 태그의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;class&lt;/code&gt; 속성을 기준으로 css를 적용한다. [class= “btn btn-info btn-sm” 등]&lt;/p&gt;

&lt;h3 id=&quot;create-navigation-bar-in-basehtml&quot;&gt;Create Navigation Bar in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;base.html&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;templates/base.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- &amp;lt;body&amp;gt; 내부 --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;container&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;nav&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbar navbar-expand-lg navbar-light bg-light&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbar-brand&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Django bookmark&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;button&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbar-toggler&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;button&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;data-toggle-&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;collapse&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;data-target=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#navbarSupportedContent&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;aria-controls=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbarSupportedContent&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;aria-expanded=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;false&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;aria-label=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Toggle navigation&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;span&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbar-toggle-icon&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
        
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;collapse navbar-collapse&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbarSupportedContent&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;ul&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbar-nav mr-auto&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item aciton&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
                	&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Home &lt;span class=&quot;nt&quot;&gt;&amp;lt;span&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sr-only&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;(current)&lt;span class=&quot;nt&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
            {% block content %}
            {% endblock %}
            
            {% block pagination %}
            {% endblock %}
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;add-paging-function&quot;&gt;Add Paging-Function&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookmarkListView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ListView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Bookmark&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;paginate_by&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# how many objects printed at one page [6]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bookmark/templates/bookmark/bookmark_list.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% block pagination %}
	{% if is_paginated %}
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;ul&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;pagination justify-content-center pagination-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		{% if page_obj.has_previous %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page-link&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'list' %}? page={{ page_obj.previous_page_number }}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;tabindex=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;-1&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Previous&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
		{% else %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page-item disabled&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page=link&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;tabindex=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;-1&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Previous&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
		{% endif %}
		
		{% for object in page_obj.paginator.page_range %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page-item {% if page_obj.number == forloop.counter %}disabled{% endif %}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page-link&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{ request.path }}?page={{ forloop.counter }}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ forloop.counter }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
		{% endfor %}
		
		{% if page_obj.has_next %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page-link&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'list' %}?page={{ page_obj.next_page_number }}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt; Next&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
		{% else %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page-item disabled&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;page-link&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Next&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
		{% endif %}
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
	{% endif %}
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;이제 북마크 목록 페이지에 1 페이지에 6 항목씩 출력되는 페이징 기능이 추가되었다.&lt;/p&gt;

&lt;h3 id=&quot;using-static-files&quot;&gt;Using Static Files&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;STATICFILES_DIRS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BASE_DIR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'static'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;이후 프로젝트 하위 디렉터리로 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;static&lt;/code&gt; 디렉터리를 생성한다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;static/style.css&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-css highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;100%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;templates/base.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% load static %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% static 'style.css' %}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;deploy-service&quot;&gt;Deploy Service&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://github.com/&lt;/code&gt;[깃허브]에서 배포하는 과정&lt;/p&gt;

&lt;p&gt;깃허브를 통해 배포하기 위해 프로젝트 하위에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt;파일을 생성하고, 다음과 같이 작성한다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; (여기에 입력된 파일은 커밋하지 않는다. [와일드카드 문자 사용가능])&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-txt&quot;&gt;*.pyc
*~
/venv
__pycache__
db.sqlite3
.DS_Store
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;DEBUG&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;ALLOWED_HOSTS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'*'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ git init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ git add -A&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ git commit -m &quot;Bookmark Service&quot;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ git remote add origin https://github.com/unprettycoder/bookmark.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ git push -u origin master&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;로그인 후 코드 업로드&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pythonanywhere&lt;/code&gt;[파이썬 애니웨어]를 이용하여 배포할 수도 있다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Address&lt;/code&gt; : &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://www.pythonanywhere.com/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PythonAnywhere&lt;/code&gt;에 대해서는 차후 다시 공부하도록 한다.&lt;/p&gt;</content><author><name></name></author><category term="[&quot;Python&quot;]" /><summary type="html">Bookmark Project programmed by python django</summary></entry><entry><title type="html">Dstagram Project</title><link href="https://unprettycoder.github.io/Dstagram-Project/" rel="alternate" type="text/html" title="&lt;Django Web Programming&gt; Dstagram Project" /><published>2020-03-24T00:00:00+00:00</published><updated>2020-03-24T00:00:00+00:00</updated><id>https://unprettycoder.github.io/Dstagram-Project</id><content type="html" xml:base="https://unprettycoder.github.io/Dstagram-Project/">&lt;h2 id=&quot;dstagram-project&quot;&gt;Dstagram Project&lt;/h2&gt;

&lt;h3 id=&quot;infra-structure-of-the-project&quot;&gt;Infra-structure of the project&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo_list&lt;/code&gt;: 사진 목록, 각 사진별 작성자, 텍스트 설명, 댓글달기 버튼이 함께 출력&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo_create_view&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo_update_view&lt;/code&gt; : 사진을 추가 할 때는 사진과 텍스트 설명을 입력, 수정 할 때는 기존의 정보를 그대로 출력하고 수정&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;detail_view&lt;/code&gt;: 사진의 상세 정보를 확인, 수정/삭제, 댓글 기능을 이용가능&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo_delete_view&lt;/code&gt;: 사진을 삭제 가능, 삭제 확인 메시지 출력/확인하면 사진 삭제&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;login_view&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;logout_view&lt;/code&gt;: 로그인, 로그아웃 기능 제공&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;register&lt;/code&gt;: 회원가입을 위한 뷰, 회원 가입을 할 수 있도록 폼 출력 [ModelForm 사용]&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;create-project&quot;&gt;Create Project&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ pip install django&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ django-admin startproject config .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manag.py migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py createsuperuser&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;create-photo-app&quot;&gt;Create Photo App&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py startapp photo&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'django.contrib.admin'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'django.contrib.auth'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ... ,
&lt;/span&gt;	&lt;span class=&quot;s&quot;&gt;'photo'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;create-model&quot;&gt;Create Model&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.photo/models.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.db&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib.auth.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;author&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ForeignKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on_delete&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CASCADE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;related_name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'user_photos'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;photo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ImageField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;upload_to&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photos/%Y/%m/%d'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photos/no_image.png'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TextField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;created&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DateTimeField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;auto_now_add&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;updated&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DateTimeField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;auto_now&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;author&lt;/code&gt;: ForeignKey를 사용하여 User 테이블과 관계 생성, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;on_delete&lt;/code&gt;는 연결된 모델이 삭제될 경우 현재 모델의 값을 어떻게 할 지 정하는 인자이다.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;on_delete&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;action&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;CASCADE&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;연결된 객체가 지워지면 하위 객체도 함께 삭제&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;PROTECT&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;하위 객체가 남아있으면 연결된 객체가 지워지지 않음&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SET_NULL&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;연결된 객체만 삭제하고 필드 값을 NULL로 설정&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SET_DEFAULT&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;연결된 객체만 삭제하고 필드 값을 DEFAULT값으로 변경&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SET()&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;연결된 객체만 삭제하고 필드 값을 지정한 값으로 변경&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;DO_NOTHING&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;아무일도 하지 않음&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo&lt;/code&gt;: 사진 필드, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;upload_to&lt;/code&gt;는 사진이 업로드 될 경로, 업로드가 진행되지 않을 경우 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default&lt;/code&gt;값으로 대체됨&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;text&lt;/code&gt;: 사진에 대한 설명을 저장한 텍스트 필드&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;created&lt;/code&gt;: 글 작성 일자를 저장하기 위한 날짜시간 필드, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto_now_add&lt;/code&gt;는 객체 추가 시 자동으로 값을 설정할 지 여부&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;updated&lt;/code&gt;: 글 수정 일자를 저장하기 위한 날짜시간 필드, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto_now&lt;/code&gt;는 객체 수정 시 자동으로 값을 설정할 지 여부&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.photo/models.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;	&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Meta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;ordering&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'-updated'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Meta&lt;/code&gt;의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ordering&lt;/code&gt;은 정렬 기준이다. [‘-updated’]로 설정했으므로 수정 일자 기준 내림차순 정렬된다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.photo/models.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;	&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__str__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;author&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;created&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;strftime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;%Y-%m-%d %H:%M:%S&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    	&lt;span class=&quot;c1&quot;&gt;# __str__()에는 작성자 + 작성일자의 문자열 반환
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.photo/models.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;	&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;get_absolute_url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo:photo_detail'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)]);&lt;/span&gt;
    	&lt;span class=&quot;c1&quot;&gt;# 객체의 상세 페이지 주소를 반환
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py makemigrations photo&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;makemigrations&lt;/code&gt; 명령을 이용해 모델의 변경사항을 기록&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ pip install pillow&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageField&lt;/code&gt;를 이용하기 위해 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pillow&lt;/code&gt; 패키지를 설치&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py migrate photo 0001&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;migrate&lt;/code&gt; 명령을 이용해 데이터베이스에 적용&lt;/p&gt;

&lt;h3 id=&quot;enroll-model-in-admin-site&quot;&gt;Enroll Model in Admin Site&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/admin.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;upload-directory-management&quot;&gt;Upload Directory Management&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;MEDIA_URL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'/media/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# MEDIA_URL : 파일을 브라우저로 서빙할 때 보여줄 가상 URL [Security]
&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MEDIA_ROOT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BASE_DIR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'media'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# 이제 어떤한 앱에서 업로드하더라도 프로젝트 루트 및에 'media'라는 디렉터리에 업로드된다. [각 앱별로]
# EX) &quot;Dstagram/media/photos/YEAR/MONTH/DAY/example.png&quot;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;customizing-admin-page&quot;&gt;Customizing Admin Page&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/admin.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PhotoAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ModelAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;list_display&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'id'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'author'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'created'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'updated'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;raw_id_fields&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'author'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;list_filter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'created'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'updated'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'author'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;search_fields&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'created'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;ordering&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'-updated'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'-created'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	
&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PhotoAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;list_display&lt;/code&gt;: 관리자 페이지 목록에 보일 필드를 설정&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;list_filter&lt;/code&gt;: 필터 기능을 사용할 필드를 선택&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;search_fields&lt;/code&gt;: 검색 기능을 통해 검색할 필드를 선택&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ordering&lt;/code&gt;: 모델의 기본 정렬값이 아닌 관리자 사이트 기본 정렬값을 설정&lt;/p&gt;

&lt;h3 id=&quot;create-view&quot;&gt;Create View&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/views.py&lt;/code&gt; &lt;functional view=&quot;&quot;&gt;&lt;/functional&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.shortcuts&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;photo_list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;photos&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;objects&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'photo/list.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photos'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;photos&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/views.py&lt;/code&gt; &lt;classical view=&quot;&quot;&gt;&lt;/classical&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.views.generic.edit&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.shortcuts&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;redirect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PhotoUploadView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fields&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;template_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'photo/upload.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	
	&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;form_valid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;instance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;author_id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;is_valid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;instance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;redirect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;render_to_response&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'form'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        
&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PhotoDeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;success_url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;template_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'photo/delete.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    
&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PhotoUpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;fields&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;template_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'photo/update.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;connect-url&quot;&gt;Connect URL&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.views.generic.detail&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.views&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;app_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'photo'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;photo_list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo_list'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'detail/&amp;lt;int:pk&amp;gt;/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;template_name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo/detail.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo_detail'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'upload/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PhotoUploadView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo_upload'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'delete/&amp;lt;int:pk&amp;gt;/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PhotoDeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo_delete'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'update/&amp;lt;int:pk&amp;gt;/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PhotoUpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo_update'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'admin/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;urls&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo.urls'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;distribute--expand-template&quot;&gt;Distribute &amp;amp; Expand Template&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;templates/base.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;charset=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width=device-width, initial-scale=1, shrink-to-fit=no&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;integrity=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;crossorigin=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;anonymous&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;https://code.jquery.com/jquery-3.4.1.slim.min.js&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;integrity=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;crossorigin=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;anonymous&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;integrity=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;crossorigin=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;anonymous&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;integrity=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;crossorigin=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;anonymous&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Dstagram {% block title %}{% endblock %}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;container&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;header&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;header clearfix&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;nav&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbar navbar-expand-lg navbar-light bg-light&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;navbar-brand&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Dstagram&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;ul&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;active nav-link&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Home&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
				
				{% if user.is_authenticated %}
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Welcome, {{ user.get_username }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'photo:photo_upload' %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt; Upload&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Logout&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
				{% else %}
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Login&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Signup&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
				{% endif %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
	{% block content %}
	{% endblock %}
	
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;footer&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;footer&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span class=&quot;ni&quot;&gt;&amp;amp;copy;&lt;/span&gt; 2018 Baepeu. Powered By Django 2&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;TEMPLATES&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;s&quot;&gt;'BACKEND'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'django.template.backends.django.DjangoTemplates'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s&quot;&gt;'DIRS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BASE_DIR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;templates&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)],&lt;/span&gt;
		&lt;span class=&quot;s&quot;&gt;'APP_DIRS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;s&quot;&gt;'OPTIONS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;s&quot;&gt;'context_processors'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;
				&lt;span class=&quot;s&quot;&gt;'django.template.context_processors.debug'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;s&quot;&gt;'django.template.context_processors.request'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;s&quot;&gt;'django.contrib.auth.context_processors.auth'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;s&quot;&gt;'django.contrib.messages.context_processors.messages'&lt;/span&gt;
			&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/templates/photo/list.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}- List{% endblock %}

{% block content %}
	{% for post in photos %}
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;img&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{post.photo.url}}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width:100%;&quot;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;button&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;button&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-xs btn-info&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
					{{post.author.username}}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{post.text|linkbreaksbr}}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text-right&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'photo:photo_detail' pk=post.id %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-xs btn-success&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;댓글달기&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	{% endfor %}
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/templates/photo/upload.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}- Upload{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;enctype=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;multipart/form-data&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			{{ form.as_p }}
			{% csrf_token %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-primary&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Upload&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;enctype&lt;/code&gt;: form 태그로 작성한 정보를 어떤 형태로 인코딩해서 서버로 전달할 것인지 결정하는 옵션&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;enctype&lt;/th&gt;
      &lt;th&gt;Discribtion&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;application/x-www-form-urlencoded&lt;/td&gt;
      &lt;td&gt;기본 옵션, 모든 문자열을 인코딩해 전달&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;multipart/form-data&lt;/td&gt;
      &lt;td&gt;파일 업로드 시 사용하는 옵션, 데이터를 문자열로 인코딩하지 않고 전달&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;text/plain&lt;/td&gt;
      &lt;td&gt;띄어쓰기만 +로 변환하고 특별한 인코딩 없이 전달&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/templates/photo/detail.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}
{% block title %}
	{{object.text|truncatechars:10}}
{% endblock %}

{% block content %}
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;img&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{object.photo.url}}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width:100%;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;button&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;button&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-outline-primary btn-sm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
				{{object.author.username}}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{object.text|linebreaksbr}}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
			
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'photo:photo_delete' pk=object.id %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-outline-danger btn-sm float-right&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Delete&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'photo:photo_update' pk=object.id %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-outline-success btn-sm float-right&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Update&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/templates/photo/update.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}- Update{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;enctype=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;multipart/form-data&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			{{ form.as_p }}
			{% csrf_token %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-primary&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Update&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/templates/photo/delete.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}- Delete{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;alert alert-info&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			Do you want to delete {{object}}?
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			{{ form.as_p }}
			{% csrf_token %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-danger&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Confirm&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.conf.urls.static&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.conf&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MEDIA_URL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document_root&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MEDIA_ROOT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;static&lt;/code&gt;을 사용하여 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MEDIA_URL&lt;/code&gt;에 해당하는 주소를 가진 요청에 대해서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MEDIA_ROOT&lt;/code&gt;에서 찾도록 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;urlpatterns&lt;/code&gt;에 추가&lt;/p&gt;

&lt;h3 id=&quot;create-account-application&quot;&gt;Create Account Application&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py startapp accounts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'django.contrib.admin'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ... ,
&lt;/span&gt;	&lt;span class=&quot;s&quot;&gt;'photo'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'accounts'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;add-loginlogout-function&quot;&gt;Add Login/Logout Function&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accounts/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib.auth&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'login/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LoginView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'login'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'logout/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LogoutView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;template_name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'registration/logout.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'logout'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'admin/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;urls&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'photo.urls'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'accounts/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'accounts.urls'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accounts/templates/registration/login.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}
{% block title %}- Login{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;alert alert-info&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Please enter your login informations.&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			{{form.as_p}}
			{% csrf_token %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-primary&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Login&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accounts/templates/registration/logout.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}
{% block title %}- Logout{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;alert alert-info&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;You have been successfully loggedout.&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-primary&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'login' %}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Click to Login&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;templates/base.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'logout' %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Logout&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-item&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'login' %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Login&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;base.html&lt;/code&gt;에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;login, logout&lt;/code&gt;의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;href&lt;/code&gt;속성을 수정한다.&lt;/p&gt;

&lt;p&gt;로그인 후 이동할 페이지가 ‘/profile’로 기본값 설정되어있기 때문에 이 설정을 수정한다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;LOGIN_REDIRECT_URL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;add-signup-function&quot;&gt;Add SignUp Function&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accounts/forms.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib.auth.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;forms&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;RegisterForm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;forms&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ModelForm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;password&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;forms&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CharField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Password'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;forms&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PasswordInput&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;password2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;forms&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CharField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Repeat Password'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;forms&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PasswordInput&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	
	&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Meta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;fields&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'username'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'first_name'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'last_name'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'email'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
		
	&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;clean_password2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cleaned_data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'password'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'password2'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]:&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;raise&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;forms&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ValidationError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Passwords not matched!'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'password2'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accounts/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.shortcuts&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.forms&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RegisterForm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'POST'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;user_form&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RegisterForm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_form&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;is_valid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;new_user&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_form&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;commit&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;new_user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;set_password&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user_form&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cleaned_data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'password'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;new_user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'registration/register_done.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'new_user'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;new_user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;user_form&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RegisterForm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'registraion/register.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'form'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_form&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accounts/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.views&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ... ,
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'register/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'register'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accounts/templates/registration/register.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}- Registration{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;alert alert-info&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Please enter your account informations.&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			{{form.as_p}}
			{% csrf_token %}
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-primary&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Register&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accounts/templates/registration/register_done.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
{% extends 'base.html' %}

{% block title %}- Registration Done{% endblock %}

{% block content %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;alert alert-info&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Registration Success. Welcome, {{new_user.username}}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn btn-info&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Move to main&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;templates/base.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'register' %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;nav-link&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Signup&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;comment-function-implementation-with-disqus&quot;&gt;Comment Function Implementation with DISQUS&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DISQUS&lt;/code&gt;: 댓글 시스템을 직접 만들지 않아도 댓글 시스템을 사용할 수 있도록 시스템을 빌려주는 사이트&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://disqus.com/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;회원가입 후 온라인 소셜 댓글 시스템 사이트 생성 [웹 사이트 UI를 이용]&lt;/p&gt;

&lt;h3 id=&quot;disqus-application-install&quot;&gt;Disqus Application Install&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ pip install django-disqus&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'django.contrib.admin'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ... ,
&lt;/span&gt;	&lt;span class=&quot;s&quot;&gt;'photo'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'accounts'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'disqus'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'django.contrib.sites'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;DISQUS_WEBSITE_SHORTNAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'dstagram-django'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# DISQUS_WEBSITE_SHORTNAME에는 DISQUS에서 사이트 생성할 때 입력한 이름을 기입한다.
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SITE_ID&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/templates/photo/detail.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;row&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-8 panel panel-default&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
		{% load disqus_tags %}
		{% disqus_show_comments %}
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;col-md-2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;control-authority&quot;&gt;Control authority&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;photo/view.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib.decorators&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;login_required&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib.auth.mixins&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LoginRequiredMixin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;login_required&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;photo_list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# decorators는 함수형 뷰에 사용된다.
&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# Mixin은 클래스형 뷰에 사용된다.
&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PhotoUploadView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LoginRequiredMixin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CreateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PhotoDeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LoginRequiredMixin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeleteView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PhotoUpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LoginRequiredMixin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UpdateView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;aws-s3-connect&quot;&gt;AWS S3 Connect&lt;/h3&gt;

&lt;h3 id=&quot;using-heroku-deploy-app&quot;&gt;Using Heroku, Deploy App&lt;/h3&gt;

&lt;p&gt;이 2가지 부분에 대해서는 별도로 공부하도록 한다.&lt;/p&gt;</content><author><name></name></author><category term="[&quot;Python&quot;]" /><summary type="html">Dstagram Project programmed by python django</summary></entry><entry><title type="html">Polls Project</title><link href="https://unprettycoder.github.io/Polls-Project/" rel="alternate" type="text/html" title="&lt;Django Web Programming&gt; Polls Project" /><published>2020-03-24T00:00:00+00:00</published><updated>2020-03-24T00:00:00+00:00</updated><id>https://unprettycoder.github.io/Polls-Project</id><content type="html" xml:base="https://unprettycoder.github.io/Polls-Project/">&lt;h2 id=&quot;polls-project&quot;&gt;Polls Project&lt;/h2&gt;

&lt;h3 id=&quot;1-create-project&quot;&gt;1. Create Project&lt;/h3&gt;

&lt;h3 id=&quot;2-install-django&quot;&gt;2. Install Django&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ pip install django&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;3-django-project-start&quot;&gt;3. Django Project start&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ django-admin startproject config .&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;4-test-web-service&quot;&gt;4. Test Web service&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;5-create-app-polls&quot;&gt;5. Create App [polls]&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py startapp polls&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;6-create-first-view&quot;&gt;6. Create First View&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.http&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;httpResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;httpResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Hello, world. You're at the polls index.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'index'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h5 id=&quot;pathroute-view-kwargs-name&quot;&gt;path(route, view, kwargs, name)&lt;/h5&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;route&lt;/code&gt; : 주소를 의미&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;view&lt;/code&gt; : &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;route&lt;/code&gt;주소로 접급했을 때 호출할 뷰&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kwargs&lt;/code&gt; : 뷰에 전달할 인자들&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name&lt;/code&gt; : &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;route&lt;/code&gt;의 이름을 의미&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'polls/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'polls.urls/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'admin/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;urls&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h5 id=&quot;include&quot;&gt;include()&lt;/h5&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;include&lt;/code&gt; : 최상위 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;urls.py&lt;/code&gt;가 다른 app에 포함된 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;urls.py&lt;/code&gt;를 참조하도록 하는 함수&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;이후 서버를 실행시키고 첫 화면이 설정한대로 출력되는지 확인&lt;/p&gt;

&lt;h3 id=&quot;7-create-database&quot;&gt;7. Create Database&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[ENGINE]&lt;/code&gt; : 어떤 종류의 데이터베이스를 사용할지 결정 (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.py&lt;/code&gt;파일 내부에 존재하는 설정)&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;django.db.backends.mysql&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;django.db.backends.sqlite3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;django.db.backends.postgresql&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;django.db.backends.oracle&lt;/code&gt; 등을 기본적으로 사용할 수 있다.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py migrate&lt;/code&gt; (데이터베이스를 만들고 초기화)&lt;/p&gt;

&lt;h3 id=&quot;8-create-model&quot;&gt;8. Create Model&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/models.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.db&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;question_text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CharField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;max_length&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;pub_date&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DateTimeField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;date published&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;question&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ForeignKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on_delete&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CASCADE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;choice_text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CharField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;max_length&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;votes&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IntegerField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config/settings.py&lt;/code&gt; ([INSTALLED_APPS]에 polls 앱 추가)&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'polls.apps.PollsConfig'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;c1&quot;&gt;# 'polls'라고만 써도 무방
&lt;/span&gt;	&lt;span class=&quot;s&quot;&gt;'django.contrib.admin'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;'django.contrib.auth'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py makemigrations polls&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;위 명령으로 앱의 변경사항을 추적해 데이터베이스에 적용할 내용을 만든다.&lt;/p&gt;

&lt;p&gt;[결과값은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/migrations/0001_initial.py&lt;/code&gt;에 기록된다.]&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py sqlmigrate polls 0001&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py migrate polls 0001&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;위 두 명령을 실행하면 데이터베이스에 테이블을 생성하고 초기화 할 수 있다.&lt;/p&gt;

&lt;h3 id=&quot;9-add-function-in-model&quot;&gt;9. Add function in Model&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/models.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.db&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.utils&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;timezone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;question_text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CharField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;max_length&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;pub_date&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DateTimeField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;date published&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__str__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question_text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;was_published_recently&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pub_date&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;timezone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;timedelta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;question&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ForeignKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on_delete&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CASCADE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;choice_text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CharField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;max_length&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;votes&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IntegerField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__str__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;choice_text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;10-check-administrator-page&quot;&gt;10. Check Administrator Page&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py createsuperuser&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ python manage.py runserver&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;위 명령을 실행하고 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;127.0.0.1:8000/admin&lt;/code&gt;으로 접속하면 로그인 페이지를 확인할 수 있다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/admin.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.contrib&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;다음과 같이 파일을 설정하면 관리자 페이지에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;POLLS&lt;/code&gt; 항목과 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Question&lt;/code&gt;이 생성된 것을 확인할 수 있다.&lt;/p&gt;

&lt;p&gt;(나머지는 관리자 페이지 UI를 통해 투표를 등록할 수 있다.)&lt;/p&gt;

&lt;h3 id=&quot;11-add-other-views&quot;&gt;11. Add other Views&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;투표 목록&lt;/code&gt; : 등록된 투표의 목록을 표시하고 상세 페이지로 이동하는 링크 제공&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;투표 상세&lt;/code&gt; : 투표의 상세 항목을 보여줌&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;투표 기능&lt;/code&gt; : 선택한 답변을 반영&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;투표 결과&lt;/code&gt; : 선택한 답변을 반영한 후 결과를 보여줌&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;details&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;You're looking at question %s.&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;results&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;response&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;You're looking at the results of question %s.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;response&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;vote&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;You're voting on question %s.&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# 아직 특별한 기능없이 값만 출력하는 뷰
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;urlpartterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ex : /polls/
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'index'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ex : /polls/5/
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'&amp;lt;int:question_id&amp;gt;/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;detail&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'detail'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ex : /polls/5/results/
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'&amp;lt;int:question_id&amp;gt;/results/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;results&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'results'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ex : /polls/5/vote/
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'&amp;lt;int:question_id&amp;gt;/vote/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vote&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'vote'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;lastest_question_list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;objects&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;order_by&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'-pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	
    &lt;span class=&quot;n&quot;&gt;output&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;', '&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question_text&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lastest_question_list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# At first, Modify index Page
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;여기까지 만들면 기능이 있는 뷰를 만들었지만 MTV 패턴에 따르지는 않는다. 템플릿을 만들어 python code와 HTML을 분리해야한다. 그를 위해 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls&lt;/code&gt;디렉터리 하위에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;templates&lt;/code&gt;디렉터리를 생성한다.(HTML code가 들어갈 디렉터리)&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/templates/polls/index.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;charset=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Title&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    {% if latest_question_list %}
    	&lt;span class=&quot;nt&quot;&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
        	{% for question in latest_question_list %}
        		&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/polls/{{ question.id }}/&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ question.question_text }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
        	{% endfor %}
    	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
    {% else %}
    	&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;No polls are available.&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    {% endif %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.http&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.template&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;latest_question_list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;objects&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;order_by&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'-pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;template&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get_template&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'polls/index.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;context&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'latest_question_list'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;latest_question_list&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt; [render() 이용]&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.shortcuts&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;    
    &lt;span class=&quot;n&quot;&gt;latest_question_list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;objects&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;order_by&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'-pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'latest_question_list'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;latest_question_list&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;    
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'polls/index.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;12-error-page&quot;&gt;12. Error Page&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.http&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Http404&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;detail&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;question&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;objects&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pk&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DoesNotExist&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;raise&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Http404&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Question does not exist.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;# 상세 정보를 불러올 수 없는 경우 404 에러를 발생시킨다.
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'polls/detail.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/templates/polls/detail.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
	{{ question }}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt; [django.shortcuts 이용]&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.shortcuts&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;get_object_or_404&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;detail&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;question&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;get_object_or_404&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pk&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# get_object_or_404()에 의해 try-except문을 하나의 함수로 표현
&lt;/span&gt;	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'polls/detail.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/templates/polls/detail.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{ question.question_text }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    {% for choice in question.choice_set.all %}
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{ choice.choice_text }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    {% endfor %}
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;13-delete-hard-coded-urls&quot;&gt;13. Delete Hard-coded URLs&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/templates/polls/index.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- Hard-coded url --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/polls/{{ question.id }}/&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ question.question_text }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- delete Hard-coding --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'detail' question.id %}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt; question.question_text &lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;14-set-url-namespace&quot;&gt;14. Set URL Namespace&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;app_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'polls'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/templates/polls/index.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'polls:detail' question.id %}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ question_text }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;15-create-simple-form&quot;&gt;15. Create simple Form&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/templates/polls/detail.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{ question.question_text }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

{% if error_message %}
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;{{ error_message }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
{% endif %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'polls:vote' question.id %}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
{% csrf_token %}
{% for choice in question.choice_set.all %}
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;inpyt&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;radio&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;choice&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;choice{{ forloop.counter }}&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{ choice.id }}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;label&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;for=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;choice{{ forloop.counter }}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{{ choice.choice_text }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;
{% endfor %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Vote&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.http&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpResponseRedirect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.urls&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;vote&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;question&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;get_object_or_404&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pk&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;selected_choice&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;choice_set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pk&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'choice'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;KeyError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DoesNotExist&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;# Redisplay the question voting form.
&lt;/span&gt;        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'polls/detail.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,{&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;'question'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;'error_message'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;You didn't select a choice.&quot;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;selected_choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;votes&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;selected_choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        
    	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpResponseRedirect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'polls:results'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;results&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;question&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;get_object_or_404&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pk&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;question_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'polls/results.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/templates/polls/results.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{ question.question_text }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
{% for choice in question.choice_set.all %}
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{ choice.choice_text }} -- {{ choice.votes }} votes {{ choice.votes|pluralize }}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
{% endfor %}
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% url 'polls:detail' question.id %}&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Vote again&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;16-using-generic-view&quot;&gt;16. Using Generic View&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Generic view&lt;/code&gt; : Django에서 미리 준비되어 있는 뷰 [보편적인 틀]&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/views.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;django.views&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;generic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;IndexView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;generic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ListView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;template_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'polls/index.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;context_object_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'latest_question_list'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;get_queryset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;# Return the last five published questions.
&lt;/span&gt;        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;objects&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;order_by&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'-pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;DetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;generic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;template_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'polls/detail.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    
&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ResultsView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;generic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;template_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'polls/results.html'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;이전에 작업했던 뷰를 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;함수형 뷰[functional view]&lt;/code&gt;라고 하고, 지금 작성한 뷰가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;클래스형 뷰[classical view]&lt;/code&gt;이다.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/urls.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;urlpatterns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IndexView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'index'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'&amp;lt;int:pk&amp;gt;/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DetailView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'detail'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'&amp;lt;int:pk/results/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ResultsView&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;as_view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'results'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'&amp;lt;int:question_id&amp;gt;/vote/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;views&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;vote&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'vote'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;17-using-static-files&quot;&gt;17. Using Static Files&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Static File&lt;/code&gt; : &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;css&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;js&lt;/code&gt;와 같은 파일을 의미, static 디렉터리를 만들고 그 안에 파일을 저장한 후 사용 가능&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/static/polls/style.css&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-css highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nl&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;white&lt;/span&gt; &lt;span class=&quot;sx&quot;&gt;url(&quot;images/background.png&quot;)&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;no-repeat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;nl&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;right&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;bottom&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;li&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;green&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/templates/polls/index.html&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
	...
	{% load static %}
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/css&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{% static 'polls/style.css' %}&quot;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;18-customizing-admin-form&quot;&gt;18. Customizing Admin Form&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/admin.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;QuestionAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ModelAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fieldsets&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;					&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'fields'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question_text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]}),&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Date information'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;	 &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'fields'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]})&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	
&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;QuestionAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/admin.py&lt;/code&gt; &lt;StackedInline&gt;&lt;/StackedInline&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;.models&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ChoiceInline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StackedInline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;extra&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	
&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;QuestionAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ModelAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fieldsets&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;					&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'fields'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question_text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]}),&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Date information'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;	 &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'fields'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]})&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	
	&lt;span class=&quot;n&quot;&gt;inlines&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ChoiceInline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/admin.py&lt;/code&gt; &lt;TabularInline&gt;&lt;/TabularInline&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ChoiceInline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TabularInline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Choice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;extra&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;19-admin-page-list-customizing&quot;&gt;19. Admin Page List Customizing&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/admin.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;QuestionAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ModelAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fieldsets&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;					&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'fields'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question_text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]}),&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Date information'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;	 &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'fields'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]})&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	
	&lt;span class=&quot;n&quot;&gt;list_display&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question_text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'was_published_recently'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	
	&lt;span class=&quot;n&quot;&gt;inlines&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ChoiceInline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/models.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Question&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;# ...
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;was_published_recently&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pub_date&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;timezone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;timedelta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    
    &lt;span class=&quot;n&quot;&gt;was_published_recently&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin_order_field&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# admin_order_field -&amp;gt; 정렬 기준을 결정
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;was_published_recently&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# boolean -&amp;gt; 값 대신 아이콘 사용 여부
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;was_published_recently&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;short_description&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'Published recently?'&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# short_description -&amp;gt; 항목 헤더 이름 설정
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;polls/admin.py&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;QuestionAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ModelAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fieldsets&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 				&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'fields'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question_text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]}),&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Date information'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'fields'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]})&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	
	&lt;span class=&quot;n&quot;&gt;list_display&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question_text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'was_published_recently'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	
	&lt;span class=&quot;n&quot;&gt;inlines&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ChoiceInline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	
	&lt;span class=&quot;n&quot;&gt;list_filter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'pub_date'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# list_filter -&amp;gt; 필터 기능
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;search_fields&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'question_text'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# search_fields -&amp;gt; 검색 기능
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><author><name></name></author><category term="[&quot;Python&quot;]" /><summary type="html">Polls Project programmed by python django</summary></entry><entry><title type="html">mySQL FUNCTIONs</title><link href="https://unprettycoder.github.io/mysql-functions/" rel="alternate" type="text/html" title="mySQL FUNCTIONs" /><published>2020-01-21T00:00:00+00:00</published><updated>2020-01-21T00:00:00+00:00</updated><id>https://unprettycoder.github.io/mysql-functions</id><content type="html" xml:base="https://unprettycoder.github.io/mysql-functions/">&lt;h2 id=&quot;mysql-functions&quot;&gt;MySQL Functions&lt;/h2&gt;
&lt;hr /&gt;
&lt;ul&gt;
  &lt;li&gt;LEFT(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;field_name&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n&lt;/code&gt;)
    &lt;ul&gt;
      &lt;li&gt;레코드의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;field_name&lt;/code&gt; value를 왼쪽부터 n개 return&lt;/li&gt;
      &lt;li&gt;EXAMPLE&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;LEFT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;left_three&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;WEEKDAY(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date_field&lt;/code&gt;)
    &lt;ul&gt;
      &lt;li&gt;레코드의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date_field&lt;/code&gt; value의 요일 return (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0 : monday ~ 6 : sunday&lt;/code&gt;)&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date_field&lt;/code&gt;의 value가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YYYY-MM-DD&lt;/code&gt; 이어야 한다.&lt;/li&gt;
      &lt;li&gt;EXAMPLE&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;WEEKDAY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;date_written&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;weekday&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;books&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;author&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&quot;Shakespeare&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;Werber&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;FIELD(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;field_name&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;val_1&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;val_2&lt;/code&gt;, …)
    &lt;ul&gt;
      &lt;li&gt;ORDER BY 뒤에 나와서 해당 필드 값의 순서를 직접 지정한다.&lt;/li&gt;
      &lt;li&gt;EXAMPLE&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FIELD&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;LEFT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;phone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;010&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;016&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;011&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content><author><name></name></author><category term="[&quot;Database&quot;]" /><summary type="html">Collections of mySQL functions</summary></entry><entry><title type="html">mySQL SYNTAX [SELECT]</title><link href="https://unprettycoder.github.io/mysql-syntax-select/" rel="alternate" type="text/html" title="mySQL SYNTAX [SELECT]" /><published>2020-01-21T00:00:00+00:00</published><updated>2020-01-21T00:00:00+00:00</updated><id>https://unprettycoder.github.io/mysql-syntax-select</id><content type="html" xml:base="https://unprettycoder.github.io/mysql-syntax-select/">&lt;h2 id=&quot;select&quot;&gt;SELECT&lt;/h2&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;select-basic-structure&quot;&gt;SELECT basic structure&lt;/h3&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;DISTINCT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`column_1`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;AS&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`col_1_nick`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;`column_2`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;AS&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`col_2_nick`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`table_name`&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`condition`&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`column_1`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;ASC&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;`column_2`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;ASC&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`n`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;`m`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;1st-line&quot;&gt;1st Line&lt;/h4&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;DISTINCT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`column_1`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;AS&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`col_1_nick`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;`column_2`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;AS&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`col_2_nick`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DISTINCT&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;출력하려는 필드의 값이 동일한 레코드가 존재하면 하나만 출력한다&lt;/li&gt;
      &lt;li&gt;중복 불허 옵션&lt;/li&gt;
      &lt;li&gt;EXAMPLE&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DISTINCT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;author&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;books&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;출력하려는 필드의 열이름의 별칭을 지정할 수 있다.&lt;/li&gt;
      &lt;li&gt;필드 값에 어떠한 연산을 수행한 후, 별칭으로 출력할 때 사용&lt;/li&gt;
      &lt;li&gt;EXAMPLE&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;yearly_income&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;AS&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;monthly_income&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;projects&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;project_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;myProject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;2nd-line&quot;&gt;2nd Line&lt;/h4&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`table_name`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FROM&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;현재 사용중인 DB에서 어떤 TABLE로부터 정보를 검색할 것인지 지정&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;3rd-line&quot;&gt;3rd Line&lt;/h4&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`condition`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WHERE&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;특정 조건을 만족하는 레코드만을 출력하기 위한 조건 지정 옵션&lt;/li&gt;
      &lt;li&gt;EXAMPLE&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;18&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gender&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;19&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gender&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;last-line&quot;&gt;Last Line&lt;/h4&gt;
&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`column_1`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;ASC&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;`column_2`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;ASC&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`n`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;`m`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORDER BY&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;레코드가 출력되는 순서를 정하는 옵션&lt;/li&gt;
      &lt;li&gt;
        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ASC&lt;/code&gt;(DEFAULT) : 오름차순&lt;/td&gt;
              &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DESC&lt;/code&gt; : 내림차순&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/li&gt;
      &lt;li&gt;EXAMPLE&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gender&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LIMIT&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;SELECT된 자료의 상위 n개 레코드만 출력한다.&lt;/li&gt;
      &lt;li&gt;‘LIMIT &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;m&lt;/code&gt;’ 은 자료의 상위 n번째 이후로 m개의 레코드를 출력한다.&lt;/li&gt;
      &lt;li&gt;EXAMPLE&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;grades&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;math&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DESC&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;grades&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;english&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DESC&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content><author><name></name></author><category term="[&quot;Database&quot;]" /><summary type="html">DB SQL SYNTAX with 'SELECT'</summary></entry><entry><title type="html">mySQL SYNTAX [ALTER TABLE]</title><link href="https://unprettycoder.github.io/mysql-syntex-alter-table/" rel="alternate" type="text/html" title="mySQL SYNTAX [ALTER TABLE]" /><published>2020-01-21T00:00:00+00:00</published><updated>2020-01-21T00:00:00+00:00</updated><id>https://unprettycoder.github.io/mysql-syntex-alter-table</id><content type="html" xml:base="https://unprettycoder.github.io/mysql-syntex-alter-table/">&lt;h2 id=&quot;alter-table&quot;&gt;ALTER TABLE&lt;/h2&gt;
&lt;hr /&gt;
&lt;h4 id=&quot;1-add-column&quot;&gt;1. ADD column&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;SYNTAX &amp;amp; example&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`table_name`&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ADD&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`column_name`&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`data_type`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ADD&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;address&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;2-drop-column&quot;&gt;2. DROP column&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;SYNTAX &amp;amp; example&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`table_name`&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DROP&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`column_name`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DROP&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;address&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;3-modify-column&quot;&gt;3. MODIFY column&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;SYNTAX &amp;amp; example&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`table_name`&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;MODIFY&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;`column1_name`&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`data_type`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;DEFAULT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;`column2_name`&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`data_type`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;DEFAULT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;MODIFY&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;address&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;17&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;4-rename-column&quot;&gt;4. RENAME COLUMN&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;SYNTAX &amp;amp; example&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`table_name`&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;RENAME&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;COLUMN&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`old_name`&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`new_name`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;RENAME&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;COLUMN&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sex&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gender&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;5-change-column&quot;&gt;5. CHANGE COLUMN&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;SYNTAX &amp;amp; example&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`table_name`&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;CHANGE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;COLUMN&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`old_name`&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`new_name`&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`data_type`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;CHANGE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;COLUMN&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sex&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gender&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;6-add-constraint&quot;&gt;6. ADD CONSTRAINT&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;SYNTAX &amp;amp; example&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`table_name`&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;ADD&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;CONSTRAINT&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`constraint_name`&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`constraint`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;`column_name`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;ADD&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;CONSTRAINT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;age_not_null&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;7-drop-constraint&quot;&gt;7. DROP CONSTRAINT&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;SYNTAX &amp;amp; example&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`table_name`&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;DROP&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;CONSTRAINT&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;`constraint_name`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;students&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;DROP&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;CONSTRAINT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;age_not_null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><author><name></name></author><category term="[&quot;Database&quot;]" /><summary type="html">DB SQL SYNTAX with 'ALTER TABLE'</summary></entry><entry><title type="html">Code Signal DB 문제 [1 ~ 10]</title><link href="https://unprettycoder.github.io/CodeSignal-DB-1-10/" rel="alternate" type="text/html" title="Code Signal DB 문제 [1 ~ 10]" /><published>2020-01-20T00:00:00+00:00</published><updated>2020-01-20T00:00:00+00:00</updated><id>https://unprettycoder.github.io/CodeSignal-DB-1-10</id><content type="html" xml:base="https://unprettycoder.github.io/CodeSignal-DB-1-10/">&lt;h2 id=&quot;code-signal-database-algorithm-solve--1--10-&quot;&gt;CODE SIGNAL Database algorithm solve [ 1 ~ 10 ]&lt;/h2&gt;

&lt;h4 id=&quot;1-projectlist&quot;&gt;1. projectList&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;Projects Table은 internal_id, project_name, team_size, team_lead, income 필드로 구성&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;Projects Table에서 internal_id, team_size 필드 없이 출력&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;projectList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Projects&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;drop&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;internal_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Projects&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;drop&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;team_size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    
&lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Projects&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;/* select project_name, team_lead, income from Projects; 로 대체 가능 */&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;2-countriesselection&quot;&gt;2. countriesSelection&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;countries Table은 name, continent, population 필드로 구성&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;countries Table에서 continent == “Africa” 인 레코드를 name 기준 오름차순 정렬&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;countriesSelection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;countries&lt;/span&gt; 
  &lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;continent&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;Africa&quot;&lt;/span&gt; 
  &lt;span class=&quot;k&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;3-monthlyscholarships&quot;&gt;3. monthlyScholarships&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;scholarship Table은 id, scholarship 필드로 구성 &amp;amp;&amp;amp; scholarship의 값은 연간 장학액수&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;scholarship Table에서 id, scholarship을 출력하되, scholarship은 연간이 아니라 월간으로 출력&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;monthlyScholarships&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;scholarship&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;scholarship&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;scholarships&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;4-projectsteam&quot;&gt;4. projectsTeam&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;projectLog Table은 id, name, description, timestamp 필드로 구성&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;projectLog Table에서 name을 오름차순으로 출력 [중복값은 출력하지 않는다.]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;projectsTeam&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DISTINCT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;projectLog&lt;/span&gt; 
  &lt;span class=&quot;k&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ASC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;5-automaticnotifications&quot;&gt;5. automaticNotifications&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;users Table은 id, username, role, email 필드로 구성&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;users Table에서 role 값이 “admin”, “premium” 인 것들을 제외하고 email 기준 오름차순 출력&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;automaticNotifications&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;email&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;users&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;role&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&quot;admin&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;premium&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;6-volleyballresults&quot;&gt;6. volleyballResults&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;results Table은 name, country, scored, missed, wins 필드로 구성&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;results Table을 wins 기준 오름차순으로 정렬&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;volleyballResults&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;results&lt;/span&gt; 
  &lt;span class=&quot;k&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;wins&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ASC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;7-mostexpensive&quot;&gt;7. mostExpensive&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;Products Table은 id, name, price, quantity 필드로 구성&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;Products Table을 보고 (price * quantity) =&amp;gt; TotalPrice 값이 가장 큰 record.name을 출력&lt;/li&gt;
      &lt;li&gt;TotalPrice의 최대값이 동일한 레코드가 다수 존재할 경우, name 기준 오름차순 출력&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mostExpensive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Products&lt;/span&gt; 
  &lt;span class=&quot;k&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;quantity&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;desc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;asc&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;limit&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;8-contestleaderboard&quot;&gt;8. contestLeaderboard&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;leaderboard Table은 id, name, score 필드로 구성&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;leaderboard Table에서 score 기준 상위 4번째부터 5개의 record.name을 출력&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;contestLeaderboard&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;leaderboard&lt;/span&gt; 
  &lt;span class=&quot;k&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;limit&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;9-gradedistribution&quot;&gt;9. gradeDistribution&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;Grades Table은 Name, ID, Midterm1, Midterm2, Final 필드로 구성&lt;/li&gt;
      &lt;li&gt;점수 환산 opt.1
        &lt;ul&gt;
          &lt;li&gt;Midterm1 : 25%&lt;/li&gt;
          &lt;li&gt;Midterm2 : 25%&lt;/li&gt;
          &lt;li&gt;Final : 50%&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;점수 환산 opt.2
        &lt;ul&gt;
          &lt;li&gt;Midterm1 : 50%&lt;/li&gt;
          &lt;li&gt;Midterm2 : 50%&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;점수 환산 opt.3
        &lt;ul&gt;
          &lt;li&gt;Final : 100%&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;Grades Table에서 opt.3이 가장 유리한 학생들의 Name, ID를 출력&lt;/li&gt;
      &lt;li&gt;정렬 기준
        &lt;ul&gt;
          &lt;li&gt;Name의 좌측부터 3문자를 기준으로 오름차순&lt;/li&gt;
          &lt;li&gt;ID 기준 오름차순&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gradeDistribution&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ID&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Grades&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Final&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Midterm1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Midterm2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Final&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Final&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Midterm1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Midterm2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;asc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ID&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;asc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;10-mischievousnephews&quot;&gt;10. mischievousNephews&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Preconditions
    &lt;ul&gt;
      &lt;li&gt;mischief Table은 mischief_date, author, title 필드로 구성&lt;/li&gt;
      &lt;li&gt;mischief_date는 YYYY-MM-DD 형식&lt;/li&gt;
      &lt;li&gt;author는 “Dewey”, “Huey”, “Loiue” 중 하나&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements
    &lt;ul&gt;
      &lt;li&gt;mischief Table에서 mischief_date 기준 요일(0 : 월요일) 필드를 weekday 로 추가&lt;/li&gt;
      &lt;li&gt;정렬 기준
        &lt;ul&gt;
          &lt;li&gt;weekday 기준 오름차순&lt;/li&gt;
          &lt;li&gt;author를 “Huey”, “Dewey”, “Louie” 순서로 정렬&lt;/li&gt;
          &lt;li&gt;mischief_date 기준 오름차순&lt;/li&gt;
          &lt;li&gt;title 기준 오름차순&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Solution
    &lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PROCEDURE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mischievousNephews&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;BEGIN&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;weekday&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mischief_date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;weekday&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mischief_date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;author&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;title&lt;/span&gt; 
  &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mischief&lt;/span&gt; 
  &lt;span class=&quot;k&quot;&gt;order&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;weekday&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;asc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;field&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;author&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;Huey&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;Dewey&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&quot;Louie&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;asc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mischief_date&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;asc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;title&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;asc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content><author><name></name></author><category term="[&quot;Database&quot;]" /><summary type="html">DB 관련 문제 풀이</summary></entry><entry><title type="html">Cloud Computing 개론</title><link href="https://unprettycoder.github.io/cloud-computing/" rel="alternate" type="text/html" title="Cloud Computing 개론" /><published>2020-01-18T00:00:00+00:00</published><updated>2020-01-18T00:00:00+00:00</updated><id>https://unprettycoder.github.io/cloud-computing</id><content type="html" xml:base="https://unprettycoder.github.io/cloud-computing/">&lt;h1 id=&quot;cloud-computing-개론&quot;&gt;Cloud Computing 개론&lt;/h1&gt;
&lt;h5 id=&quot;--구조와-경제성에-대하여--&quot;&gt;- 구조와 경제성에 대하여 -&lt;/h5&gt;

&lt;h2 id=&quot;index&quot;&gt;INDEX&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;클라우드 컴퓨팅의 시작&lt;/li&gt;
  &lt;li&gt;클라우드 컴퓨팅이란?&lt;/li&gt;
  &lt;li&gt;클라우드 컴퓨팅의 필요성&lt;/li&gt;
  &lt;li&gt;자체 데이터센터 vs 클라우드 서비스&lt;/li&gt;
  &lt;li&gt;클라우드 컴퓨팅의 경제성&lt;/li&gt;
  &lt;li&gt;클라우드 서비스의 4대 요소
    &lt;ul&gt;
      &lt;li&gt;공유자원&lt;/li&gt;
      &lt;li&gt;가상화&lt;/li&gt;
      &lt;li&gt;탄력성과 자동화&lt;/li&gt;
      &lt;li&gt;pay-as-you-go 방식의 과금&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;클라우드 서비스의 종류
    &lt;ul&gt;
      &lt;li&gt;IaaS [InfraStructuer as a Service]&lt;/li&gt;
      &lt;li&gt;PaaS [Platform as a Service]&lt;/li&gt;
      &lt;li&gt;SaaS [Software as a Service]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;클라우스 서비스의 구성요소
    &lt;ul&gt;
      &lt;li&gt;데이터센터&lt;/li&gt;
      &lt;li&gt;가상화&lt;/li&gt;
      &lt;li&gt;API&lt;/li&gt;
      &lt;li&gt;Cloud Storage&lt;/li&gt;
      &lt;li&gt;Database&lt;/li&gt;
      &lt;li&gt;탄력성&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;클라우드 서비스의 보안&lt;/li&gt;
  &lt;li&gt;분산을 통한 데이터 병렬 처리&lt;/li&gt;
  &lt;li&gt;클라우드 컴퓨팅의 안정성&lt;/li&gt;
  &lt;li&gt;개인적인 견해&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;what-is-in&quot;&gt;What is in?&lt;/h3&gt;
&lt;h5 id=&quot;example-cloud-service-likened-as-a-car&quot;&gt;example [Cloud Service likened as a Car]&lt;/h5&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/img/cloud.jpg&quot; alt=&quot;Car example&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Download : &lt;a href=&quot;../../assets/ftp-files/Cloud-Computing.pdf&quot;&gt;Cloud-Computing.pdf&lt;/a&gt;&lt;/p&gt;</content><author><name></name></author><category term="[&quot;others&quot;]" /><summary type="html">Cloud Computing 원리와 경재성</summary></entry></feed>