본문 바로가기
프로그래밍 언어

[Python] Django로 웹페이지 만들기 (1)

by 다람이도토리 2021. 5. 11.

프로그래머스 Week5 - Day1~Day2 관련 Django 내용 정리

 

Django란?

Flask와 같은 웹 프레임워크의 일종이다. 

 

Django의 구조(Model-View-Template Pattern)

 

Django는 여러개의 app을 활용하여 하나의 웹을 만들게 된다. app을 하나의 작은 페이지 단위라고 생각하면 이해하기 편하다.

전체적으로 관리해야 하는 것

- URL : 각 페이지의 역할을 정의한다. URL별로 어떤 template을 띄워줄 것인지 결정하게 된다.

- settings : 사용가능한 app의 목록, 템플릿 등을 지정한다.

각 앱마다 해야 할 것

- template : 각 페이지의 기본 모습을 관리한다. (html을 활용하여 작성하게 된다.)

- view : request에 대한 처리 필요, 데이터베이스를 여기서 관리한다.

- model : (2)편에서 다룰 예정.

 

Django의 (현재 배운 기준) 간단흐름

1. app을 생성한다.  (diango-admin startapp <app_name>)

2. 해당 app에서 template 폴더를 생성한 후, html 문서를 만든다.

3. 해당 html문서에서 사용할 변수는 모두 해당 app의 view에서 정의한다.

example) 

from django.shortcuts import HttpResponse, render

# Create your views here.
# request에 대한 처리가 필요


def index(request):
    number = 10
    name = "Michael"
    nums = [1, 2, 3, 4, 5]
    return render(request, 'index.html', {"my_num": number, "my_name": name, "my_list": nums})

4. html 문서가 완성되었으면, 메인부분의 url에서 url 링크를 지정한다.

from django.contrib import admin
from django.urls import path
from homepage.views import index

urlpatterns = [
    # view에 대한 정보 추가.
    path('', index), # 127.0.0.1/
    path('admin/', admin.site.urls), # 127.0.0.1/admin/
]

5. settings에서, installed_app 부분에 app 이름 추가, template에서 DIRS를 추가한다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'homepage'  # 장고 프로젝트에 설치된 앱 목록 추가 필요
]
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            # 해당 부분에 template 접근 권한을 부여해야 한다.
            os.path.join(BASE_DIR, "homepage", "template")
            ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

6. 실행 및 테스트는 python manage.py runserver를 입력하여 실시