티스토리 뷰

728x90

지난 글에서 파이썬 플라스크로 설치 하고 웹브라우저에 hello world 접속 까지 했었습니다.

2020/04/24 - [KIT] - [웹 앱프로그래밍] 파이썬 플라스크(Python Flask) 설치 및 웹 애플리케이션(Web Application) 시작

 

[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) 설치 및 웹 애플리케이션(Web Application) 시작

이번 포스팅은 파이썬 웹프레임워크인 플라스크 패키지 를 설치 하고 웹 애플리케이션을 실행시켜 웹 페이지에 접속을 하는 구현을 해봅니다. 먼저 플라스크를 설치를 해야 됩니다. 우리는 이미 파이썬 설치와 가..

wings2pc.tistory.com

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'
    
if __name__ == '__main__':
    app.run()

플라스크 소스를 보고 간단하게 구조를 파악을 해봅니다.

flask 모듈을 소스에 포함 시키고 Flask를 사용 가능 하게  선언 하고

app 에 Flask()를 넘겨서 app 전역객체로 사용 할수 있게 해줍니다. (인스턴스생성)

__name__ 은 파이썬에서 내부적으로 사용하는 특별한 변수 입니다. 보통 __name__의 값을 출력 하면 모듈의 이름을 뜻하는데 만약 실행이 되는 .py 모듈은 __main__ 으로 나옵니다.

Flask app에서는 시스템에서 경로를 설정하기 위한 위치(리소스를 찾는데 사용)를 알기 위해 사용 합니다. 또 디버깅 정보등에도 사용 됩니다. 

단일 모듈을 사용 할 때는 따로 지정 하지 않고 __name__ 을 사용 하면 되지만 패키지 형태로 사용 할 경우 패키지 이름을 직접 써줘야 합니다.

 

단일 모듈: app = Flask(__name__)

패키지 형태: app = Flask('application 명 지정')

 

에서도 __name__이 나오는데 보통 파이썬에서 메인에 해당 하는 코드에서 많이 볼수 있습니다. 다른 언어에서 main 엔트리 포인트로 표헌이 되며 파이썬에서도 python app.py 로 실행이 되면 app.py 의 코드는 엔트리 포인트가 되어 __name__ 의 값은 __main__이 됩니다. 즉 프로그램의 시작점이라고 볼수 있습니다.

여기서도 우리는 python app.py 로 실행 시키기 때문에 __name__은 __main__ 이 들어가므로 app.run()이 실행이 되는 것을 알수 있습니다. 만약 app.py 을 외부 모듈로 사용 되는 경우면 __name__ 은 app이라는 이름으로 나오게 되어 app.run() 은 실행이 되지 않습니다.

 

@라고 되어 있는 부분은 파이썬에서 *데코레이터(decorator) 라고 하고 이를 사용하여 app의 객체의 route함수에 request 인자를 넘기면서 HTTP요청을 처리 합니다.

 

의 함수는 @ app.route 데코레이터 URL과 함수와 연결 합니다.

 

*데코레이터(decorator): 파이썬에서 기본적으로 사용되는 기술로 함수내의 추가적인 작업들을 간단하게 사용 가능하도록 도와주는 기술입니다. Flask 동작 원리는 복잡하지만 데코레이터 함수에 구현해서 복잡성을 숨기고 간단하게 사용 할 수 있게 합니다.

 

저기에서 '/' 로 요청(request) 하면 즉 http://127.0.0.1/(생략가능) 여기로 접속 하면 hello world! 가 웹 브라우저 화면에 나오는것을 확인할 수 있었습니다.

첫 시간(참고링크)에 요리사 그림으로 요청과 응답에 대해 설명을 했었는데요. 정말 중요 하다고 했었습니다.

그럼 이 요청(request) 에 대해 조금 더 알아 볼게요.

Http Request Method 라고 해서 클라이언트에서 웹서버로 요청할 때 어떤 방식으로 데이터를 전달 할 것인지를 정할 수가 있습니다. 그럼 이 Request Method 종류에 대해 알아 보도록 하겠습니다.

 

Http Request Method

GET

서버로부터 정보를 조회 또는 요청 (데이터를 Body에 담지 않고 URL에 *쿼리스트링을 통해 전송)

가장 일반적인 요청 방식

HEAD GET 요청으로 반환될 데이터 중 헤더 부분에 해당하는 데이터만 요청
POST

클라이언트에서 서버로 처리할 수 있는 데이터를 보냄 (데이터를 HTTP 메세지의 Body에 담아서 전송)

보통 HTML 폼을 통해 데이터 전송

