728x90

이전 글에서는 CREATE와 READ에 대해서 Djago에 적용시키며 배워보았다. 이번 글에서는 남은 UPDATE/DELETE에 대해서 알아보자.

목차

1. DELETE

2. UPDATE

Admin Site


1. DELETE

# READ 2 (detail page)

  • 개별 게시글 상세 페이지 제작
  • 모든 게시글마다 view function과 템플릿 파일을 만들 수는 없기 때문에 글의 번호(pk)를 활용하자
urls

우선 URL로 특정 게시글을 조회할 수 있는 번호를 받자. 정수형이기 때문에 <int>를 이용해주었다.

views

view 함수에선 Article.objects.get(pk=pk)에서

    1. 오른쪽 pk는 variable routing을 통해 받은 pk

    2. 왼쪽 pk는 DB에 저장된 레코드의 id칼럼

templates

url에서 <int:pk>를 이용하여 번호를 받기 때문에 url주소와 함께 article.pk 정보를 함께 넘겨주어야 한다.

또한 게시글을 생성한 후 index 페이지가 아닌 detail페이지로 가기 위하여 redirect인자를 변경해줘 보자!


# DELETE

urls
  • 모든 글을 삭제하는 것이 아니라 삭제하고자 하는 특정 글을 조회 후 삭제해야 한다.

views

templates
  • detail 페이지에 작성하며 DB에 영향을 끼치므로 POST method 사용


2. UPDATE

  • 수정은 CREATE 로직과 마찬가지로 2개의 view 함수가 필요하다.
    1. 사용자의 입력을 받을 페이지를 렌더링하는 함수 1개
      • "edit" view function
    2. 사용자가 입력한 데이터를 전송받아 DB에 저장하는 함수 1개
      • "update" view function

 

edit : urls & views

특정 글을 수정하므로 마찬가지로 <int:pk>를 받아준다.

edit : templates
  • 또한 수정을 처음부터 하는 것이 아닌 기존의 값에서 진행한다.
  • 따라서 html 태그의 value 속성을 사용하여 기존에 입력되어 있던 데이터를 출력

  • Edit 페이지로 이동하기 위한 하이퍼 링크를 detail page에 작성해준다.

  • 이후 Update를 위한 로직을 단계에 맞게 작성해주자.

url
view
template

여기까지 했다면 홈페이지 하나를 만들며 데이터를 처리하는 단계에 대해서 배웠기 때문에 실습을 해보는 걸 추천한다:)

 


3. Admin Site

  • Django의 가장 강력한 기능 중 하나
  • automatic admin interface
  • "관리자 페이지"
    • 사용자가 아닌 서버의 관리자가 활용하기 위한 페이지
    • 모델 class를 admin.py에 등록하고 관리
    • 레코드 생성 여부 확인에 매우 유용하며 직접 레코드를 삽입할 수도 있다.

 

admin 계정 생성
python manage.py createsuperuser
  • username과 password를 입력하여 관리자 계정을 생성해준다.
  • email은 선택사항이라 입력하지 않고 enter로 넘겨주어도 된다.
  • 비밀번호 생성 시 보안상 터미널에 입력되지 않으니 무시하고 입력 이어가도 된다.

 

admin site 로그인
  • 작성하는 app의 url에서 app name 대신 admin을 넣어주면 된다
    • 예) https://127.0.0.1:8000/app_name/ admin/ 로 접속 후 로그인
  • 계정만 만든 경우 Django 관리자 화면에서 모델 클래스는 보이지 않는다.

모델 클래스 등록
  • 모델의 record를 보기 위해서는 admin.py에 등록해주어야 한다.

위와 같이 모델 클래스가 생긴 것을 확인할 수 있다.

728x90

'Back-end > Django' 카테고리의 다른 글

[Django] ModelForm  (0) 2022.09.06
[Django] Form  (1) 2022.09.06
[Django] CRUD_with_view_functions1  (0) 2022.09.05
[Django] QuerySet API  (0) 2022.09.04
[Django] Model  (0) 2022.09.04