티스토리 뷰
지난 글에서 파이썬 플라스크로 설치 하고 웹브라우저에 hello world 접속 까지 했었습니다.
2020/04/24 - [KIT] - [웹 앱프로그래밍] 파이썬 플라스크(Python Flask) 설치 및 웹 애플리케이션(Web Application) 시작
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 기본 - 기초 웹 개발 하기
위 글에서 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에 포함을 시켜 실행해 볼게요~
'Python' 카테고리의 다른 글
[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) Request get parameter(HTTP method GET, POST) (2) | 2020.05.02 |
---|---|
[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) 디렉토리(폴더) 구성 (1) | 2020.05.02 |
[웹 앱프로그래밍] Flask 실행시 UnicodeDecodeError (0) | 2020.04.28 |
[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) 설치 및 웹 애플리케이션(Web Application) 시작 (0) | 2020.04.24 |
[웹 앱프로그래밍] 독립된 파이썬(python) 가상환경(venv) (0) | 2020.04.24 |
- Total
- Today
- Yesterday
- DB
- Visual Studio
- 클라우드
- GCP
- 도커
- 오라클
- Java
- github
- flask
- pythonanywhere
- 자바
- docker
- GIT
- 플라스크
- 웹앱프로그래밍
- 웹앱
- Cloud
- Hello World
- 부트스트랩
- python
- mysql
- 리눅스
- javascript
- WEB
- oracle
- 자바스크립트
- nginx
- HTML
- 웹앱 프로그래밍
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |