본문 바로가기
django

2020.08.23_django_CRUD_2

by 해맑은 코린이 2020. 8. 24.

오늘은 저번에 만들었던 create에서 나머지 read,update,delete 를 구현해보자!

 

먼저 저번프로젝트를 열어주고 닫았다 열었으니 

 

ls를 찍어보면 저번에 생성했던 가상환경은 있지만, (myvenv) -- 활성화 상태가 안뜬다 ! 코드를 껐다 키면 가상환경도 같이 꺼지기 때문에 다시 활성화를 시켜주자.

 

 

 

저번에 켰던 방법 (mac 은 Scripts 대신 bin) 으로 활성화를 시켜주고,

 

 

 

 

 

manage.py 가 있는 프로젝트로 경로를 옮겨 진행 다시 시작! 참고로  db.sqlite3 - 데이터 베이스 ( 모델을 생성하면서 자동생성) 이다 !

 

 

 

 

먼저 런서버를 돌려주고 우리가 저번까지 했던 것이 잘돌아가는지 확인해보자.

 


이제 read를 구현할텐데, read는 우리가 글을 적어줬을 때, 그 글의 세부내용으로 들어가는 페이지? 정도라고 생각하면 될 것 같다.

 

 

 

그림으로 다시 한번 설명하자면, 저번에 글을 작성해주고 그것을 index로 띄워줬다면 이제 이 게시물을 클릭했을 때 내용들을 보여주는 detail 페이지를 생성해보겠다!

 

 

 

템플릿에 디테일 페이지를 만들어주고, 뷰로 가자! 

 

뷰에서 함수를 적어주기 전에, 우리는 짚고 넘어가야할 개념이 있다.

 

pk = primary key (기본키)

 

여기는 조금 어려운 개념인데, 우리가 객체(작성된 글) 을 생성했을 때 고유의 id 번호가 생긴다. 첫번째글은 = 1, 두번째 글은 = 2 이런식으로!  간결하게 말한다면, 우리가 첫번째글을 클릭했을때는 첫번째 글의 deatil 페이지를 띄워야하고, 

두번째 글을 클릭했을때는 2번째 detail 페이지를 띄워야하는데, 각각 글을 생성했을 때마다 여러개의 detail 페이지를 생성할 수 없으니 오브젝트가 들고 있는 고유의 값을 불러와주기 위해 pk라는 값을 써서 한번에 여러개의 오브젝트들을 관리할 수 있다. 

 

 

어려우니 눈으로 우리가 id값을 보기 위해서 url 뒤에 /admin이라는 경로를 추가해 관리자 페이지로 들어가보자.

 

 

 

그러면 이러한 창이 뜨면서 로그인 창이 뜨게 된다. 관리자 계정을 우리가 만들어주기 위해서 

 

 

 

 

터미널 창에서 python manage.py createsuper 통해 관리자 계정을 생성해준다. 그러면 차례대로 username, Email address, Password 를 입력하라는 창이 나오는데 우리는 Username 과 password 만 생성해줘도 된다. username 을 원하는 것으로 만들어주고, 이메일은 적지 않아도 된다. 비밀번호는 적어도 터미널 상에 입력하는 대로 표시가 뜨지 않지만 입력이 된것이다! 그냥 그래서 한번 더 쳐주고 입력을 해주게 되면 

 

Bypass password validation and create user anyway? 위에 여러가지 문구가 뜨는데 비밀번호를 너무 쉽게해주었을때 뜨는 경고 문고다. 우리는 아직 실제 서버가 아니기 때문에 비밀번호를 복잡하게 생성해줄 필요는 없지만, 나중에 복잡하게 만들기로하고 그냥 경고를 무시하고 y를 치게 되면 정상적으로 superuser가 생성이 된다! 

 

그렇게 

  

로그인으로 들어가주면, 

 

이런 관리자 페이지가 나오게 되는데, 우리는 지금 모델안의 오브젝트들을 보고 싶은거니까,

 

admin.py로 가서 

 

이렇게 모델을 등록해준다. 그렇게 다시 admin 페이지로 들어가면,

 

 

모델이 추가가 되고, 클릭해보면

 

 

여기서 우리가 썼던 오브젝트들이 보여지게 된다! 오브젝트 옆 괄호에 적혀있는 1번 2번이 이 오브젝트들의 pk 값인 것이다! 이제 다시 pk값을 이용하여 뷰 함수를 작성해보자!

 

 

뷰로 가기전 우리는 pk으로 써줄 id를 하나 불러와야하는데,

 

 

index.html 에서 우리가 f 세부페이지로 들어갈 링크를 걸어줄때, id값을 하나 가져오기 위해 a태그에서 밑에서 썼던  write.id 값을 하나 불러와준다.

 

그렇게 되면 view에서 id 값을 써줄 수가 있다. 

 

 

그렇게 매개변수로 id 를 들고 와주고 my_write 에다가 주석의 기능을 하는 get_obect_or_404 를 써준다.

 

 

그러면 없는 페이지에 대해서는 (작성을 해주지 않았거나 잘못된 경로에서)

 

 

 

이런 에러를 띄우게 된다! ( 여기서 보면 3번째를 내가 작성을 해주지 않았으므로 detail/3 페이지는 없는 곳으로 뜨면서 이런 에러를 띄우게 된것이다.)

 

 

그렇게 담아준 변수 my_write 를 딕셔너리 형태로 사용해준다.

 

(여기서 오타 하나 잘못나면 전부 안불러와지니 조심 또 조심...! 나는 3개나 났다..^^)

 

이렇게 장고의 기능에 있는 숏컷에다가 임포트해주면 된다! 이제 간단하게 detail.html에다가 원하는 내용을 띄워주고 url 에 연결을 해보자!

 

 

 

 

 

