Django tutorial part 1

ryan·2020년 8월 27일
0

Django

목록 보기
3/4

🪐 Django

장고(Django, FAQ 발음으로는 "쟁고"(IPA: [ˈdʒæŋgoʊ])[2])는 파이썬으로 작성된 오픈 소스 웹 애플리케이션 프레임워크로, 모델-뷰-컨트롤러(MVC) 패턴을 따르고 있다. 현재는 장고 소프트웨어 재단에 의해 관리되고 있다.

고도의 데이터베이스 기반 웹사이트를 작성하는 데 있어서 수고를 더는 것이 장고의 주된 목표이다. 장고는 콤포넌트의 재사용성(reusability)과 플러그인화 가능성(pluggability), 빠른 개발 등을 강조하고 있다. 또한, "DRY(Don't repeat yourself: 중복배제)" 원리를 따랐다. 설정 파일부터 데이터 모델에까지 파이썬 언어가 구석구석에 쓰였다.

인스타그램[3], NASA[4], 빗버켓[5], Disqus[6] , 모질라[7]에서 장고를 사용하는 것으로 알려져있다.
📖 위키백과

관련 사이트: https://docs.djangoproject.com/en/3.1/intro/tutorial01/

📱 투표, 설문조사 app을 만들기

  • 사람들이 내용을 보고, 투표를 하는 공공 사이트 만들기
  • 관리자가 투표 사이트를 추가하고, 수정하고, 지울 수 있는 관리자 사이트 만들기

💻 django 설치
https://docs.djangoproject.com/en/3.1/intro/install/

💾 django 설치 확인

$ python -m django --version

🙈 project 생성하기

Django를 처음으로 사용한다면 처음 설정에 아주아주 조심해야할 거예요. Django 프로젝트를 설정하는 몇몇 코드를 자동생성해야하거든요. 필요한 설정 모음이니까 무서워하지말아요 우리.

터미널에서 여러분들이 저장하고 싶어하는 코드를 입력할 디렉토리로 이동하고, 아래의 command line을 입력하세요.

$ django-admin startproject oursite

위 command line은 여러분들이 현재 위치한 디렉토리에서 'oursite'라는 디렉토리를 생성할 거예요.

자, startpoject가 만든 것을 한 번 살펴볼까요?

음... 디렉토리와 파일이 연결 된 저 이쁜 나무 줄기 같은 기능은 tree라는 command를 입력한건데, brew를 설치하고, tree를 install한 거예요. 구글링하면 나오니까 필요하신 분들은 구글링을 해보세요. 저는 지금 블로그를 쓸 시간도 부족해서 그 내용을 적을 시간이 없네요.
🙏 'I'm so sorry, but I love you 다 거짓말'

📀 생성된 폴더, 파일 살펴보기

자, oursite라는 디렉토리 안에 oursite라는 하위 디렉토리가 생겼고, manage.py, 하위 디렉토리 안에 settings.py, url.py 등 파일들이 생겼네요.

자, 하나하나씩 찬찬히 살펴볼게요.

  • 외부 oursite 디렉토리는 root 디렉토리예요. 이 디렉토리는 우리의 프로젝트를 담고 있죠. 이 디렉토리 이름은 사실 Django한테는 딱히 중요하지는 않아요. 그래서 이름을 바꾸고 싶으면 어느 것이든 원하는 걸로 바꾸면 되요.
  • manage.py는 command-line 유틸리티라고 하는데 쉽게 말해서 실행 파일이라고 보시면 되요. 이 파일이 우리가 다양한 방법으로 Django랑 상호작용하게 만들죠.
  • 내부 oursite 디렉토리가 우리들의 프로젝트를 위한 실질적인 파이썬 패키지예요. 이 디렉토리명이 그 안의 모든 파이썬 패키지를 사용할 때 사용해야하는 이름이에요. (예, oursite.urls)
  • oursite/init.py: 이 파일은 빈 파일인데 이 파일이 파이썬한테 oursite라는 디렉토리가 파이썬 패키지라고 인식하게하는 역할을 합니다.
  • oursite/setting.py: 전체 프로젝트를 관리하는 설정들이 들어있는 파일이에요
  • oursite/urls.py: 이 Django 프로젝트의 URL 선언, 즉 oursite의 URL 선언이에요. Django 기반 사이트의 "table of contents"라고 하는데 '목차'라고 보면 되려나요.
  • oursite/asgi.py: 프로젝트를 제공하기 위한 ASGI 호환 웹서버의 진입점이 되는 파일이에요.
  • oursite/wsgi.py: 프로젝트를 제공하기 위한 WSGI 호환 웹서버의 진입점이 되는 파일이에요. 너무 깊이 알 필요는 없고, 이런 게 있다는 정도면 알면 되는데, 웹 서버(Nginx/Apache)와 django를 적절하게 결합을 시켜주는 역할을 하는 점을 아는 것이 중요해요.

⛹️‍ 개발 서버를 실행시켜보기

자, 우리 Djago 프로젝트가 실행이 되는지 확인해볼까요? 외부 ourside 디렉토리가 있는 곳으로 터미널을 옮기고, 다음 command를 입력하세요.

$ python manage.py runserver

그럼, 아래와 같은 내용을 볼 수 있을 거예요. 빨간 글씨로 경고 문구가 나오는데, 우리 이 문구가 무서워도 나중에 명탐정 코난이나 소년탐정 김전일처럼 해결할테니까 무시하도록 해요.

자, 우리는 방금 파이썬으로 아주 가벼운 Django 개발 서버를 시작했습니다. 👏 👏 👏
개발 서버에 Django를 포함했기때문에 production을 준비하기까지 아파치 같은 production server을 구성하는 것과 씨름할 필요없이 많은 것을 빠르게 개발할 수 있어요.

