이번에는 관리자를 생성한 후 관리자 페이지를 확인해 볼 것이다.

먼저!

관리자 계정을 생성한다!


(관리자 계정 생성)


명령어는 위와같고, 각자 계정과 비밀번호를 설정해주면 된다.

관리자 페이지란 장고에서 제공하는 기본적인 관리페이지이다.
우리는 이 페이지에서 우리가 만든 프로젝트를 관리할 수 있고 db도 쉽게 관리할 수 있다.

페이지는 /admin 으로 접속하면 된다.



(관리자 페이지)


아까 생성한 관리자 계정으로 접속한다.



(관리자 로그인)


로그인을 하면 위와 같은 화면이 나온다.

그런데?
우리가 아까 만든 model 정보는 없다..!
그렇다.
연결해야한다.

polls/admin.py로 가주자.



(polls/admin.py)


해당 파일을 위와 같이 작성한다.
register 함수로 Question 모델을 등록하는 것이다.

다시 접속해보면?


(관리자 페이지)


관리자 페이지에서 POLLS가 생성되고 아래 Question 항목이 생긴것을 볼 수 있다.

클릭해보면 아래와 같다.


(DB 수정)


해당 DB의 내용들을 볼 수 있고, 수정할 수 있고 추가할 수도 있다.
DB를 관리자 페이지에 연동시켜주면 나중에 DB관리도 장고에서 제공해주는 서비스를 이용하여 아주 편리하게 관리할 수 있다.

