[Django] 2.장고 앱 작성하기

dhkim·2020년 7월 6일

Django

목록 보기
2/10

설문조사 앱 만들기

이제 작업을 하기위한 환경(프로젝트)이 설치 되었다
장고는 앱의 기본 디텍토리 구조를 자동으로 생성할 수 있는 도구를 제공하기 때문에, 코드에더 집중할 수 있다

프로젝트와 앱의 차이점
앱은 웹로그 시스템, 공공 기록 데이터베이스 또는 소규모 여론 조사 앱과 같은 무언가를 하는 웹 애플리케이션이다.
프로젝트는 특정 웹 사이트에 대한 구성 및 앱의 모음이다. 한 프로젝트에는 여러 앱이 포함될 수 있다. 앱은 여러 프로젝트에 있을 수 있다.

앱을 생성하기 위해 manage.py가 존재하는 디렉토리에서 명령을 입력해 보자

$ python manage.py startapp polls

polls라는 디렉토리가 생겼다. 이를 펼쳐보면

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py
  • views.py : 파일의 로직을 담당하는 파일이다
  • migrations 디텍토리 : models.py파일에 정의한 테이블 구조를 manage.py의 makemigrations 옵션을 통해 생성되는 파일이 저장되는 디렉토리이다
  • models.py : 장고의 핵심기능 중 하나인 ORM과 관련되어있는 파일이다. 데이터 베이스의 테이블을 정의하는 기능을 한다
  • settings.py : 프로젝트 과나연 모든 설정 정보를 담고있는 파일이다
  • urls.py : url의 경로에대한 파일이다 다른사람이 도메인주소를 입력하면 사이트를 들어올수있게 url 경로를 관리하는 일을 한다

첫번째 뷰 작성하기

"polls/view.py" 파일을 열어 파이썬 코드를 작성하자

from django.http import HttpResponse


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

장고의 가장 간단한 형태의 view이다. 이를 호출하려면 이와 연결된 URL 이 있어야 하는데, 이를 위해 URLconf가 사용된다 polls 디렉토리에서 URLconf를 생성하려면, urls.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 한후
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() 는 다른 URL 패턴을 포함할 때마다 항상 include()를 사용해야 합니다. admin.site.urls 가 유일한 예외이다
include() 함수는 다른 URLconf들을 참조할 수 있도록 도와준다. 장고가 함수 include()를 만나게 되면,
URL의 그시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속처리 하기 위해 include된 URLconf로 전달한다

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

이제 index뷰가 URLconf에 연결되었다 잘 작동하는지 확인해보기위해 명령을 입력해보자

$ python manage.py runserver

브라우저에서 http://localhost:8000/polls/ 를 입력하면 index 뷰에 정의한 "Hello, world. You're at the polls index." 가 보여야 하지만 아직 앱을 세팅하지 않았기 때문에 페이지를 찾을수 없다는 문구가 뜬다


사용한 인수

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

  • path() 인수 :route
    route는 URL패턴을 가진 문자열이다. 요청이 처리될 때, 장고는 urlpatterns의 첫번째 패턴부터 시작하여, 일치하는 패턴을 찾을 때까지 요청된 URL을 각 패턴과 리스트의 순서대로 비교한다
    패턴들은 GET이나 POST의 매개변수들, 혹은 도메인 이름을 검색하지 않는다
    예를 들어, https://www.example.com/myapp/ 이 요청된 경우, URLconf 는 오직 myapp/ 부분만 바라 본다.
    https://www.example.com/myapp/?page=3, 같은 요청에도, URLconf 는 역시 myapp/ 부분만 신경쓴다.
  • path() 인수: view
    장고에서 일치하는 패턴을 찾으면, HttpRequest 객체를 첫번째 인수로하고, 경로로 부터 캡쳐된 값을 키워드 인수하여 특정한 view 함수를 호출한다

  • path() 인수 : kwargs
    임의의 키워드 인수들은 목표한 view에 사전형으로 전달된다 (이 튜토리얼에서는 사용하지않음)

  • path() 인수 : name
    URL에 이름을 지으면, 템플릿을 포함한 장고 어디에서나 몇확하게 참조할 수 있다
    이 기능을 이용하여, 단 하나의 파일만 수정해도 프로젝트의 모든 URL을 바꿀수 있도록 도와준다

0개의 댓글