주의할 점은 여러분들이 지금까지 만든 서버를 production environment와 유사한 곳에서는 사용하면 안돼요. 지금하는 튜토리얼은 개발 중에만 사용하기위함이니까요. 우리는 웹서버를 만드는 게 아니라 웹 프레임워크를 만드는 거랍니다.

🤸‍ 투표 앱(Polls app) 생성하기

자, 지금까지의 상태가 project가 준비가 된 거예요. 일할 준비가 됐네요. (일하고 싶어요.)

Django에서 작성하는 각 애플리케이션은 특정 규칙을 따르는 파이썬 패키지로 구성되요. Django는 앱의 기본 디렉토리 구조를 자동으로 생성하는 유틸리티가 함께 제공되서 디렉토리를 만드는데 신경쓰는 대신에 코드 작성에 집중할 수 있답니다. (How amazing Django is?)

🤼‍ Projects vs Apps

  • projects: 하나의 웹사이트
  • Apps: 웹사이트 안에 있는 쇼핑몰, 블로그, 게시판 등

우리의 앱들은 우리의 Python path 어디에든 위치해 있을 수 있어요. 이 튜토리얼에서는 우리의 poll app(투표? 설문조사 앱)을 manage.py 파일이 있는 디렉토리에 만들 거예요. 왜냐하면 oursite의 하위 모듈이 아니라 자체 최상위 모듈로 가져올 수 있도록 하기위함이죠.

앱을 만들기위해서는 manage.py파일과 같은 디렉토리에 터미널을 위치시키고 다음과 같은 command를 입력하세요.

$ python manage.py startapp polls

위 command는 아래와 같은 디렉토리와 파일을 만들거에요.

polls 디렉토리 구조가 poll 앱을 저장할 거예요.

📇 첫 번째 view를 작성해 보아요

polls/views.py를 열어보고,
→ poll 디렉토리에 있는 views.py를 열어보는 거예요. 이번 한번만 이미지로 올리고, 다음에는 파일을 여는 방법은 생략하는 점, 양해해주세요.

$ vi polls/views.py


아래 코드를 입력하세요.

from django.http import HttpResponse

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


방금 작성한 코드가 Django에서 가장 간단한 view에요. view을 호출하려면 URL에 매핑(map)을 해야하는데, 이를 위해서는 URLconf가 필요하답니다.

polls 디렉토리에 URLconf를 만들기위해서 urls.py 파일을 만들어볼게요.
외부 oursite 디렉토리에서 polls/urls.py를 만들려면 터미널에서 touch를 사용해주세요

$ touch polls/urls.py

urls.py를 만들고 나면 app 디렉토리가 다음과 같이 보여야해요.

urls.py 파일이 생성되었네요. 터미널은 참 재미있네요.

다음으로 polls/urls.py 파일에 다음과 코드를 포함시키세요.

from django.urls import path

from . import views

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

다음으로 할 것은 polls.urls 모듈에서 root URLconf(URL configurations)를 가리키는 것입니다. (내부 oursite디렉토리) oursite/urls.py에서 django.urls.include에 대해서 import를 해주세요. 그리고 urlpatterns 리스트에 include()를 넣어주면 다음과 같을 거예요.

from django.contrib import admin
from django.urls import include, path

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

include()함수는 사용하면 다른 URLconfs를 참조할 수 있어요. Django가 include()를 만날 때마다 해당 부분까지 일치하는 모든 URL을 잘라내고, 추가 처리를 위해서 나머지 문자열을 포함된 URLconf로 보내죠.

include()를 생각해낸 이유는 URL을 plug-and-play하기 쉽게 만들기위해서에요. 즉, 프로젝트에 앱을 추가하고 빼내기 쉬운 구조를 제공하는 것이죠.

include()를 언제 사용할 지 더 자세히 알고 싶으면 링크텍스트

여기까지 우리가 한 것은 index view를 URL conf에 연결한 거에요. 다음 command로 작동되는 지 확인해볼까요?

$ python manage.py runserver

브라우저에서 http://localhost:8000/polls/ 로 가볼게요. 그리고 우리가 index view에 정의했던 "Hello, world. You're at the polls index." 문구가 보인다면 잘한거에요 👏 👏 👏

➕ path()에 대해서 조금만 볼까요?

path() 함수에는 네 개의 인수가 전달돼요. 두 개는 필수 인자(route와 view)이고, 두 개는 선택 인자(kwargs, name)예요. 여기에서는 이 인자들이 무엇을 위한 것인지 보도록 할게요.

📕 path() argument: route

route는 URL 패턴을 가지고 있는 문자열이에요. 요청을 처리할 때, Django는 urlpatterns의 처음 패턴에서 시작해서 리스트 아래로 순서대로 내려가면서 일치하는 패턴을 찾을 때까지 요청된 URL을 각 패턴과 비교해요.

📗 path() argument: view

Django에서 일치하는 패턴을 찾을 때, HttpRequest 객체를 첫 번째 인수로 사용하고 route에서 "captured(캡처된)" values(값)를 키워드 인수로 사용하여 지정된 view 함수를 호출해요.

📘 path() argument: kwargs

임의의 키워드 인수는 target view로 딕셔너리 형태로 전달될 수 있어요. Django 튜토리얼에서는 이 기능을 사용하지는 않을 거예요.

📙 path() argument: name

URL 이름을 지정하면 Django 외에, 특히 templates 내에서 명확하게 참조할 수 있어요. 이러한 강력한 기능을 사용하면 단일 파일만 만지면서 프로젝트의 URL 패턴을 전체적으로 변경할 수 있어요.

profile
👨🏻‍💻☕️ 🎹🎵 🐰🎶 🛫📷

0개의 댓글