(* 참조 - https://docs.djangoproject.com/ko/2.0/intro/tutorial02/)


장고는 DB를 모델이라는 개념으로 관리를 한다.

우리는 데이터의 테이블을 하나의 model로 만들어주기만 하면
장고가 테이블도 생성해주고 기타 일을 해준다.

기본적으로 장고는 sqlite db를 사용한다. 나중에 다른 db와 연동하는 것도 공부하여 포스팅할 것이다.

지금은 장고의 모델 개념을 익히는데 집중을 할 것이다.

mange.py의 migrate 명령은 현재 db에서 수정된 부분을 적용시켜주는 역할을 한다. 모델을 확인하고 모델이 수정된 부분이 있으면 그거에 맞춰서 db를 적용시켜준다.

(초기 migrate)


처음 migrate를 하면 위와 같이 나온다.
우리는 아무 모델도 만들지 않고 그랬는데 뭘 적용하는거지?
장고는 기본적인 db 파일들이 있다. 관리자 정보, 인증 정보 세션정보 등등이 있다. 기본적인 db 정보들을 db에 필요하면 테이블도 만들고 알아서 적용시켜준다.

그렇다면 우리가 모델을 한번 직접 만들고 확인해보자.
지난 포스팅에서 우리는 polls 이라는 투표 APP 을 생성했다. 그렇다면 여기에 필요한 DB 테이블이 무엇일까?
기본적으로 질문들을 저장하는 테이블이 필요할 테고, 해당 질문에 대한 선택지들에 대한 테이블이 필요할 것이다.

그렇다면 Question과 Choice 모델을 2개 만들어보자.


(Question, Choice)


두 클래스 모두 model을 상속받아 생성한다.
기본적으로 model의 속성 필드가 있다.
CharField는 문자열이 저장되는 필드
DateTimeField는 날짜 정보가 저장될 수 있는 필드
IntegerField는 정수가 저장되는 필드
등등 있다. 이는 JSP나 다른 웹프로그래밍에서 DB를 생성해보았다면 이해하기 쉬울 것이다. 뒤 인자들도 쉽게 이해할 수 있을 것이다.
다만 다른점중 하나는 첫번째 인자를 선택하에 사람이 읽기 좋은 필등명으로 설정해줄 수 있다.
여기서는 pub_date를 보자. 여기서 필드를 생성할 때 첫번째 인자가 date published 라는 문자열로 설정되어있다. 우리는 해당 필드를 date published 라고 설정한 것이다.

그렇다면 이렇게 모델을 생성해주고 무엇을 해야하나?
여기서 이제 migrate 명령이 필요하다. 하지만 현재 우리 APP이 프로젝트로 포함되어있지 않다.!

포함시켜보자!


(포함시키기)


프로젝트명/프로젝트명/settings.py 에 들어가보면
INSTALLED_APPS 가 있는데 여기에 추가해야한다.
PollsConfig 클래스는 polls/apps.py 파일에 존재한다. 그러므로 경로는
'polls.apps.PollsConfig' 가 된다. 이 경로를 추가해주면 된다.

이제 migrate를 할 것이다.
우리는 직접 migrate하기전에 makemigrations를 이용해 과정을 살펴볼 것이다.

makemigrations 를 하게되면 변경된 부분을 migrate하기 전에 db를 위한 명령들이 있는 파일들로 만든다.


(makemigration)


polls에 대해 makemigrations을 해주니 하나의 파일이 생겼다.
이 파일 속에는 sql 쿼리들이 담겨있다.

확인해보면


(sql 쿼리)


위처럼 쿼리들이 저장되어있고, migrate를 하게 되면 위의 쿼리들이 날라가게 되는 것이다.

migrate!


(migrate)


migrate를 하게 되면 아까 생성된 파일들이 db에 적용이 된다.

이제 생성된 DB에 내용을 추가하는 것을 shell을 이용해 추가해볼 것이다.


(쉘 실행)


그 후 모델을 생성해준다.



(모델 생성)


모델에 내용을 채워서 생성해준다.

q에 Question 객체를 생성했다. 확인해보자.


(Question 객체 확인)


객체를 확인해보면 해당 내용들이 보인다.
save() 명령을 통해 DB에 저장할 수 있다.

객체를 확인해보자.


(객체 확인)


Question object (1) ..
우리가 알아볼 수 없다. 객체를 우리가 알아볼 수 있는 문자열로 보이게 하기 위해 조치를 취할 것이다.

이건 단순히 우리가 쉘에서 보기 편하게 하기 위해서가 아닌 나중에 관리자 페이지에서 해당 DB를 관리할 때 보기 편하게 하기 위해서이다.


(추가 내용)


위에서 만들었던 모델에 __str__ 을 오버라이드한다.

Question 모델에 메서드를 하나 추가해보자.



(메서드 추가)


최근에 발행된 질문인지 확인할 수 있는 메서드이다.

그리고 다시 쉘을 실행한다.


(확인)


아까보다 훨씬 보기 좋게 나온다. (질문내용을 나오게 출력했다.)

그리고 추가한 메서드도 확인해본다.



(추가 메서드 확인)



우리가 추가한 메서드도 잘 동작하는 것을 확인했다.

그렇다면 해당 질문에 선택지를 추가하고 마무리 하겠다.!



(선택지 추가)


선택지를 추가하였다.


( *참조 - https://docs.djangoproject.com/ko/2.0/intro/tutorial02/)


장고의 튜토리얼이다.

투표 APP을 만들 것이다. Project 안에는 여러가지의 APP이 있을 수 있다. 각각의 역할을 하는 APP이다. 여기서는 APP을 만드는 것을 해볼 것이다.



(APP 생성)


APP 생성은 manage.py 를 통해서 한다.

앱을 생성하면 다음과 같은 디렉토리 구조가 생긴다.



(생성된 디렉토리)


polls 디렉토리가 생겼다.

간단하게 웹페이지에서 해당 APP을 확인해 볼 것이다.
보여주는 것에 대한 처리를 담당하는 것이 views.py이다.

그러므로 우리는 views.py를 수정하여 해당 페이지에 들어가면 간단한 문구가 찍혀 나오게 할 것이다.



(views.py 작성)


HttpResponse 를 import하고 사용했다.
우리가 지금 만든 views.py에서 index는 아주아주 간단한 일을 하고 있다.
단순히 요청이 들어오면 위에 간단한 문구를 Http 응답으로 보내는 일이다.
HttpResponse는 Http 응답 페이지를 만들어서 보내주는 함수이다.

그렇다면 우리는 우리가 만든 views.py가 실행되야 해당 페이지에 문구를 띄울 수 있다.
우리는 url을 통해서 해당 페이지에 접근한다.
그러므로 url과 우리가 만든 views.py의 index를 연결해야한다.

urls.py를 만들어야한다.


(urls.py 생성)


해당 urls.py는 polls 디렉토리 안에서 생성하였다. 그리고 아래와 같이 작성한다.



(polls/urls.py)


해당 파일에서는 views 를 import 했다. 우리가 방금 작성한 index를 연결하기 위해서이다.
경로를 보면 '' 으로 아무것도 없다.
url에 아무것도 없으면 views.index랑 연결하라는 뜻이다.
옆에 name 인자는 해당 경로를 index 라는 이름으로 지정하는 것이다.
나중에 해당 url을 우리는 이 이름으로 불러와서 쓸것이다.

우리의 목적은 (우리사이트주소)/polls 에 접속하면 해당 index 페이지가 뜨는 것이다.(간단한 문구를 가진 페이지)
그러나 우리는 현재 빈문자열, 즉 아무것도 없는 경우에 index를 연결하였다.

순서가 조금 바뀌었지만,
이제 우리가 작성한 urls.py를 원본 urls.py에 연결해야한다.

(프로젝트 urls.py)



프로젝트이름/프로젝트이름/urls.py는 url 설정하는 파일이다.

여기에 우리는
path('polls/', include('polls.urls')), 줄을 추가하였다.
이 말은 polls 경로로 요청이 들어오면 include 하라는 뜻이다.

과정을 설명하자면
(우리사이트주소)/polls 로 요청이 들어오게 되면 이 파일에서 검사를 한다.

polls/ 라는 첫번째 패턴에서 걸리게 된다.

그러면 polls/ 까지 잘라버린다. 그렇게 되면 남은 url은 '' 빈 문자열이 된다.
해당 url을 
include하는 polls/urls.py로 전달한다.

그렇게 되면 아까 우리가 설정한 urls.py의 빈문자열에 대한 index 연결이 이해가 될것이다.

그렇다면 테스트 해보자!



(서버 실행)


실행 후, 주소/polls 

를 요청해보자.



(결과)


우리가 원하는 목적을 이루었다.!



(* 참조 - https://docs.djangoproject.com/ko/2.0/intro/tutorial01/)

+ Recent posts