Python Django Web Framework - 10/14. 생성기능 (method=GET,POST)

leecw4u·2023년 10월 25일
0

Django

목록 보기
10/15
post-thumbnail

⍰query string이란

1️⃣ http://127.0.0.1:8000/read/1/
2️⃣ http://127.0.0.1:8000/read/?id=1
이 둘은 같은 곳을 가리키고 있다. 다만, 두 번째가 생활코딩님에 따르면 전통적인 방식이고 표준이다. 이는 서버한테 어떤 정보를 질의할 때 사용한다고 해서 query string이라고 한다.
최근엔 누가봐도 2️⃣는 지저분해 보이기 때문에 1️⃣을 더 선호한다고 한다.

전 강의에서 submit버튼을 사용하면 다음과 같은 url이 뜬다.
http://127.0.0.1:8000/create/?title=CRUD&body=CRUD+is...%0D%0A

위 url은 1️⃣,2️⃣와 목적이 다르다.

1️⃣,2️⃣는 데이터를 읽어가는 get역할이고
이 url은 서버에 있는 데이터를 변경하는 작업이다.

⚠️하지만 여기서 문제가 생긴다.

인스타그램 또는 페이스북에서 셀럽이 글을 생성했다고 해보자. 이 때 위와 같은 url을 사용할 경우 방문자들이 방문할때 마다 글이 추가되는 문제가 생긴다.

결국 url에 query string이 포함되서는 안된다.

이를 방지하고 자 우리는 post를 사용하고자 한다.
이 경우 Response header에 정보를 포함시켜 보내 위와 같은 문제를 해결 할 수 있다.

from django.shortcuts import render, HttpResponse 
from django.views.decorators.csrf import csrf_exempt
...
@csrf_exempt
def create(request):
    article = '''
    <form action="/create/" method="post">
        <p><input type="text" name="title" placeholder="title"></p>
        <p><textarea name="body" placeholder="body"></textarea></p>
        <p><input type="submit"></p>
    </form>    
'''
...

create함수 안 form에 methodpost로 설정하면 get 방식에서 post방식으로 바뀐다. 하지만 CSRF 에러가 나게 되는데 이는 django의 보안기능이다.
지금은 이 보안 기능을 다루진 않고 skip할 수 있는 방법을 찾아 보겠다.
from django.views.decorators.csrf import csrf_exempt
를 추가하고 스킵할 함수에 @csrf_exempt 데코레이더를 붙여주면 보안기능을 skip할 수 있다.

이제 실행을 해보자!

데이터는 서버로 전송되었지만 아무 것도 바뀌지 않았다...
그 이유는 우리가 데이터를 서버로 전송했을 때 아무 일도 하지 않았기 때문

➡️ 그래서 다음 강의 때 get방식으로 들어왔을 때와 post방식으로 동작했을 때 처리를 다르게 해보자.

profile
초보 개발자의 끄적끄적 스터디 블로그

0개의 댓글

관련 채용 정보