<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ukly-_-.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Mon, 25 Apr 2022 13:49:30 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ukly-_-.log</title>
            <url>https://images.velog.io/images/ukly-_-/profile/e325d1f1-f411-4c60-9122-bb27ddbcc180/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ukly-_-.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ukly-_-" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Django 공식 문서로 공부하는 Django #2]]></title>
            <link>https://velog.io/@ukly-_-/Django-%EA%B3%B5%EC%8B%9D-%EB%AC%B8%EC%84%9C%EB%A1%9C-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-Django-2</link>
            <guid>https://velog.io/@ukly-_-/Django-%EA%B3%B5%EC%8B%9D-%EB%AC%B8%EC%84%9C%EB%A1%9C-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-Django-2</guid>
            <pubDate>Mon, 25 Apr 2022 13:49:30 GMT</pubDate>
            <description><![CDATA[<h1 id="첫-번째-장고-앱-작성하기-part-2">첫 번째 장고 앱 작성하기, part 2</h1>
<p>Python에서 기본으로 제공하는 SQLite를 통해 데이터베이스를 다룬다.</p>
<h2 id="모델-만들기">모델 만들기</h2>
<blockquote>
<p>모델이란 데이터에 대한 단 하나의 확실한 정보 출처이다.</p>
</blockquote>
<p>여론조사 앱에서 Question과 Choice라는 두 가지 모델을 만들게 된다.</p>
<pre><code>polls/models.py

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField(&#39;date published&#39;)


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)</code></pre><p>Django에서 모델은 클래스로 표현된다. 
각 클래스 변수는 모델에서 데이터베이스 필드를 나타낸다.
데이터베이스의 각 필드는 <strong>Field</strong> 클래스의 인스턴스로서 표현된다. <strong>CharField</strong>는 character 필드를 표현하고, <strong>DateTimeField</strong>는 날짜와 시간 필드를 표현한다.
몇몇 <strong>Field</strong> 클래스들은 필수 인수가 필요하다. </p>
<p>그리고 <strong>ForeignKey</strong>를 사용하여 관계설정에 대해 설명한다. </p>
<ul>
<li><strong>Question</strong>은 질문이 무엇인지에 대한 <strong>question_text</strong>라는 <strong>CharField</strong>와 게시된 날짜를 나타내는 <strong>pub_date</strong>라는 <strong>DateTimeField</strong>로 이루어져 있다.</li>
<li><strong>Choice</strong>는 <strong>Question</strong> 모델을 <strong>ForeignKey</strong>로 하는 <strong>question</strong>과 선택 메세지를 나타내는 <strong>choice_text</strong>라는 <strong>CharField</strong>, 선택수를 나타내는 <strong>IntegerField</strong>인 <strong>votes</strong>로 이루어져 있다.</li>
</ul>
<h2 id="모델의-활성화">모델의 활성화</h2>
<p><strong>mysite</strong>에 있는 <strong>polls</strong>앱은 활성화&amp;비활성화하며 꼈다뺐다 할수있다.</p>
<p><strong>mysite/settings.py</strong>에 </p>
<pre><code>INSTALLED_APPS = [
&#39;polls.apps.PollsConfig&#39;,
&#39;django.contrib.admin&#39;,
&#39;django.contrib.auth&#39;,
&#39;django.contrib.contenttypes&#39;,
&#39;django.contrib.sessions&#39;,
&#39;django.contrib.messages&#39;,
&#39;django.contrib.staticfiles&#39;,
]</code></pre><p><strong>INSTALLED_APPS</strong> 설정에 <strong>&#39;polls.app.PollsConfig&#39;</strong>를 추가해줘서 프로젝트에 <strong>polls</strong>앱을 활성화 해준다.</p>
<blockquote>
<p>Django에서는 migration을 통해 모델의 변경 내역을 DB Schema로 다룬다. 마치 git처럼 모델의 변경 내역을 버전으로 관리한다.</p>
</blockquote>
<p>그 이후에</p>
<pre><code>python manage.py makemigrations polls</code></pre><p>으로 polls라는 migration을 생성해준다.</p>
<pre><code>Migrations for &#39;polls&#39;: 
    polls/migrations/0001_initial.py
        - Create model Question
        - Create model Choice</code></pre><p>라는 메세지가 뜨면서 Django에게 모델의 변경사항(model Question, Choice의 생성)을 전달해줍니다.</p>
<p><strong>sqlmigrate</strong>는 <strong>app_label</strong>과 <strong>migration_name</strong>을 인수로 받아서 해당 migration을 실행하지 않고 화면에 출력하여 확인할 수 있다.</p>
<h2 id="api-가지고-놀기">API 가지고 놀기</h2>
<pre><code>python manage.py shell</code></pre><p>Interactive Python shell을 통해 Django API를 다룰 수 있다.</p>
<p>명령어는 귀찮으니까 생략할래</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Django 공식 문서로 공부하는 Django #1]]></title>
            <link>https://velog.io/@ukly-_-/Django-%EA%B3%B5%EC%8B%9D-%EB%AC%B8%EC%84%9C%EB%A1%9C-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-Django-1</link>
            <guid>https://velog.io/@ukly-_-/Django-%EA%B3%B5%EC%8B%9D-%EB%AC%B8%EC%84%9C%EB%A1%9C-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-Django-1</guid>
            <pubDate>Sat, 23 Apr 2022 07:41:27 GMT</pubDate>
            <description><![CDATA[<h1 id="첫-번째-장고-앱-작성하기-part-1">첫 번째 장고 앱 작성하기, part 1</h1>
<p>Django 공부를 위해 구름ide라는 클라우드 기반의 개발환경으로 공식 문서를 통해 간단한 설문조사 앱을 만들어 보기로 했다.</p>
<p>개발환경은 리눅스 기반</p>
<h2 id="프로젝트-만들기">프로젝트 만들기</h2>
<p>Django를 통해 만들 어플케이션은 프로젝트의 형식으로 구성요소들이 설정된다.</p>
<pre><code>django-admin startproject myiste</code></pre><p>위의 명령어를 통해 mysite라는 프로젝트를 개설해줬다.</p>
<p><strong>❗️ mysite 부분에 원하는 프로젝트 명을 입력해주면 되지만 Python 또는 Django에서 이미 사용 중인 이름은 피해야한다.</strong></p>
<p>startproject를 통해 생성된 mysite라는 프로젝트는</p>
<pre><code>mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py   </code></pre><p> 위의 구조로 생성된다.</p>
<ul>
<li><strong>manage.py</strong> : Django 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인의 유틸리티이다.  </li>
</ul>
<p><strong>mysite/</strong></p>
<ul>
<li><strong>_<em>init.py_</em></strong> : python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 빈 파일이다.</li>
<li><strong>settings.py</strong> : 현재 Django 프로젝트의 환경 및 구성을 저장</li>
<li><strong>urls.py</strong> : 현재 Django 프로젝트의 URL 선언을 저장. 목차와 비슷한 역할</li>
<li><strong>asgi.py</strong> : 현재 프로젝트를 서비스하기 위한 ASGI-웹 서버의 진입점</li>
<li><strong>wsgi.py</strong> : 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점</li>
</ul>
<h2 id="개발서버">개발서버</h2>
<p>Django 프로젝트가 잘 동작하는 지 확인하기 위해서</p>
<pre><code>python manage.py runserver 0.0.0.0:80</code></pre><p>runserver까지만 입력하면 기본적으로 127.0.0.1:8000으로 열리지만 현재 사용중인 구름ide 개발환경에서는 해당 IP와 포트번호로 접속이 되지 않아 0.0.0.0의 IP와 80의 포트번호를 사용하였다.</p>
<h2 id="설문조사-앱-만들기">설문조사 앱 만들기</h2>
<p>이제 앱을 개발할 환경이 구성되었으니 mysite라는 프로젝트 안에 polls라는 설문조사 어플리케이션을 개발한다.</p>
<pre><code>python manage.py startapp polls</code></pre><p>위의 명령어를 통해 polls라는 투표 어플리케이션의 틀을 만들어 주었다. 위치는 /mysite 에 바로 개설해주어 manage.py와 같은 경로에 있다.</p>
<pre><code>polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py</code></pre><p>디렉토리 구조는 다음과 같다.</p>
<h2 id="첫-번째-뷰-작성하기">첫 번째 뷰 작성하기</h2>
<p>polls/views.py 를 통해 polls의 뷰를 작성해줄 수 있다.</p>
<pre><code>from django.http import HttpResponse

def index(request):
    return HttpResponse(&quot;Hello, world. You&#39;re at the polls index.&quot;)</code></pre><p>HttpResponse를 통해 html 파일을 따로 사용하지 않고, 클라이언트에게 response를 줄 수 있다.</p>
<p>이렇게 작성된 index는 /polls/urls.py의 path()를 통해 클라이언트로부터 받아온 request를 넘겨받는다.</p>
<pre><code>from django.urls import path

from . import views

urlpatterns = [
    path(&#39;&#39;, views.index, name=&#39;index&#39;),
]</code></pre><p>위의 path()는
<strong>path(route, view, kwargs=None, name=None)</strong> 
에서 kwargs를 제외한 route, view, name을 인수로 받았다.
<strong>route</strong>는 <strong>&#39;&#39;</strong>로 홈페이지의 최상의 인덱스로 지정되었고
<strong>view</strong>는 <strong>iew.index</strong> 이전에 작성한 polls/view.py에서 index를 view로 지정한 것이고
<strong>name</strong>은 <strong>&#39;index&#39;</strong>로 지정해줬다</p>
<pre><code>from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path(&#39;polls/&#39;, include(&#39;polls.urls&#39;)),
    path(&#39;admin/&#39;, admin.site.urls),
]</code></pre><p>그 이후에 mysite/urls.py를 include() 통해 polls하위의 인덱스가 &#39;polls.urls&#39;의 URLconf를 참조할 수 있도록 도와준다. </p>
]]></description>
        </item>
    </channel>
</rss>