Django ORM with view

뚝딱뚝딱·2023년 10월 2일
1

Django

목록 보기
7/13
post-thumbnail

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

Read

2가지 조회 진행

1. 전체 게시글 조회

2. 단일 게시글 조회

단일 게시글 페이지 링크 작성

Create

create 로직을 구현하기 위해 필요한 view 함수의 개수는? 2개
=> 사용자 입력 데이터를 받을 페이지를 렌더링 (new) 하는 함수
& 사용자가 입력한 데이터를 받아 DB에 저장(create) 하는 함수

1. new 기능 구현

  • 서버로 사용자 요청을 보내는 대표적인 태그 form태그 = 인풋태그에 작성되는 여러 사용자 입력데이터를 받아서 취합해서 어디론가 보내는 역할을 한다.

  • textarea = 내용 많을때 적합하다. 모서리에서 크기를 줄였다늘였다할수있음
new 페이지로 이동할 수 있는 하이퍼링크 작성

2. create 기능 구현

- 행이 저장되려면 save() 메서드 필요함!
redirect -> 클라이언트에게 다시 요청을 보낸다 CRUD중에 C,U,D에서 필요

redirect

  • 게시글 작성 후 완료를 알리는 페이지를 응답하는 것
  • 게시글을 '조회해줘!'라는 요청이 아니라 '작성해줘!'라는 요청이기때문에 게시글 저장 후에 페이지를 응답하는 것은 POST 요청에 대한 적절한 응답이 아니다.
  • 따라서 데이터를 저장한 후 페이지를 주는 것이 아니라 다른 페이지로 사용자를 보내야 한다.
    (사용자를 보낸다 == 사용자가 GET 요청을 한번 더 보내도록 해야 한다)

redirect()

  • 클라이언트가 인자에 작성된 주소로 다시 요청을 보내도록 하는 함수
  • 특징
    • 해당 redirect 에서 클라이언트는 detail url로 요청을 다시 보냄
    • 결과적으로 detail view함수가 호출돼 detail view 함수의 반환 결과인 detail페이지를 응답받음
    • 결국 사용자는 게시글 작성 후에 작성된 게시글의 detail 페이지로 이동하는 것으로 느끼게 됨


HTTP request methods

HTTP

네트워크 상에서 데이터를 주고받기 위한 약속

HTTP request methods

데이터(리소스)에 어떤 요청(행동)을 원하는지 나타내는 것

1. 'GET' Method

  • 특정 리소스를 조회(R)하는 요청(GET으로 데이터를 전달하면 Query String 형식으로 보내짐)
  • 이 방법을 로그인할때는 쓰지 않는다. url에 노출됨

2. 'POST' Method

  • 특정 리소스에 변경(생성, 수정, 삭제)을 요구하는 요청(조회를 뺀 나머지)
  • POST로 데이터를 전달하면 HTTP Body에 담겨 보내짐

TTP response status code

  • 특정 HTTP 요청이 성공적으로 완료되었는지를 3자리 숫자로 표현하기로 약속한 것
  • 403 Forbidden : 서버에 요청이 전달되었지만, 권한 때문에 거절되었다는 것을 의미
  • 거절된 이유 : CSRF token이 누락되었다.

CSRF

Cross-Site-Request-Forgery "사이트 간 요청 위조"
사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여
특정 웹 페이지를 보안에 취약하게 하거나
수정, 삭제 등의 작업을 하게 만드는 공격 방법

CSRF Token 적용

  • DTL의 csrf_token 태그를 사용해 사용자에게 토큰 값을 부여
  • 요청 시 토큰 값도 함께 서버로 전송될 수 있도록 함

    요청 시 CSRF Token을 함께 보내야 하는 이유

    • Django 서버는 해당 요청이 DB에 데이터를 하나 생성하는(DB에 영향을 주는) 요청에 대해 "Django가 직접 제공한 페이지에서 데이터를 작성하고 있는 것인지"에 대한 확인 수단이 필요한 것이다
    • 겉모습이 똑같은 위조 사이트 혹은 정상적이지 않은 요청에 대한 방어수단이다
    • 요청데이터 + 인증토큰 -> 게시글 작성

왜 POST일 때만 Token을 확인할까?

  • POST는 단순 조회를 위한 GET과 달리 특정 리소스에 변경(생성, 수정, 삭제)을 요구하는 의미와 기술적인 부분을 가지고 있기 때문
  • DB에 조작을 가하는 요청은 반드시 인증 수단이 필요
    - 데이터베이스에 대한 변경사항을 만드는 요청이기 때문에 토큰을 사용해 최소한의 신원 확인을 하는 것

Delete

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

Update

update 로직을 구현하기 위해 필요한 view 함수의 개수는? 2개
=> 사용자 입력 데이터를 받을 페이지를 렌더링 (edit) 하는 함수
& 사용자가 입력한 데이터를 받아 DB에 저장(update) 하는 함수

1. edit 기능 구현

urls.py
views.py
수정 시 이전 데이터가 출력될 수 있도록하기
edit 페이지로 이동하게 하기 위한 하이퍼링크 작성

2. update 기능 구현

urls.py
views.py
edit.html
profile
나의 행복 만들기

0개의 댓글