PUT 클라이언트가 서버에게 지정한 URL에 지정한 데이터를 저장할 것을 요청. POST와 유사
DELETE 클라이언트가 서버에게 지정한 URL의 정보를 제거할 것을 요청
OPTIONS 해당 URL에서 지원하는 request method를 알려준다

* 쿼리스트링: URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터 (파라미터가 여러 개이면 &로 연결)

 

여기서 우리가 많이 쓰이고 잘 알아야 할 메소드는 GET과 POST 입니다.

추후에 Request를 조금 더 깊게 다룰 때(RestAPI라던지) 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE 로 더 용도에 맞는 메소드를 사용할 수 있지만 우리는 GET 과 POST를 사용하도록 하겠습니다.

 

클라이언트에서 서버로 데이터를 전송 할 때 POST를 쓰지만 GET으로도 전송할 수 있습니다. 하지만 방식의 차이는 있습니다. 위 표에서 보듯 URL에 붙여 보내는냐 Body에 담아서 보내느냐의 차이입니다. GET으로 데이터를 전송할 때 URL 쿼리스트링으로 보내면 길이의 제한이 있고 URL에 데이터가 표시가 되는 반면 POST는 body로 싫어서 보내기 때문에 데이터 길이의 제한이 없어 대용량의 데이터를 전달할 때 사용할 수 있습니다. (예를 들어 게시판의 장문의 글이라던가...)

 

자 이제 플라스크에서 HTTP Request를 어떻게 사용하고 처리하는지를 알아보겠습니다.

hello world 출력하는 소스에 request를 import 하고 함수를 하나 더 추가 해봅니다. route에는 /method 가 되어 있기 때문에 접속 URL도 /method로 접속을 해야 합니다.

 

예제 소스에서 빨간 박스 부분 추가 해서 확인하기 위해서는 터미널창에 서버를 Ctrl + C를 눌러 종료 하고 다시 실행 시켜야 합니다. 소스를 수정하고 이러한 작업을 반복 하기에는 개발중인 상태에서는 너무 불편합니다.

그래서 디버그 모드로 실행을 시키면 이 작업들 자동으로 하게 됩니다.( 수정 후 서버 재시작)

app 디버그 모드를 True 플래그로 설정 합니다. 사용법은 아래와 같습니다.

 

app.debug = True

또는 

app.run(debug=True)

 

더보기를 열면 전체 소스를 볼 수 있습니다.

더보기
from flask import Flask, request
app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

@app.route('/method', methods=['GET', 'POST'])
def method():
    if request.method == 'GET':
        return "GET으로 전달"
    else:
        return "POST로 전달"

if __name__ == '__main__':
    app.run(debug=True)

 

 

간단하게 주소창에  http://127.0.0.1:5000/method 입력 으로 확인 가능합니다.

Postman 프로그램으로 확인을 할 수 있습니다. (추후에 다뤄볼 예정)

 

만약 POST로 전달을 해보고 싶으면 html form 태그에 method 속성에 POST를 입력해서 전송 하면 확인이 가능합니다.

이전 글 참조

2020/04/07 - [KIT] - [웹 앱프로그래밍] HTML 기본 - 기초 웹 개발 하기

 

[웹 앱프로그래밍] HTML 기본 - 기초 웹 개발 하기

Form 테그를 활용 하여 위와 같은 페이지를 만들어 봅시다. 구글에서 w3schools 를 검색 해서 저기 위 링크로 들어 갑니다. w3schools.com 페이지가 나오면 위 빨간 박스 부분을 클릭 하여 HTML Forms 찾아요

wings2pc.tistory.com

위 글에서 action=부분과 method=부분을 수정해서 html 파일을 브라우저로 열어서(html 파일 더블클릭해서 브라우저 선택) 확인 해보면 됩니다. 아래와 같이 수정을 해서 테스트 해보시길 바랍니다.

<form action="http://127.0.0.1:5000/method" method="POST">

 

혹시나 html 소스 첨부합니다.

더보기
<!DOCTYPE html>
<html>
<body>

<h2>KIT 웹앱 프로그래밍</h2>

<form action="http://127.0.0.1:5000/method" method="POST">
  <label for="fname">학번:</label><br>
  <input type="text" id="fname" name="num" value=""><br>
  <label for="lname">이름:</label><br>
  <input type="text" id="lname" name="name" value=""><br><br>
  <input type="submit" value="확인">
</form> 

</body>
</html>

 

다음 시간에는 이제 저 html 파일을 flask에 포함을 시켜 실행해 볼게요~

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함