본문 바로가기
  • 가제가재_기록블로그
django

django Basic Prac02_03 Read + Delete

by 가제가재 2023. 8. 13.

Django 두 번째 연습예제 - CRUD 시작하기 - 02 Read + Delete

이전 포스트에서 Migration 생성과 Create 한 데이터를 모델처리하여 저장, 확인 했다.

 

이제 웹페이지에서 Create 한 데이터를 확인할 수 있게 만들자!


목차

  • 1. Read 기능 구현
  • 2. Delete 기능 구현

시작하기 전에


시작하기


1. READ 기능 구현

1-1. Views.py 수정하기 - Model불러오기

index 화면에서 Models.py 를 불러와야한다.

카테고리 오브젝트 모두를 가져오고

콘텐츠에 대응, index.html 을 띄울때 같이 띄운다.


 

1-2. HTML 파일 수정하기

기존에는 각 카테고리 그룹마다 HTML 파일에 직접 카테고리 관련 코드를 하나씩 넣어주어야 했다.

원하는 목표인 [+] 버튼을 누를 때 마다 추가되려면 기존 방식은 비효율적이다.

{% for ~ in ~ %}{% endfor %} 를 활용해 모델과 연결하여 Create 한 내용을 카테고리로 하나씩 표시하도록 만들었다.

또한 저장한 category_name 이 보일 수 있도록 category 와 연결했다.

Create 했던 [123] 항목과 [김치찌개], [qwerty] 항목이 보인다!

이제 [+] 버튼을 누른 화면에서도 보이게 하려면 어떻게 할까?

간단하다! 위에서 한 방법과 동일하게 작업한다!


 

1-3. 다른 화면에서도 동일한 내용 보이기

1-1 처럼 views.py 로 돌아가 [+] 버튼을 누르면 연결되는 categoryCreate 함수로 들어가 수정한다.

수정된 내용은 위와 동일하다.

 

views.py를 수정했다면 그 다음은 대응하는 html 파일 수정이다.

이 역시 위와 동일하다.

이제 /categoryCreate/ 에서도 추가 한 내용들이 보인다!

 

드디어 Create 기능과 Read 기능을 구현한 것 처럼 보인다.

하지만 하나 남은 것이 있는데, 바로 [기본그룹] 과 그의 삭제버튼이 없다는 것이다.

이는 이후 작업할 Restaurant 가 들어갈, 모든 그룹이 삭제되어도 최후의 그룹 하나는 있어야 해서 남아있는 것이다.

하지만 현재 상황에서 [기본그룹] 이 실제 Db에 존재하지는 않았다.(지난 포스트 참고)

저 [기본그룹]은 그냥 텍스트일 뿐이다.

따라서 이 그룹을 진짜 그룹 기능을 할 수 있도록 만들어 주어야 한다.

그럼 어떤 과정을 거쳐야 할까?

 

다양한 방법이 있겠지만, 여기서 소개하는 방법으로는 [기본그룹] 이라는 이름의 그룹을 만든 후,

그 그룹의 ID를 확인, 실제 html 코드에서 기본 그룹으로 만들어 준다!


 

1-4. SQLite 내부 데이터 확인하기

[기본 그룹] 이라는 이름의 그냥 그룹을 만들었다.

이 그룹의 ID를 확인하기 위해

$ python manage.py dbshell

> .table

> SELECT * FROM 원하는이름;

> .quit

원하는 그룹은 5번 임을 확인 했다.


1-5. html 기본그룹 수정

우선 {% for %} 문을 사용하는 것은 같다.

왜냐하면 id만 가져온다면 html 화면에서 가져올 이름이 없으니, for 를 돌려 이름들 중 원하는 id를 지닌 이름을 가져오기 위함이다.

그 후 {% if ~~~ %} 를 넣어 원하는 id 를 입력한다.

만약 원하는 id 와 for에서 가져온 이름의 id 가 같다면

category.category_name 를 이용해 가져 올 것이다.

 

그 후 if 문과 for 문을 순서에 맞게 끝내주자.

 

웹 페이지를 보면 별 차이는 없을 것이다.

하지만 실제로는 [기본 그룹]은 정말로 그룹이 되어있는 상태이다.

 

드디어 진짜로 Create 와 Read를 구현했다!!

이제 눈에 띄는 빨간 [삭제] 버튼이 실제로 동작하도록 만들 것이다!


2. Delete 기능 구현

[삭제]를 누르면 실제 Delete 되어야 한다.

DB에 있는 데이터는 어떻게 하면 지울 수 있을까?

물론 관리자인 우리야 직접 dbshell 을 동작해서 원하는 데이터를 지울 수는 있지만, 그건 버튼과 연동되는 기능이 아니다.

위에서 [기본 그룹]을 설정 한 방법을 응용하면 어떨까.

[삭제] 를 누르면 그에 해당하는 데이터의 ID를 가져와 DB와 대조, 삭제 하면 되지 않을까.

 

그래서 html 내부를 자세히 살펴보면 type가 hidden 으로 category의 id를 가져오는 기능이 있는 것을 확인할 수 있다.

이름처럼 hidden은 웹에서는 보이지 않는 기능이지만, 실재하는 것이다.

이를 활용해 POST method 에 데이터의 id를 넣어 받을 수 있다.

 

그럼 기능이 대부분 구현된 것 아닌가?

 

이제 남은 일은 [삭제]를 누르면 ID를 POST 로 받으며

1. 어떤 url로 보낼 것인가?

2. 그에 대한 처리는 어떻게 이뤄지는가?

를 처리해주면 된다!


2-1. html 에서 보낼 url 처리하기

from action"url 주소" 를 입력하면 이벤트가 발생했을 때 그 url로 이동한다.

즉, 버튼을 누르면 기존url/delete 로 페이지가 이동되며 이 때 value 의 값을 보낸다.

아직 ./delete url 처리가 안되어 있으니 만들어주자.


2-2. urls.py, views.py 연결하기

urls.py 에서 연결 해주고

views.py 에서 함수를 만든다.

def Delete_category(request):
    category_id = request.POST['categoryId']    # 받은 ID를 변수에저장
    delete_category = Category.objects.get(id = category_id)    # 모델객체생성, 변수ID와 DB id대조 - Django ORM 기능 사용
    delete_category.delete()    #삭제
    return HttpResponseRedirect(reverse('cateCreatePage'))  #기존페이지로 돌아감

Django의 ORM(Object Relational Mapping) 을 사용해 값을 대조한다.

ModelName.object.get() 은 단일객체를 불러오는데, 이때 ORM을 활성화 한다.

자세한 이야기는 추후 포스트에서...

 

아무튼 Delete 구현을 했다.

웹 페이지에 가서 신나게 Create-Read-Delete 를 해보자.


마무리.

 

지난 포스트에서 Create 를 했고

이번 포스트에서는 Read 와 Delete 를 구현했다.

 

이제 남은 것은 Upadate!

Update는 남은 다른 앱, Restaurant 에서 구현한다.

 

'django' 카테고리의 다른 글

django Basic Prac02_02 Db + Create  (1) 2023.08.09
django Basic Prac01_03 CRUD  (0) 2023.08.03
django Basic Prac01_02 CRUD  (0) 2023.07.26
django Basic Prac01 _ 01프로젝트 시작하기  (0) 2023.07.26