[Django tutorial] 2.첫 번째 장고 앱 작성하기, part 1

이지연·2020년 8월 6일
0

이 튜토리얼은 간단한 설문조사(polls)어플리케이션을 만드는 과정입니다.
part1부터 4까지 진행할 것입니다.

장고 버전 확인하기
$ python -m django --version

  1. 프로젝트 만들기
    Django를 처음 사용할 때 초기 설정을 해야합니다. Django project를 구성하는 코드를 자동 생성해야 하는데, 이 과정에서 데이터베이스 설정, Django 위한 옵션들, 어플리케이션을 위한 설정들과 같은 Django 인스턴스를 구성하는 수많은 설정들이 생성되기 때문입니다.

**시작전에 말씀드립니다. 꼭 가상환경에서 생성해야합니다....
저는 Django라는 가상환경에서 시작하고 있습니다.

  1. 현재 디렉토리에서 mysite2라는 디렉토리를 생성
    $ django-admin startproject mysite2

프로젝트를 생성할때는 Python 또는 Django에서 사용 중인 이름은 피해야 합니다.

2.startproject에서 무엇이 생성되는지 확인
tree

하는 부분을 캡쳐를 하지 못했기에 아래 장고 문서에 있는 사진을 아래에 첨부합니다.

저의 mysite2안에는 여러 파일들이 존재합니다.

  • manage.py: Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티 입니다.
  • mysite/ : 디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장됩니다. 이 디렉토리 내의 이름을 이용하여, (mysite.urls 와 같은 식으로) 프로젝트의 어디서나 Python 패키지들을 임포트할 수 있습니다.
  • mysite/__init__.py: Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일입니다.
  • mysite/settings.py: 현재 Django 프로젝트의 환경 및 구성을 저장합니다. Django settings에서 환경 설정이 어떻게 동작하는지 확인할 수 있습니다.
  • mysite/urls.py: 현재 Django project 의 URL 선언을 저장합니다. Django 로 작성된 사이트의 "목차" 라고 할 수 있습니다
  • mysite/asgi.py: An entry-point for ASGI-compatible web servers to serve your project. See How to deploy with ASGI for more details.
  • mysite/wsgi.py: 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점입니다.

3.개발 서버
$ python manage.py runserver
이 명령어는 해당 mysite2 디렉토리를 이동해 Django 프로젝트가 제대로 동작하는 지 확인할 수 있습니다. 저의 경우에는 실행되지 않았는데, ubuntu는 가끔가다가 잘 안 켜진다고 합니다. 아마 http://127.0.0.1:8000/ 사이트가 명령어를 치면 나올 것입니다.

*포트를 변경하는 방법도 있습니다. 기본적으로, runserver 명령은 내부 IP 의 8000 번 포트로 개발 서버를 띄웁니다.

*runserver의 자동 변경 기능
: 개발 서버는 요청이 들어올 때마다 자동으로 Python코드를 다시 불러옵니다.
코드의 변경사항을 반영하기 위해서 굳이 서버를 재기동 하지 않아도 됩니다. 그러나, 파일을 추가하는 등의 몇몇의 동작은 개발서버가 자동으로 인식하지 못해 서버를 재기동 해야 적용됩니다.

  1. 설문조사 앱 만들기
    이 단계까지 왔으면 프로젝트를 할 기본적인 환경이 셋팅이 완료되었습니다.
    $ python manage.py startapp polls

이 명령어는 앱을 생성하기 위해 manage.py가 존재하는 디렉토리에서 입력해야합니다. 다음 명령어를 치면 아래와 같은 디렉토리가 생깁니다. tree를 입력하면 확인할 수 있습니다.

이 디렉토리 구조는 튜표 어플리케이션의 집이 되어준다고 합니다.
아직 잘 모르겠지만, 후에 하다보면 알게되겠죠?

  1. 첫번째 뷰 작성하기

from django.http import HttpResponse

def index(request):
return HttpResponse("Hello, world. You're at the polls index.")


-Django에서 가장 간단한 형태의 뷰입니다. 뷰를 호출하려면 이와 연결된 URL 이 있어야 하는데, 이를 위해 URLconf가 사용됩니다.
- polls 디렉토리에서 URLconf를 생성하려면, urls.py라는 파일을 생성해야 합니다. 정확히 생성했다면, 앱 디렉토리는 다음과 같이 보입니다.



polls/
   __init__.py
   admin.py
   apps.py
   migrations/
       __init__.py
   models.py
   tests.py
   urls.py
   views.py


>첫번째 뷰 작성하기
다음은 Django에서 가장 간단한 형태의 뷰입니다. 뷰를 호출하려면 이와 연결된 URL이 있어야 하는데, 이를 위해 URLconf가 사용됩니다.polls 디렉토리에서 URLconf를 생성하려면, urls.py라는 파일을 생성해야 합니다. 


polls/views.py¶
from django.http import HttpResponse

def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

"polls/urls.py" 파일에는 다음과 같은 코드가 포함되어 있습니다.

polls/urls.py¶

polls/urls.py¶
from django.urls import path

from . import views

urlpatterns = [
path('', views.index, name='index'),
]

> include() 함수
-다른 URLconf들을 참조할 수 있도록 도와줍니다. DJango가 이 함수를 만나면 URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속처리를 위해 include된 URLconf로 전달합니다.

그리고 난 후 다음단계는 최상위URLcomysite/urls.py 파일을 열고, django.urls.include를 import 하고, urlpatterns 리스트에 include() 함수를 다음과 같이 추가합니다.nf에서 polls/urls모듈을 바라보게 설정합니다.

mysite/urls.py¶
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]


*언제 include()함수가 사용되나?다른 URL 패턴을 포함할 때마다 항상 include()를 사용해야 합니다. admin.site.urls가 유일한 예외

그럼 이제 index뷰가  URLconf에 연결되었습니다. 

$ python manage.py runserver

위 명령어를 입력해  index뷰에 정의한 "Hello, world. You're at the polls index." 가 보일 것입니다.


path함수에는 2개의 필수인 route와 view, 2개의 선택 가능한 함수로 kwrgs와 name까지 모두 4개의 인수가 전달되었습니다.

> path() 인수: route
- URL 패턴을 가진 문자열 입니다.  
- 요청이 처리될 때, Django 는 urlpatterns 의 첫 번째 패턴부터 시작하여, 일치하는 패턴을 찾을 때 까지 요청된 URL 을 각 패턴과 리스트의 순서대로 비교합니다.
-  예를 들어, https://www.example.com/myapp/ 이 요청된 경우, URLconf 는 오직 myapp/ 부분만 바라 봅니다. 패턴들은 GET 이나 POST 의 매개 변수들, 혹은 도메인 이름을 검색하지 않습니다. 


> path() 인수: view
- Django 에서 일치하는 패턴을 찾으면, HttpRequest 객체를 첫번째 인수로 하고, 경로로 부터 '캡처된' 값을 키워드 인수로하여 특정한 view 함수를 호출

> path() 인수: kwargs
- 임의의 키워드 인수들은 목표한 view 에 사전형으로 전달됩니다.


> path() 인수: name
- URL 에 이름을 지으면, 템플릿을 포함한 Django 어디에서나 명확하게 참조할 수 있습니다. 이 강력한 기능을 이용하여, 단 하나의 파일만 수정해도 project 내의 모든 URL 패턴을 바꿀 수 있도록 도와줍니다
profile
Everyday STEP BY STEP

0개의 댓글