📂

05. 메인 페이지

메인 페이지 만들기

Django는 여러 개의 앱을 동시에 만들어 조립하는 과정으로 보실 수 있어요. 우리는 간단한 실습이기 때문에 main이라는 앱만을 만들 것입니다. 우선 서버가 동작되고 있으므로 Ctrl + C 버튼을 누르셔서 서버를 종료시킨 다음 아래 명령어를 실행시켜 주세요.
(myvenv)root@goorm:/workspace/컨테이너명/mysite# python manage.py startapp main
 
아무것도 뜨지 않은 채로 커서가 다음줄로 넘어가면 정상 동작 한 것입니다. 에러가 나오면 에러를 검색해서 에러명을 해결해주세요. 대부분 오타입니다.
 
Settings에 가셔서 설치되어 있는 앱 목록에 main을 추가해주세요. 이 작업을 하지 않으면 앱이 구동하지 않습니다. 여러 개의 앱을 만들 경우 모두 여기 등록해 주셔야 합니다.
notion imagenotion image
INSTALLED_APPS=[ 'main', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
 
💡
'main' 뒤에 쉼표가 있으니 꼭 체킹해주세요.
 
이제 urls.py를 작성할 것입니다. urls는 사용자가 어떤 url을 사용하여 들어오느냐에 따라 어떤 화면을 보여줄지를 결정하게 됩니다.
notion imagenotion image
mysite > tutorialdjango > urls.py
from django.contrib import admin from django.urls import path from main.views import index urlpatterns =[ path('admin/', admin.site.urls), path('', index), ]
 
이 코드 중 path('', index)의 의미는 사용자가 뒤에 무언가 붙지 않은 있는 그대로의 url을 입력하고 들어왔을 경우 main/views.py파일 안에 index라는 함수를 연결시켜 주겠다는 뜻입니다. 여기서 불러온 index는 함수이며, 아직 만들어지지 않았기 때문에 오류가 뜹니다. 이 index함수는 index.html과 연결시켜 줄 것입니다.
 
💡
다음과 같이 정의하면 나중에 url로 불러오기 편하지만, 코드 복잡도가 올라가기에, 초보자 분들이 하기 쉽도록 나중에 처리해주도록 하겠습니다. path('', index, name='index')
 
이제 mysite > main> views.py로 들어와 index라는 함수를 만듭니다. 여기서 사용자가 index.html을 볼 수 있게끔 연결을 해줍니다.
mysite > main > views.py
from django.shortcuts import render def index(request): return render(request, 'main/index.html')
 
Template을 연결 시키는 과정으로 mysite > main > templates > main > index.html 을 만들어 주세요. 기본적인 테스트를 위하여 아래 내용을 붙여 넣어 주세요. 해당 앱이름 안에 templates라는 폴더 아래 다시 앱이름을 넣고 그 안에 .html파일을 넣는 방식은 Django의 규칙입니다. 이 규칙은 settings.py파일 안에 TEMPLATES라는 속성에 DIR값을 수정함으로 바꿀 수 있습니다.
notion imagenotion image
<html> <head> <title>Django!</title> </head> <body> <h1>Test!</h1> </body> <html>
 
이제 다시 아래 명령어를 콘솔창에 입력하시고 프로젝트 > 실행URL과 포트를 클릭하신 다음 URL을 클릭하셔서 실행되는 화면을 보십시오.
(myvenv)root@goorm:/workspace/컨테이너명/mysite# python manage.py runserver 0:80
 
notion imagenotion image
 
이번에는 뒤에 /admin을 입력하셔서 admin 페이지가 열리는지 확인해주세요. 여기서는 게시물을 올리거나 수정하거나 삭제할 수 있으며 user에 대한 관리도 할 수 있습니다. 아직 superuser를 만들지 않았으므로 접속 할 수 없습니다.
urls.py에서 보았던 admin/ 부분이 이 페이지를 뜻하는 것입니다. 보안상 실 서비스에서는 열어두지 않는 것이 좋습니다.
 
 
다음으로는 메인페이지에서 이미지를 불러오는 방법에 대해 소개하려 합니다. Django에서는 일반적인 HTML, CSS에서 지원하는 상대경로를 지원하지 않습니다. 우선 정적 파일들이 저장될 static이라는 폴더를 mysite 밑에 만들어 줍니다.
 
  1. 새폴더 만들기
    1. notion imagenotion image
       
  1. 파일업로드
    1. notion imagenotion image
      notion imagenotion image
       
  1. 파일 업로드 확인
    1. 혹시 이미지가 안떴을 경우에는 새로고침을 눌러주세요.
      notion imagenotion image
 
다음은 static 폴더를 django와 연결시켜 주는 작업이 남았습니다. settings.py로 이동하셔서 아래와 같이 수정해주세요. 뒤에 콤마가 있으니 빼먹지 않도록 주의해주세요.
#...생략... STATIC_URL = '/static/' STATICFILES_DIRS = [ BASE_DIR / 'static', ]
 
💡
구버전 코드(현재 코드에서는 os라이브러리를 사용하지 않습니다.) os라이브러리 사용시 :
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
 
이제 index.html로 들어가 static 파일을 호출하는 code를 넣어주세요. {% 문법 %}의 구조는 template tag라고 불립니다. 자세한 내용은 Django 공식문서를 참고해주세요. 링크는 아래 달아두도록 하겠습니다.
 
tutorialdjango/mysite/main/templates/main/index.html
<html> <head> <title>Django!</title> </head> <body> <h1>Test!</h1> {% load static %} <img src="{% static 'jeju.jpg' %}"> </body> </html>
 
콘솔창에 python manage.py runserver 0:80이 입력이 안되어 있으시다면 입력하시고 프로젝트 > 실행URL과 포트를 누르신 다음 URL을 클릭하시면 아래와 같은 화면이 나옵니다.
 
notion imagenotion image
 

장고의 구조와 MTV 패턴

현재 폴더 구성 트리입니다. 우리가 수정한 순서는 urls.py > views.py > index.html 순입니다.
 
notion imagenotion image
 
 
Django는 MVC모델을 MTV라고 부릅니다. 용어가 바뀌었을 뿐이지 기본적인 개념은 같습니다. 아래 표는 Django 작동원리를 도식화 한 것입니다.
 
MTV(빨간색으로 표시된 부분은 설계에 따라 작동하지 않을 수도 있습니다.)
 
notion imagenotion image
 
Model – DB와 연결된 Python Class
Template – 사용자에게 response될 Client View
View – Django에서 처리한 데이터를 Template에게 전달
 
각 문자는 다음과 같이 표준 SQL 문으로 대응 가능합니다.
https://ko.wikipedia.org/wiki/CRUDhttps://ko.wikipedia.org/wiki/CRUD
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말입니다.