본문 바로가기
파이썬/파이썬 플라스크

2-3 쓰기 구현

by L_SU 2022. 7. 10.

쓰기 구현을 위한 예제 1

위의 두 줄은 앞서 설명한 내용이기에 3번째 줄부터 살펴보면 값을 뒤에 오는 내용을 리턴해주는 함수이다.

4번째 줄: form action은 어디서 작동될지 위치를 알려주는 것이고, method는 보내는 방식으로 POST방식과 GET방식이 있다.

4번째 줄 부연 설명: POST방식은 GET방식보다 좀 더 은밀한(?) 방법으로 GET방식은 주소에 내가 보내는 값이 나타나게 된다. 반면에 POST방식으로 보내면 주소에 나타나지 않는다.

5번쨰 줄: 다음으로 input type은 말 그대로 입력될 타입을 지정해주는 것으로 text를 지정해줘 문자열을 입력할 수 있게 만들었다. 다음으로 이 입력한 것을 식별할 수 있도록 name을 지정해주고, plcekholder를 사용해 입력 전에 단순히 빈칸으로 두는 게 아니라 예시 문자가 나타나게 했다.

6번째 줄: 내용을 처리하는 부분에선 type을 text 대신 textarea를 사용해 입력을 좀 더 자유롭게 해주었다

7번째 줄: 작성한 제목과 내용을 보내주기 위해 submit로 버튼을 만들어줬다. value로 이 버튼 안에 들어갈 값을 지정해줬다.

쓰기 구현을 위한 예제 2

위 사진을 보면서 내용을 읽으면 이해가 좀 더 쉬울 것이다.

 

쓰기 구현 예제3

하지만 내용을 입력하고, 저 상태로 전송하게 되면 에러가 나게된다. 쓰고 보내는데 받는 함수가 없기 때문이다.

 

 

 

쓰기 구현 예제4

위에선 아직 보내기만 하고 받지 않기 때문에 받는 부분까지 구현한 예제이다.

첫번째 줄에서 GET으로 받았는지 POST로 받았는지 확인 해준다. 주소로 접근했다면 GET, 아니라면 POST방식으로 받게 된다.

3~5번째 줄: if문에선 받은 메소드가 POST인지 확인해준다. 맞다면 title이라는 변수와 body라는 변수로 값을 받아준다.

6번째 줄: data라는 변수를 지정해 open()함수로 ex_read.py 파일을 열어주고 a라는 옵션을 줘서 파일 맨 마지막에 작성 되게 만들어줬다. 또 인코딩방식을 utf8로 지정해서 한글이 깨지는 걸 방지했다.

7번째 줄: global 형으로 last_id라는 변수를 지정했다.

8번째 줄: 파일을 6번째 줄에서 열어줬음으로 본격적으로 파일에 쓰기를 진행한다. id는 라스트 아이디에 1을 추가하여 마지막 다음의 숫자로 자연스럽게 이어지게 설정해줬고 타이틀과 바디는 위에서 받은 걸 넣어줬다.

9번째 줄: 열었던 파일을 close() 함수로 닫아줬다.

10번째 줄: 위까지가 POST방식으로 접근되었을 때의 응답이었다면, 여기서부턴 주소로부터의 접근을 처리하는 코드이다.

11번째줄~: 위에 설명한 코드와 동일하다.

마지막 줄: create/에서 쓰고 넘겨줬을때 바로 업데이트가 되지 않는 현상을 고치고자 추가한 문장이다.

쓰기 구현 예시

다음과 같이 /create/ 주소로 들어오게 되면 아까와 같이 값을 입력할 수 있다.

쓰기 구현 예시 1

하지만 아직 데이터를 보내고 난 뒤의 url에 대한 처리가 되지 않았음으로 여전히 에러는 뜬다.

쓰기 구현 예제2

그래도 ex_read 파일엔 데이터가 쓰여진 모습이다.

쓰기 구현 예시 2

페이지에서도 정상 작동 하는 모습

이제 데이터를 전송했을때 나는 오류만 해결해주면 된다.

 

해결 방안

다음과 같이 POST로 받았을때의 경우에 url_for로 메인으로 돌아갈 수 있게(굳이 메인이 아니여도 됨) url을 구축해주고, 리턴을 해준다면 문제를 리다이렉트로 해결해줄 수 있게 된다!

'파이썬 > 파이썬 플라스크' 카테고리의 다른 글

2-5. sqlite3  (0) 2022.07.10
2-4. Python DB API (PEP 249)  (0) 2022.07.10
2-2 읽기 구현  (0) 2022.07.09
2-1. 라우터란?  (0) 2022.07.08
1. 자신의 학번 출력하기  (0) 2022.07.02