Django Tutorial # part1

Mun Lee·2020년 7월 4일
0

sudo lsof -t -i tcp:8000 | xargs kill -9
몇일동안 튜토리얼 보면서 실습하는동안 5번의 삽질과 난 타자연습을 하고있는건가 하는 느낌이 들었지만 , 영타 치는 속도가 빨라졌다는것에 큰 기쁨을 느끼면서 튜토리얼을 정리해볼려고한다.
파이썬을 공부하고나서 장고를 하게되었을때 , 본인은 고등학교때가 생각이 났다. 수학의정석 집합과 명제부분만 더럽고 그 뒷부분은 깨끗했던것이 먼저 떠올랐는데, 이번에는 그렇게 되지 않기위해 하나하나 흐름에 맞춰 정리하면서 이해를 해볼려고 할 것이다. 잘하는 사람들도 많겠지만 저처럼 처음하는 사람들도 있을거고, 포기하는 사람들도 있을터이니, 이러한 사람이 발생하지 않았으면 좋겠다....

이거 실습하면서 꼭 따라야할 것이있다.
(1) 오타조심 : 오타 매우 많이 칠 것입니다. 저도 오타를 너무 많이쳐서 고치는 과정에서 너무 허무하고 허탈했던 것이 많았다. detail.html 인데 datail.html이라 적어놓고 왜 안되지? 하면서 했던 모습이 생각이 난다.

(2)어렵다고 좌절하지 말라고 할순 없지만 조금만 좌절하고 다시 타이핑 연습하면서 장고에 익숙해지도록 하자. 장고는 어려운것도 있지만 익숙하지 않음에서 나오는 어색함이기 때문에 이 어색함을 빨리 덜어낼수 있도록하자. (사실 저도 아직 매우 어색함.......) ㅠㅠ

기초적인 투표 애플리케이션을 만들어 볼 것이다. 이 애플리케이션(= 이제 어플이라 줄이겠다.)
어플은 두 부분으로 구성된다.
1)사람들이 설문 내용을 보고 직접 투표할 수 있는 개방된 사이트
2)관리자가 설문을 추가,변경,삭제 할 수 있는 관리용 사이트

python -m django --version

가상환경은 가상환경마다 다른 개발환경을 구축할 수 있다.

django-admin startproject mysite

mysite라는 프로젝트가 만들어졌다.
우선 장고 사이클을 봐보자

설문조사 앱을 만들어보자

프로젝트 vs 앱 : 앱은 특정한 기능(블로그나, 공공 기록물을 위한 디비나 간단한 설문조사 앱)을 수행하는 웹 어플을 말하고 , 프로젝ㅌ는 이런 특정 웹사이트를 위한 앱들과 각 설정들을 한데 묶어놓은 것. 프로젝트는 다수의 앱을 포함할수 있고, 앱은 다수의 프로젝트에 포함될수 있다.
mysite와 같은 앱의 묶음 앱은 특정 기능 수행. 아이스크림 가게를 위한 관리 앱, 주문 앱, 이벤트 앱 이렇게 특정 기능만 수행하는 것을 각각만들어서 프로젝트를 구성

python manage.py startapp polls
polls라는 투표를 담당하는 앱을 만들었다.

polls/views.py

from django.http import HttpResponse


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

첫번째 뷰를 만들었고, 뷰를 호출하려면 이와 연결된 url이 있어야 하는데 이를 위해 URLconf가 사용된다. polls디렉토리에서 urlconf를 생성하려면, urls.py을 만들어야한다.
그러면 구조는 대략 이러하게 된다.
polls/
init.py
admin.py
apps.py
migrations/
init.py
models.py
tests.py
urls.py
views.py

polls/urls.py
from django.urls import path

from . import views

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

최상위 urlconf에서 polls.urls 모듈을 바라보게 설정하자.
mysite/urls.py을 열고 django.urls.include를 import하고, urlpattern 리스트에 include() 함수를 추가해준다.

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

urlpatterns = [
    #작성했던 poll.urls를 연결해주고, 예를들어 127.0.0.1/polls 이런 url이 들어오면 이걸 파싱해서 polls라는 해당 패스를 잡아내서 연결해준다. 
    path('polls/', include('polls.urls')),
    
    path('admin/', admin.site.urls),
]

127.0.0.1/polls와 같은 요청이 오면 path에서 ('polls/')에 해당하는 polls.urls로 연결해주고 ->polls.urls에 들어가면은 polls뒤에 아무것도 없기 때문에 views.index내용을 보여주게 되고-> views.py에 있는 index로 연결시켜준다.

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

include()에 숨은 아이디어 덕분에 URL을 쉽게 연결할 수 있습니다. polls 앱에 그 자체의 URLconf(polls/urls.py)가 존재하는 한, "/polls/", 또는 "/fun_polls/", "/content/polls/"와 같은 경로, 또는 그 어떤 다른 root 경로에 연결하더라도, 앱은 여전히 잘 동작할 것입니다.

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

path() 인수 : route

route 는 URL 패턴을 가진 문자열 입니다. 요청이 처리될 때, Django 는 urlpatterns 의 첫 번째 패턴부터 시작하여, 일치하는 패턴을 찾을 때 까지 요청된 URL 을 각 패턴과 리스트의 순서대로 비교합니다.

패턴들은 GET 이나 POST 의 매개 변수들, 혹은 도메인 이름을 검색하지 않습니다. 예를 들어, https://www.example.com/myapp/ 이 요청된 경우, URLconf 는 오직 myapp/ 부분만 바라 봅니다. https://www.example.com/myapp/?page=3, 같은 요청에도, URLconf 는 역시 myapp/ 부분만 신경씁니다.

path() 인수: view

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

path() 인수: kwargs

path() 인수: name

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

profile
개발자가 되고자 하는 30살

0개의 댓글