여기서 url 을 쓸 때 아이디값을 int로 불러와주었는데, 잠시 설명!

 

int

 

파이썬의 개념으로 여기서의 int 란 숫자값을 하나 즉, 아이디 값은 숫자이므로 숫자를 하나씩 불러오기 위해 쓴 값이다. 그래서 우리는 id 값으로 정의해주었던 write_id를 불러와주면 된다!

 

 

그러고 나서 detail.html에 ,

 

 

 

 

폼을 불러와주는 문법으로 변수 my_write의 각각 아이디값, 제목, 내용을 불러와주려고 이렇게 쓰면,

 

 

 

엑... 안이쁘다.. 조금 기능을 추가해서 이쁘게 만들어주자!

 

 

 

 

 

 

 

간단하게 줄바꿈 태그 br을 2번씩 사용해서 두줄에 하나씩 분리해주고(간단한거는 html 기본 폼에 안넣어줘도 작동하더라고..?)

(br 태그는 </br>로 사용안해도 됨.)

그냥 글자로 몇번째글인지, 제목 : , 내용 : 만추가해 주었다!

 

 

 

그럼 이렇게 전에 것 보단 나음... 더이상은 css 새로 생성해서 만들어야하기 때문에 일단 기능위주로만 보자 ㅎ (이렇게 변명을 한다)

 


자! 그러면 read 가 끝났다! 저번에 하나할 때도 이렇게 힘들었는데 뭔가 그래도 지금은 나름 순탄하지 않는가 ㅎㅎ (물론 나는 몇 번의 오류와 오타를 거쳤음 ㅎ)

 

 

이제 이 글을 수정도 하고 삭제도 할 수 있게 만들어야겠지 ? 그것이 바로 update랑 delete 이다! 간단하게 설명하면 마찬가지로 한 오브젝트의 pk 값을 가져와서 update 같은 경우는 create 처럼 이 폼이 유효하고, 이 수정된 데이터의 유효성 검사를 통해 다시 저장해주면 되는 것이고, delete 는 단순이 pk 값을 가져와서 그 pk 값의 오브젝트를 삭제만 해주면 된다 ㅎ 

 

말로 설명하면 역시나 어렵지 update로 가자! 

 

 

 

먼저 버튼을 통해 수정 삭제를 만들어 주고,

 

 

이렇게 버튼이 뜨게 되게 해주자.

 

여기서 부터는 기존 데이터를 수정하고 삭제기 때문에 따로 띄워줄 html은 만들필요가 없다.

 

그러면 먼저 update (수정) 부터! 뷰로 갑씨다

 

자 혼란하다 혼란해...  주석의 설명들을 총정리하자면,

 

우리는 수정을 할 때 기존 데이터원본과 폼을 들고와줘서 오브젝트를 새로 수정한 데이터로 덮어씌워주고,

데이터 유효성 검사를 통해 똑같이 데이터가 유효한 데이터면 save 해주고 다시 index로 돌아가는 기능을 함수로 표현한 것... 나도 정리하면서 정말 혼돈이어따.. 주석과 정리한 내용을 한번 더 읽어보면.. 이해가 되지 않을까...물론

이전 포스팅의 create와 비슷한 원리라 이전 포스팅을 이해해야 update 도 가능하다!

 

++ 뒤에 수정한 글이라, id 와 pk 는 같은 의미로 사용되므로, id = write_id ,pk= wirte_id 똑같이 동작함!!

 

 

자 이제 url 에 연결을 해주자.

 

detail 과 똑같이 연결을 시켜주고, 

 

update.html 에 create 와 동일하게 작성하면 끝!!!!!!!!!

 

 


후... 이제 마지막 delete 로 가자.

 

 

 

delete 는 마찬가지로 pk 값을 들고와서 그 지정 오브젝트를 지워주고 index 페이지로 돌아가면 된다!

 

 

 

 

 

요롷게 id 값을 가져와서 삭제해주고 index로 redirect 해주기

 

 

똑같이 url 에다가 id 값과 함께 적어주자!

 

 

마지막으로 a 태그에다가 id 값과 함께 url을 연결시켜주면!!!!!!된다!!!!!!! 후!!!!

 

이제 실행을 통해 정상적으로 작동하는지를 봅씨다.

 

수정버튼을 누르게 되면 잘 기존 데이터들과 함께 뜨고 수정을 하고 제출을 눌러보자!

 

 

css 가 망한건 기분탓일까 일단 수정이 잘되어서 index 가 잘되는 것만보자^^

 

그 다음에

 

 

삭제를 해주기 위해 3번째 글을 하나 작성해주었다.

 

여기서 삭제 버튼을 누르면,

 

 

3번째가 잘 사라지고 index 로 잘 돌아온 것을 볼 수가 있다!!!!!

 


 

ㅠㅠㅠㅠㅠㅠㅠㅠㅠ드디어 CRUD를 다했다.... 물론 정말정말 기초적인 것이지만, 코린이인 나로써는 글로 정리해서 그렇지 수많은 오류와 오타들과 많은 기능들.... 아무것도 몰랐기에 한번 이 기회에 새로 다시 만들어보며 정리를 했다 ! 다음에는 로그인 기능 구현 포스팅으로 돌아오겠다 그럼 오늘도 끝!

'django' 카테고리의 다른 글

2020.09.02_django_template 상속  (0) 2020.09.03
2020.09.01_django_makemigrations,migrate  (2) 2020.09.02
2020.08.31_django_ sign_up, login, logout  (0) 2020.09.01
2020.08.27 _Django_ Static , Media _정리  (4) 2020.08.28
2020.08.20 django_CRUD_1  (3) 2020.08.21

댓글