코깽이의 코딩일기

Django - 첫 번째 장고 앱 작성하기, part 2-2 본문

Django/Django - 튜토리얼

Django - 첫 번째 장고 앱 작성하기, part 2-2

코깽이 2023. 8. 2. 17:31
반응형

공식문서

https://docs.djangoproject.com/ko/4.2/intro/tutorial02/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com


 

1. API 가지고 놀기

Python 쉘 환경에 들어가서 API를 가지고 놀아보자고 합니다. API에 대해서 정의를 한번 살펴보고 진행하겠습니다.


API란?

    - API는 "Application Programming Interface"의 약자로, 애플리케이션 간에 서로 소통하고 상호작용하기 위한 규칙과 메커니즘을 제공하는 인터페이스를 의미합니다.

    - 일반적으로, 프로그래밍 언어나 라이브러리가 제공하는 함수와 같은 인터페이스를 API라고 합니다. 이 API를 통해 다른 애플리케이션 또는 서비스와 상호작용할 수 있습니다.


간단하게 API의 정의에 대해서 보았으니 직접 실해보면서 익숙해져 보도록 하겠습니다.

python manage.py shell

Python Shell을 실행시켜 줍니다.

 

코드를 순차적으로 진행시키면서 한 단계를 진행시키면서 주석을 잘 살펴봅니다.

 

먼저 우리가 만들어둔  Choice와 Question 모델을 import 해줍니다.

현재 Question에 저장된 objects를 확인해 보는데 아직은 추가한 내용이 없어서 텅 비어있는 [] 형태로 출력이 나옵니다.

새로운 값을 추가해 보기 전에 현재 시간을 저장하기 위한 timezone을 import 해주고 q라는 변수에 Question 모델의 필드에 맞는 값을 저장해 줍니다.

q.save()를 통해서 q를 저장해 주고 id도 확인해 봅니다.

방금 작업으로 Question에 값을 1개 추가해 주었으니 1이라는 값이 출력되는 것을 볼 수 있습니다.

이어서 변수명. 필드명을 통해서 해당되는 값을 확인해 봅니다.

q.question_text = " "를 통해서 해당 필드의 값을 수정도 가능합니다.

작업이 끝나면 q.save()를 통해 수정된 부분을 저장해 줍니다.

 >>> q.question_text을 통해서 수정된 값이 잘 들어갔는지 확인도 가능합니다.

Question.objects.all()을 통해서 Question에 들어있는 objects의 총개수도 확인이 가능하네요.

 

마지막에 전체 데이터를 총개수만 보이는 게 아쉽다고 생각을 했는데 이어지는 내용에서 models.py 코드를 수정해서 확인해 보라고 하네요.

기존에 작성된 코드 맨 아래에 함수를 추가해 줍니다.

게시물이 최근 1일 이내에 작성된 게시물인지 확인하는 함수도 하나 추가로 작성해 주고 다시 python shell환경에서 확인해 보겠습니다.

이번 Python Shell 실습은 한 번에 진행하기에는 길어 나눠서 진행하겠습니다.

아까와 같이 만들어둔 models을 import 해줍니다.

함수를 추가로 작성하기 전에 실습의 마지막 코드를 다시 실행시켜 보니 이번에는 1이 아닌 What's up? 이 출력됩니다.

이번에는 filter를 이용해서 id가 1인 값을 출력해 봅니다.

그다음으로 questin_text가 What으로 시작하는 값을 출력해 봅니다.

 

커스텀 함수로 생성해 둔 최근 게시물인지 판별하는 함수를 사용하기 위해 timezone을 import 해주고

current_year이란 변수에 현재 시각의 year을 저장

get으로 저장된 값의 year과 current_year에 저장해 둔 현재 year이 같은 값을 가져와봅니다.

 

filter를 이용해서 Question.objects.filter(id=2)를 실행시키면 [ ] 텅 빈 값을 반환해 줍니다.

하지만 get을 이용해서 Question.objects.get(id=2)를 실행시키면 존재하지 않는다는 메시지와 함께 오류가 발생합니다.

 

Get과 Filter에 대해서 간단히 살펴보고 넘어가겠습니다.

 


Get과 Filter

공통점

    - 두 함수 모두 Django에서 QuerySeet API에서 데이터베이스로부터 데이터를 가져오는 함수이다.

 

