조회(by 웹사이트)
- view에서 model에 접근해 모든 아티클 가져오기
- view에서 가져온 아티클을 template으로 넘기기
from .models import Article ... def articles(request): articles = Article.objects.all() context = { "articles": articles, } return render(request, "articles.html", context) ...
- template에서 넘어온 context 보여주기
{% extends "base.html" %} {% block content %} <h1>Articles</h1> <ul> {% for article in articles %} <li> <div>글 번호 : {{ article.id }}</div> <div>글 제목 : {{ article.title }}</div> <div>글 내용 : {{ article.content }}</div> <br> </li> {% endfor %} </ul> {% endblock content %}
- view에서 템플릿을 랜더링해서 리턴
조회를 최신순으로 하기
생성(by 웹사이트)
GET & POST
GET
- 원하는 리소스를 가져오는데에 사용
- 생성할 때도 사용할 수 있지만(로직상 문제는 없지만), 리소스 조회용으로 사용하자는 개발세계에서의 약속
- 이걸로 생성 업데이트 삭제 등을 하면 원치않는 출금이 생길지도.... - DB에 변화를 주지 않는 요청
- Read에 해당
POST
- 서버로 데이터를 전송할 때 사용
- 특정 리소스를 생성 혹은 수정하기 위해 사용
- DB에 변화를 주는 요청임을 의미
- Create, Update, Delete에 해당
사이트간 요청 위조 CSRF(Cross-Site-Request-Forgery)
CSRF(Cross-Site-Request-Forgery)
- 유저가 실수로 해커가 작성한 로직을 따라 특정 웹페이지에 수정/삭제등의 요청을 보내게 되는 것.
→ 좋은 사이트 서버 입장에서는 어디서 온 요청인지 구분이 필요.
⇒ 즉, 정말 유저가 의도한 요청인지 검증이 필요.
CSRF Token
- 유저가 서버에 요청을 보낼 때 함께 제공되는 특별한 토큰 값으로, 이 토큰은 사용자의 세션과 연결되어 있음.
- 요청이 전송될 때, 함께 제출되며 서버는 요청을 받을 때 이 토큰을 검증하여 요청이 유효한지 확인하는 방식으로 CSRF을 방지.
- 쉽게말해 서로 알아볼 수 있는 임의의 비밀번호를 만들어서 주고 받는 형식
- 일반적으로 GET을 제외한 데이터를 변경하는 Method에 적용.
🤔 Https?
- HTTPS는 네트워크 통신 상의 보안이고(정보 중간에 탈취 방지), CSRF는 유저인지 판단하는 상에서의 보안(해커가 나인척하면서 출금요구 등을 방지, 정보따윈 필요x)
- 유저의 브라우저에서 이미 인증된 요청을 전송하는것으로 추가적인 보안 조치가 필요
추가 내용
POST 방식 vs GET 방식
- HEADER
HTTP 전송에 필요한 모든 부가정보를 담고있는 부분으로, 메시지 크기, 압축, 인증, 요청 클라이언트(웹 브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등등 을 포함하고 있습니다. - BODY
실제 전송할 데이터가 담겨있는 부분으로, 데이터가 없다면 비어있게 됩니다. - HTTP Request
- HTTP Response
- GET은 데이터를 URL에 담아보내고 POST는 BODY에 담아 보냄
- 따라서 GET은 데이터 전송에 한계가 있으나, POST는 그렇지 않음
- POST방식으로 데이터를 전송할 때는 CSRF Token이 필요
CSRF Token 실제 모습
F12 → sources → new/ 에 나와있음. 이 값은 새로고침 할 때 마다 바뀜
'Django' 카테고리의 다른 글
Django Form, Django Model Form (0) | 2024.08.16 |
---|---|
Django MTV 사용하기 (RUD) (0) | 2024.08.14 |
ORM(Django) (0) | 2024.08.14 |
모델 및 마이그레이션 (0) | 2024.08.14 |
url 변수, 앱 분리, Naming URL Patterns(장고) (0) | 2024.08.13 |