Python/Django

[Django-Memo] 5. 메모 조회/삭제/등록

꼰대 2021. 5. 30. 10:24

먼저 django에서 제공하는 admin 계정을 생성합니다. admin 페이지에서 간단한 테이블 관리를 할 수 있어 테스트 데이터 관리에 유용합니다.

쉘에 "python manage.py createsuperuser"를 입력하고 실행합니다.

관리자 아이디로는 admin을 입력하고 이메일주소, 비밀번호 입력 후 계정 생성을 완료합니다.

 

다음으로 admin app에 Memo 모델을 등록하여 관리할 수 있도록 해야합니다. memo/admin.py을 열어 아래와 같이 입력합니다.

memo/admin.py

 

 

다음으로 서버를 실행하고 브라우저 주소창에 "http://127.0.0.1:8000/admin" 입력하고 이동합니다.

 

참고로 관리자 페이지가 영문으로 출력되면 "config/settings.py"에서 아래쪽에 "LANGUAGE_CODE"를 "ko-kr"로 수정하면 한글로 출력됩니다. 또한 "TIME_ZONE"를 "Asia/Seoul"로 수정하면 서버 시간이 서울 기준으로 변경됩니다.

config/settings.py

 

 

관리자 페이지에 로그인하게 되면 django에서 기본으로 제공하는 auth app관련 테이블과 모델로 생성한 Memo 테이블이 보입니다. 여기에서 테스트에 사용할 데이터를 입력합니다.

 

 

이제 기본 홈페이지에 접속하면 등록된 메모 리스트를 보여주는 페이지를 만들겠습니다.

먼저 config/urls.py를 열고 아래와 같이 입력합니다.

이것은 ''(http://127.0.0.1:8000)으로 접속하는 url패턴에 대해 memo app의 views.py에 index 함수에서 처리하겠다라는 내용입니다.

config/urls.py

 

그러면 이제 memo/views.py를 수정해야합니다. 파일을 열고 아래와 같이 수정합니다.

(먼저 Memo 모델을 import) index함수는 request를 인자로 받고 Memo모델에서 is_del=0(삭제 상태가 아닌 메모)인 row를 등록일 내림차순으로 정렬하여 가져와 memo_list라는 변수에 담아 memo_list.html에 html형태로 보내는 뜻입니다.

모델 부분을 쿼리로 구현한다면 아래와 같습니다.

select *

  from memo_memo

  where is_del = 0

order by -created_date

memo/views.py

 

 

다음으로 memo_list.html을 생성합니다. html 파일은 templates에 생성해야하며 이를 위해 먼저 config/settings.py를 열어 DIRS에 아래와 같이 값을 입력합니다. 이는 BASE_DIR (즉, 프로젝트 루트 디렉토리)의 templates 폴더로 경로를 정의하는 내용입니다.

config/settings.py

 

 

루트에 templates폴더, memo폴더를 생성한 다음 memo_list.html 파일을 생성합니다.

 

 

html 파일에서 context 인자로 받은 memo_list를 처리합니다.

이때 html파일에서 python 구문을 표현하는 방법 중 주의해야할 부분은 아래와 같습니다.

- {{ }} : 값 처리

- {% %} : 구문 처리

- 조건문이나 반복문의 끝에는 end처리

{% if ~~~ %}

{% else %}

{% endif %}

templates/memo/memo_list.html

 

위 내용은 메모와 등록일을 표시하고 X는 삭제 아이콘이며 해당 링크는 url 별칭 부여 후 등록합니다.

 

다음으로 URL 관리의 편의성을 위해 urls.py 파일을 app 단위로 분리하겠습니다.

config/urls.py 파일을 열어 아래와 같이 입력합니다. 이는 memo/~ 경로로 들어오는 모든 요청을 memo/urls.py에서 정의한 내용을 include하겠다는 내용입니다.

config/urls.py

 

 

app 이름과 path의 이름은 링크 별칭을 만들기 위한 내용입니다. 예를 들면 html에서 app 이름인 'memo'와 path 이름인 'del'을 조합하여 'memo:del'을 링크로 입력하면 views.py 파일의 memo_del 함수가 이를 처리하게 됩니다.

이제 삭제 처리를 위해 아래와 같이 입력합니다.

memo/urls.py

 

삭제 처리를 위해 memo/views.py을 열어 memo_del 함수를 입력합니다. 메모의 id값을 파라미터로 받아 먼저 해당 값을 조회하고 is_del 값과 수정일자를 변경하여 저장합니다. 그러면 메모 리스트에서는 is_del 값에 의해 해당 메모는 보이지 않게 됩니다.

처리가 끝나면 리스트 페이지인 memo:index로 리다이렉트합니다.

memo/views.py

 

 

html 페이지에 삭제 링크를 추가해야 합니다. templates/memo/memo_list.html 파일을 열어 아래와 같이 삭제 링크를 추가합니다. memo:del에 정의된 url에 memo.id를 GET 파라미터로 넘긴다는 내용입니다.

templates/memo/memo_list.html

 

 

다음으로 메모 등록을 작성합니다. 먼저 memo/urls.py에 메모 등록 path를 추가합니다.

memo/urls.py

 

memo/views.py에 memo_create함수를 추가합니다.

메모 내용인 content를 POST로 받아 등록일자와 함께 Memo 모델 객체를 만든 후 저장합니다.

memo/views.py

 

 

templates/memo/memo_list.html 파일에 메모 내용을 입력하는 input 태그를 추가합니다.

form 구문 중 {% csrf_token %}이라는 특이한 구문이 있습니다.

이 구문을 추가하면 form 데이터를 암호화하여 함수로 보냅니다.

templates/memo/memo_list.html

 

 

이제 메모의 조회, 삭제 (수정), 등록이 모두 구현되었습니다.

 

브라우저 주소창에서 http://127.0.0.1로 이동합니다.

디자인 및 페이징 처리가 안되어 있는 상태입니다.

화면 테스트20의 X 표시를 눌러 삭제합니다.

화면에서는 안보이지만 관리자 페이지에서 보면 is_del 값과 수정일자가 추가 되어 있습니다.

 

"화면 테스트21"이란 내용으로 메모를 등록합니다.

 

Model 생성 시 is_del의 기본값을 False으로 했지만 실제 데이터베이스에는 기본값 설정이 안되어 있었습니다.

 

메모 등록을 통해 확인해보니 기본값인 0 (False)가 입력됩니다.

반응형