Django shell에서 연습했던 QuerySet API를 직접 view 함수에서 사용하기


| 단일 게시글 페이지 링크 작성 |
|---|
![]() |
create 로직을 구현하기 위해 필요한 view 함수의 개수는? 2개
=> 사용자 입력 데이터를 받을 페이지를 렌더링 (new) 하는 함수
& 사용자가 입력한 데이터를 받아 DB에 저장(create) 하는 함수



| new 페이지로 이동할 수 있는 하이퍼링크 작성 |
|---|
![]() |

- 행이 저장되려면 save() 메서드 필요함!
redirect -> 클라이언트에게 다시 요청을 보낸다 CRUD중에 C,U,D에서 필요
redirect()
- 클라이언트가 인자에 작성된 주소로 다시 요청을 보내도록 하는 함수
- 특징
- 해당 redirect 에서 클라이언트는 detail url로 요청을 다시 보냄
- 결과적으로 detail view함수가 호출돼 detail view 함수의 반환 결과인 detail페이지를 응답받음
- 결국 사용자는 게시글 작성 후에 작성된 게시글의 detail 페이지로 이동하는 것으로 느끼게 됨
네트워크 상에서 데이터를 주고받기 위한 약속
데이터(리소스)에 어떤 요청(행동)을 원하는지 나타내는 것


403 Forbidden : 서버에 요청이 전달되었지만, 권한 때문에 거절되었다는 것을 의미✔ Cross-Site-Request-Forgery
"사이트 간 요청 위조"
사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여
특정 웹 페이지를 보안에 취약하게 하거나
수정, 삭제 등의 작업을 하게 만드는 공격 방법

요청 시 CSRF Token을 함께 보내야 하는 이유
- Django 서버는 해당 요청이 DB에 데이터를 하나 생성하는(DB에 영향을 주는) 요청에 대해
"Django가 직접 제공한 페이지에서 데이터를 작성하고 있는 것인지"에 대한 확인 수단이 필요한 것이다- 겉모습이 똑같은 위조 사이트 혹은 정상적이지 않은 요청에 대한 방어수단이다
- 요청데이터 + 인증토큰 -> 게시글 작성
왜 POST일 때만 Token을 확인할까?
- POST는 단순 조회를 위한 GET과 달리 특정 리소스에
변경(생성, 수정, 삭제)을 요구하는 의미와 기술적인 부분을 가지고 있기 때문- DB에 조작을 가하는 요청은 반드시 인증 수단이 필요
- 데이터베이스에 대한 변경사항을 만드는 요청이기 때문에 토큰을 사용해 최소한의 신원 확인을 하는 것

![]() |
|---|
| - 삭제한 다음 메인페이지로 redirect하는 것이 필요함!! |

update 로직을 구현하기 위해 필요한 view 함수의 개수는? 2개
=> 사용자 입력 데이터를 받을 페이지를 렌더링 (edit) 하는 함수
& 사용자가 입력한 데이터를 받아 DB에 저장(update) 하는 함수
| urls.py |
|---|
![]() |
| views.py |
|---|
![]() |
| 수정 시 이전 데이터가 출력될 수 있도록하기 |
|---|
![]() |
| edit 페이지로 이동하게 하기 위한 하이퍼링크 작성 |
|---|
![]() |
| urls.py |
|---|
![]() |
| views.py |
|---|
![]() |
| edit.html |
|---|
![]() |