차이점

    get

        - 고유한 값을 가진 필드를 기준으로 단일 객체를 가져옵니다.

        - 오직 한 개의 결과만 반환되어야 하며 예외가 발생합니다.

    filter

        - 조건에 해당하는 모든 객체를 가져옵니다.

        - 결과가 없더라도 빈 QuerySet을 반환해서 예외가 발생하지 않습니다.


primary key를 이용해서 데이터에 접근해 보겠습니다.

get 함수를 이용해서 pk 값이 1인 데이터를 확인해 봅니다.

q에 pk가 1인 값을 넣어주고 was_published_recently함수를 실행시켜서 결과를 확인해 봅니다.

1년 이내에 작성되어서 True값을 return 해줍니다.

 

Choices 모델은 pk로 Question에 연결되어 있습니다. 여러 개의 Choices가 한 개의 Question에 존재할 수 있습니다.

여러 개의 Choice를 추가해 보도록 하겠습니다.

 

변수 q에 pk가 1인 쿼리의 정보를 가져옵니다.

create()를 통해서 choice 객체를 만들어줍니다.

변수 c에 같은 방식으로 할당하여 choice 객체를 만들어줍니다.

새롭게 c에 할당해 주는 이유는 이후에 Choice에 접근하는 방식이 유용하기 때문입니다.

 

c에 저장된 question을 확인해 봅니다.

q에 저장된 선택지도 전부 확인해 봅니다.

총개수도 확인해 볼 수 있습니다.

 

filter함수를 사용해서 최근에 1년 이내에 작성된 선택지를 확인해봅니다.

변수 c에 "Just hacking"으로 시작하는 선택지를 filter 해서 가져옵니다.

delete() 함수를 이용해서 해당 c에 가져온 선택지를 삭제합니다.

Choice.obejects.all()을 실행시켜 보면 선택지에서 삭제된 것을 확인할 수 있습니다.


2. Django 관리자 소개

Django에서는 관리자를 자동으로 생성할 수 있습니다. 사이트 또한 처음 urlspattern에서 본 것처럼 만들어져 있습니다.

명령어를 통해 Django에서 지원하는 관리자를 생성해 보겠습니다.

 

quit() 명령어로 python shell 환경에서 나와 다시 가상환경으로 돌아오겠습니다.

가상환경이 활성화되어 있는 것을 확인해 주시고 명령어를 실행시켜 보겠습니다.

python manage.py createsuperuser

 

비밀번호를 사용자 이름과 유사하게 작성하면 경고 메시지가 출력되고 이대로 비밀번호를 작성할 건지 물어봅니다.

이런 방식은 보안상 매우 취약하므로 N을 해주고 새롭게 비밀번호를 설정해 주었습니다.


3. 개발 서버 시작

관리자 계정도 만들었고 관리자 페이지는 기본적으로 제공한다고 하니 서버를 열어 한번 확인해 보겠습니다.

 

python manage.py runserver

서버를 가동해 줍니다.

우리는 주소랑 포트를 변경하지 않았기에 http://127.0.0.1:8000/admin 사이트로 접속해 줍니다.

접속하니 관리자 로그인 창으로 바로 이동됩니다. 언어 설정도 한국어로 변경을 해놔서 다 한글로 보이네요.

 


4. 관리자 사이트에 들어가기

우측 상단에 접속한 관리자 ID가 보이고 사이트 관리 페이지로 넘어와졌습니다.

몇몇 관리 기능들이 보이는데 이것들은 django.contrib.auth 모듈에서 제공되는 것인데 Django에서 제공되는 인증 프레임워크입니다.


5. 관리 사이트에서 poll app을 변경가능하도록 만들기

우리가 만든 poll앱에 관한 관리 기능들이 보이지 않습니다.

아직 admin.py에 알려주어야 합니다.

아래와 같이 코드를 수정해 줍니다.


6. 자유로운 관리 기능을 탐색하기

관리자 페이지를 새로고침 해보면 polls앱과 Questions 추가된 것을 확인할 수 있습니다.

Questions을 들어가 보면 우리가 python shell에서 만든 질문을 확인할 수 있습니다.

What's up을 눌러보면 해당 question 관리 기능들을 확인할 수 있습니다.

question 변경 페이지에서 알아둘 내용들입니다.


 

반응형