Django

Django MTV 사용하기(CR, DB 조회 역순, CSRF)

zhelddustmq 2024. 8. 14. 16:09

조회(by 웹사이트)

  1. view에서 model에 접근해 모든 아티클 가져오기
  2. view에서 가져온 아티클을 template으로 넘기기
    from .models import Article
    ...
    
    def articles(request):
        articles = Article.objects.all()
        context = {
            "articles": articles,
        }
        return render(request, "articles.html", context)
        
     ...

  3. 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 %}

  4. view에서 템플릿을 랜더링해서 리턴

조회를 최신순으로 하기

 

생성(by 웹사이트)

GET & POST

GET

  • 원하는 리소스를 가져오는데에 사용
  • 생성할 때도 사용할 수 있지만(로직상 문제는 없지만), 리소스 조회용으로 사용하자는 개발세계에서의 약속
    - 이걸로 생성 업데이트 삭제 등을 하면 원치않는 출금이 생길지도....
  • DB에 변화를 주지 않는 요청
  • Read에 해당

POST

  • 서버로 데이터를 전송할 때 사용
  • 특정 리소스를 생성 혹은 수정하기 위해 사용
  • DB에 변화를 주는 요청임을 의미
  • Create, Update, Delete에 해당

GET -> POST로 바꾸기

 

사이트간 요청 위조 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 실제 모습

CSRF 토큰이 SET 되어 있는채로 보내짐

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