일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 구슬탈출2
- 장고
- 17144
- Java
- 괄호추가하기
- 재귀
- 백준
- 9095
- 인스타
- 다리 만들기2
- 댓글
- 부분수열의 합
- 인스타그램
- 17143
- 17136
- 로또
- django
- 14888
- 색종이 붙이기
- 연산자 끼워넣기
- 16637
- 17472
- 미세먼지 안녕!
- 6603
- 1182
- 14502
- Ajax
- 알고리즘
- 따라하기
- 좋아요
- Today
- Total
Be a developer
wordcount 2 본문
본격적으로 프로젝트를 만들어 보겠습니다.
앞에서도 말했듯이 항상 현재 작업중인 디렉토리 잘 확인하시고 명령어를 입력해 주세요.
앞에서 python -m venv myvenv가 python을 이용한 명령어였듯이,
django-admin은 django를 이용한 명령어입니다.
django project를 만드는 것이니까 당연히 django 명령어를 이용하겠죠?
startproject는 프로젝트를 만든다는 말일 것이고, wordcount는 만들 프로젝트의 이름입니다.
원하는 이름으로 설정해주시면 됩니다.
위는 만들어진 기본 프로젝트입니다.
당분간은 settings.py urls.py 두 파일만 건드리게 될 겁니다.
wordcount를 만들 때는 세션 때 배운 MTV 중에서 T(template)와 V(view)만 사용하게 됩니다.(Model은 차차..)
이전 세션에서 html 파일을 작성해서 크롬 브라우져에 띄우는 작업을 해보았습니다.
웹 서비스를 만든다는 것은 기본적으로 html 파일을 render(화면에 표시)하는 것입니다.
그러니까 먼저 html 파일을 만들어야 겠죠?
그러면 html 파일을 어디다가 만들어야 하느냐
app을 만들고 그 안에 만들어 줘야 합니다.
app은 project 안에 있는 부분 집합입니다. 하나의 project에 여러 개의 app을 만들 수 있습니다.
앞으로 기능에 따라 project안에 app을 만들어 주게 됩니다.
항상 현재 작업 중인 디렉토리를 확인해주세요.
위의 사진을 보면 만들어준 project 디렉토리에 들어가서 명령어를 실행했습니다.
그 이유는 manage.py가 있는 디렉토리로 이동하기 위해서 입니다.(/d/wordcount에서 ls 명령어를 쳐본다면 manage.py 파일이 없습니다. /d/wordcount/wordcount로 이동하여 ls 명령어를 쳐본다면 manage.py 파일이 존재할 것입니다.)
app을 만드는 명령어를 보면, django를 이용한 명령어가 아니라 python을 이용한 명령어입니다.
이는 manage.py(.py는 파이썬 언어로 작성된 파일이라는 뜻)가 파이썬으로 작성된 파일이고, 이 파이썬 파일을 이용해서 app을 만들기 때문입니다. wordcounter는 app의 이름으로 원하시는 대로 설정하시면 됩니다.
노란색 박스만큼이 생성되었습니다.
wordcount를 만들 때는 apps.py를 참고하게 될 것이고, views.py를 수정하게 될 것입니다.
여기에 더해서 templates 폴더를 만들고 사용하게 될 것입니다.
templates 밑에 wordcounter라는 폴더를 만들고 그 밑에 home.html을 만들어줍니다.(여기서 wordcounter라는 폴더를 작성한 이유는 https://lshdv.tistory.com/5?category=827616(홍보아님, 조회수 늘리는 거 아님) 여기서 볼 수 있는데, 진짜 매우매우 궁금한 사람만 보면 됩니다. 지금 중요하지 않음)
드디어 우리가 이전에 배웠던 html 파일을 사용하게 되었습니다.
이전에는 그냥 드래그를 통해서 혹은 파일을 클릭해서 웹 브라우져에 파일을 띄웠지만, 웹 서버는 그렇게 간단하지 않습니다.
주소를 통해 원하는 html파일을 열어 보게 될 것입니다. 이에 필요한 것이 django라는 웹 프레임워크라고 할 수 있죠.
그 전에 먼저 주소를 통해 이동하는 개념에 대해 설명드리겠습니다.
인터넷을 사용할 때 이동할 때 사용하는 것이 빨간 밑줄이 있는 url입니다.
출처: 위키백과
우리가 살고 있는 집에도 주소가 있듯이, 인터넷도 주소를 가지고 있습니다. 어떤 자원(쉽게 html 파일, 동영상, 사진 등을 생각하면 됩니다.)이 있는 위치를 나타내는 것입니다.
공지사항 페이지를 보여주는 html 파일이 있는 위치와 자유게시판 페이지를 보여주는 html 파일이 있는 위치가 밑줄 친 url주소 입니다.
터미널에서 cd 명령어를 통해 디렉토리를 이동하듯이, window에서 클릭을 통해서 폴더 사이를 이동하듯이, 주소를 통해 인터넷에 있는 페이지들을 이동해 다니는 것이죠.
즉, 어떤 html파일을 보기 위해서는 저기 url 주소를 바꿔주면 되는 것입니다.
위의 사진(멋사's class lion 페이지)을 기준으로 말씀드리면, 주소를 바꾼다는 것은 class lion 사이트가 어떤 물리적인 컴퓨터(서버)에서 동작하는 중이고, 그 서버안에 있는 디렉토리들을 이동해가면서 서버에 있는 html 파일들을 열람한다는 것입니다.
우리가 지금 개발하고 있는 것은 우리 컴퓨터를 서버로 두고 웹 서버를 만들고 있는 것입니다.
즉, 우리가 웹 서버를 만들 때도 html 파일을 띄워주기 위해서는 그에 맞는 url을 설정해줘야 한다는 것을 알 수 있습니다.
위에서 일단 home.html 파일을 만들어줬고, home.html을 보기 위해서는 어떤 url을 통해서 들어오라고 설정해줘야 합니다. 이 때, urls.py를 건드리게 됩니다.
urls.py를 보시면 위와 같이 미리 작성되어 있습니다.
위에 선홍색? 분홍색? 글자는 주석처리 되어 있는 것입니다. 주석은 그냥 소스 코드에 대한 정보를 알려주기 위해 메모한 것이라고 생각하면 됩니다.
자기 코드도 짜다가 보면 왜 그렇게 코드를 작성했는지 모를 때가 많습니다.
그래서 꼭! 꼭! 꼭! 주석을 통해 설명하는 것을 생활화 합시다.
path('admin/',admin.site.urls),
이미 작성된 url이 하나 있습니다. admin 페이지인데 이와 관련된 내용은 이후의 세션에서 설명하도록 하겠습니다.
일단 admin 페이지를 들어가보겠습니다.
그 전에 먼저 웹 서버를 실행시켜야 합니다.
항상 현재 작업 중인 디렉토리를 잘 확인해주시고.
명령어를 보면 python 명령어를 통해 manage.py 파일을 실행시키는 것이기 때문에, manage.py가 있는 디렉토리에서 실행시켜야 되겠죠?
위와 같이 명령어를 입력하면 웹 서버가 실행됩니다.
이후 파란밑줄이 쳐진 곳에 Ctrl을 누르고 클릭을 하게 되면 크롬에 새탭이 생기면서 웹 서버가 브라우저에서 켜집니다.
위와 같이 로켓이 뜨면 웹 서버가 성공적으로 실행된 것입니다.
조금 전 위에서 url에 이미 admin 페이지의 주소가 설정된 것을 알 수 있었습니다. 따라서 그 url로 들어가보겠습니다.
cd 명령어에서 여러 디렉토리를 거쳐갈 때 /를 사용했듯이, url에서도 그렇게 들어가면 됩니다.
그러면 아래와 같은 페이지가 뜨게 됩니다.
이미 저장되어 있는 html 파일이 있기 때문에 나왔겠죠?
그러면 어디에 저장되어 있냐?
저도 잘 모르겠지만, django가 가상환경에 안에 설치될 때 같이 설치되어 있겠죠?
admin에 대해서도 이후의 세션에서 배우게 될 테니까 넘어가겠습니다.
그러면 이상한 주소를 한 번 입력해보겠습니다.
페이지를 찾을 수가 없다고 나옵니다.
그 이유는 먼저 url을 설정하지 않았고, 만약 url을 저 주소에 맞춰서 설정한다고 해도 주소에 맞는 html 파일이 없기 때문에 page를 찾을 수 없다고 할 것입니다.
url을 설정하는 이유에 대해서 조금이라도 이해가 되셨으면 좋겠네요.. 제발
위에서 우리는 보여주고 싶은 html파일을 home.html로 만들고 생성한 wordcounter app 안에 있는 templates 폴더 안에 저장했습니다.
그러면 이제 home.html을 브라우저에 보여주기 위해서 urls.py를 설정해보겠습니다.
크게 두 줄의 코드를 넣어 줬습니다.
먼저 빨간 박스를 보시면 동그란 점이 있는데, 이는 저장이 안되었다는 말입니다. 그래서 항상 Ctrl+s 를 눌러서 습관적으로 꼭! 꼭! 꼭! 저장해주세요. 저장안해서 오류가 나오는 경우가 많았습니다.
name은 나중에 설명하겠습니다.
import는 wordcounter 안에 있는 views를 가져와서 쓰겠다는 말입니다.
보면 wordcount와 wordcounter 폴더는(이름 혼란스럽게 해서 죄송..) 서로 상,하위 관계가 아니라 대등한 위치에 있습니다.
wordcount 안에 있는 urls.py가 wordcounter 안에 있는 views.py를 가져다 쓰기 위해서는 위치를 알려줘야 합니다.
컴퓨터에게 내가 사용할 어떤 것에 대한 위치를 알려주는 것이죠.
wordcounter안에 있다는 의미로 '.'을 사용해 줍니다. 그래서 wordcounter.views는 wordcounter안에 있는 view라는 의미 입니다.
그리고 urlpatterns안에 path로 시작하는 코드 한 줄을 추가해줬습니다.
첫 번째 인자에는 ''만 넣고 아무 문자열도 넣지 않았습니다.
위에 admin을 보기 위한 주소로 http://127.0.0.1:8000/admin 이렇게 뒤에 추가해줬는데, 'admin/'대신에 아무 문자열도 넣지 않았다는 말은 http://127.0.0.1:8000 이 주소로 들어오면 내가 보여줄 html 파일을 띄워주겠다는 것입니다.
두 번째 인자에는 wordcounter.views.home이 적혀 있습니다.
이것은 첫 번째 인자로 지정한 url 주소로 들어오면 우리가 import 해온 wordcounter 안의 views에 있는 home이라는 함수를 실행시키겠다는 것입니다.
그러면 wordcounter안에 있는 views.py를 한 번 보겠습니다.
보시다시피 아무 코드도 없습니다.
그래서 만약 서버를 계속 실행시켜 놓은 상태셨다면 터미널에 위와 같은 에러 메세지가 발생할 것입니다.
wordcounter.views에 home이 없다고 하네요. 실행시켜야 할 함수가 없기 때문입니다.
따라서 함수를 실행시켜 줍니다.
함수가 해야할 일은 무엇일까요?
일단은 우리가 만든 home.html을 화면에 띄워줘야 겠죠?
아래와 같은 함수 하나를 작성해 줍시다.
home이라는 이름은 url에서 wordcounter.views.home의 home과 맞춰주어야 합니다. home이라는 함수를 실행시키겠다고 작성하고 왔기 때문이죠.
함수의 인자로 들어오는 request에 대해서는 나중에 설명드리겠습니다.
그리고 함수가 끝날 때 수행되는 return 문에서 render함수를 실행시킵니다.
render는 쉽게 html 파일을 브라우져에 띄워주겠다는 말입니다.
그리고 두 번째 인자로 home.html이 있는 위치를 알려주어 그 파일을 띄워주도록 합니다.
wordcounter/home.html이라고 적는 이유는 우리가 templates 밑에 app의 이름과 맞춰서 wordcounter 폴더를 만들고 그 밑에 home.html을 저장했기 때문입니다.
home.html에 들어가서 띄워줄 글을 작성한 후 저장합니다.
서버가 실행중이라면 아래와 같이 서버가 정상적으로 실행되고 있음을 알 수 있습니다.
그러면 아까 켜두었던 크롬 브라우저도 돌아가서 새로고침을 해봅시다.
이러한 에러 메세지가 나옵니다.
home.html을 찾지 못한다고 나오는데, 왜 그럴까요. url도 설정해주었고, views.py에 실행할 home이라는 함수도 작성했습니다. 하지만 웹 서버는 home.html을 찾지 못하고 있습니다.
그 이유는 웹 서버에게 app이 설치되었음을 알려주지 않았기 때문입니다.
우리는 위에서 python manage.py startapp wordcounter 명령어를 통해 app을 생성했지만, 웹 서버는 이를 인식하지 못했습니다. 따라서 settings.py에 노란색 밑줄 부분을 입력해서 알려주어야 합니다.
지금은 에러가 나는 것을 보여주기 위해서 늦게 했지만, 되도록 app을 설치하고 바로 settings.py에 추가해주세요.
(사실 여기에 추가안했다가 왜 에러가 발생하는지 몰라서 1시간 넘게 찾은 적이 있습니다. 흑..)
아까 urls.py에서 import할 때에 wordcounter 밑에 views를 wordcounter.views로 나타냈듯이
wordcounter.apps는 wordcounter 밑에 있는 apps.py를 나타냅니다.
wordcounter.apps를 보게되면 WordcounterConfig라는 class가 있습니다. 이 클래스 이름이 바로 settings.py에 들어가게 되는 것입니다.
이렇게 settings.py를 설정하게 되면 웹 서버는 wordcounter라는 app을 인식하게 됩니다.
저장 잘 해주시고, 터미널을 보면
서버가 잘 동작할 것 같습니다.
브라우저로 돌아가서 새로고침하면 잘 실행됩니다.
지금까지 T와 V를 이용해서(웹 서버를 이용해서) html 페이지를 브라우저에 나타내보았습니다.
쉽게 생각해보자면
1. 웹 서비스는 html 파일을 띄우는 것이다.
2. 일단 app을 만든다. 만든 후 settings.py에 app을 추가했음을 알려주자.
3. app을 만들었다면, 먼저 html 파일을 만들자.
4. html 파일을 보여주려면 그에 해당하는 주소가 있어야 한다.
5. urls.py를 수정해준다.
6. urls.py에 path를 추가해주고 보니, 해당 url에 접속했을 때 html파일을 띄워 줄 함수가 필요하다.
7. views.py에 해당 함수를 작성한다.
*파일을 수정할 때 저장을 반드시 하자 Ctrl+s*
'멋사' 카테고리의 다른 글
Ajax를 통한 좋아요, 댓글 구현 실습 (4) | 2019.07.03 |
---|---|
Ajax를 통한 좋아요, 댓글 구현 이론 (0) | 2019.07.03 |
구름 IDE를 이용한 Django 협업 (4) | 2019.05.05 |
wordcount 3 (6) | 2019.03.28 |
wordcount 1 (0) | 2019.03.26 |