2021년 11월 28일 일요일

Python Web Applications (파이썬 웹 앱 만들기, 계산기) with Flask

 

시작전

Python 스크립트를 제작했다면 그것을 실행시킬 환경이 필요합니다. 이때 실행가능한 패키지를 만들어 배포하는 방법과 web application 형태로 만들어서 배포가 가능합니다.

그럼 Web Applications 이란 무엇일까요?

여기저기 검색해보니 모든 종류의 동적 웹 페이지와 "웹 앱" 간의 일반적인 구분은 명확하지 않습니다. "웹 응용 프로그램"이라고 하는 웹 사이트는 데스크톱 소프트웨어 응용 프로그램 또는 모바일 응용 프로그램과 유사한 기능을 가진 사이트입니다. 

웹 응용 프로그램의 장점은 플랫폼에 독립적이며 인터넷에 액세스할 수 있는 모든 사람이 실행할 수 있다는 것입니다. 코드는 백엔드 서버에서 구현되며, 이 서버에서는 프로그램이 들어오는 요청을 처리하고 모든 브라우저에서 이해할 수 있는 공유 프로토콜을 통해 응답합니다.

Python은 많은 대형 웹 애플리케이션을 지원하며 백엔드 언어로 일반적으로 선택됩니다


7 Top Python Frameworks 

조금만 검색해보면 유명한 framework이 많이 있습니다.

7 Top Python Frameworks You Should Consider for Your Next Project

Full Stack Framework

CubicWeb

Django

Web2Py

Giotto

Pylons Framework

Pyramid

TurboGears

Micro-framework

Bottle

CherryPy

Dash

Falcon

Flask

Hug

MorePath

Pycnic

출처 : https://www.monocubed.com/top-python-frameworks/

여기에서는 Flask 를 통해서 간단한 예제를 만들어 보도록 하겠습니다.



Python 웹 애플리케이션에 대해 알아보기

오래전 웹 사이트에는 해당 페이지에 액세스한 모든 사용자에게 동일한 고정 콘텐츠가 있었습니다. 이러한 웹 페이지는 상호 작용할 때 콘텐츠가 변경되지 않기 때문에 정적이라고 합니다. 정적 웹 페이지를 제공할 때 웹 서버는 어떤 사용자인지 관계없이 누구나 같은 해당 페이지의 콘텐츠를 다시 전송하여 요청에 응답합니다.

오늘날 대부분의 웹 사이트는 제공하는 콘텐츠를 변경할 수 있는 동적 웹 페이지를 제공하는 진정한 웹 앱입니다.

예를 들어 GMail 페이지를 접속해보면 다양한 방법으로 사용자와 응용 프로그램간 상호 작용할 수 있습니다. 

Python 기반 웹 애플리케이션은 Python 코드를 사용하여 수행할 작업과 표시할 콘텐츠를 결정합니다. 코드는 웹사이트를 호스팅하는 웹 서버에서 실행되므로 사용자는 아무것도 설치할 필요가 없습니다. 코드와 상호 작용하는 데 필요한 것은 브라우저와 인터넷 연결뿐입니다.

웹 사이트에서 Python을 실행하는 것은 복잡할 수 있지만 세부 사항을 자동으로 처리하는 다양한 웹 프레임워크가 있습니다. 위에서 언급했듯이 여기에서는 Flask 를 이용할 것입니다.

또한 실제 서버를 사용할것은 아니고 local pc에 간단하게 호스팅을 할 예정으로 따로 서버를 준비할 필요는 없습니다.


Flash 기본

flask간단한 기본 코드는 아래와 같습니다. 

파일명 : _31_flask_webapp.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
	return "This is a web app!"

if __name__ == "__main__":
	app.run(port=8080, debug=True)

cmd line 에서 위 내용의 py 파일을 실행 시켜줘야합니다.

C:\Users\USER\Documents\GitHub\sourcecode\python\example>python _31_flask_webapp.py
 * Serving Flask app "_31_flask_webapp" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 298-679-048
 * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)

이번에는 브라우저로 접속 하면됩니다. 127.0.0.1 은 localhost와 같습니다.


간단한것 같은데 이걸로 뭘 만들 수 있을지 생각해봅시다.


Python 계산기 스크립트를 브라우저에서 실행 시키기

계산기를 웹 앱으로 만들기 전에 일단 계산기 기본 함수 코드는 아래와 같습니다.

def calc(stringdata):
	return str(eval(stringdata))

if __name__ == "__main__":
	print(calc("100+200"))

핵심은 eval 이란 내장 함수입니다. 너무 너무 간단합니다.

시험삼아 위와 같은 코드를 실행시키면 결과로 300 이 출력됩니다.


flask 기본앱에 계산기를 넣어보겠습니다.

전체 코드는 아래와 같습니다. 

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route("/")
def index():
	inputdata = request.args.get("inputdata", "")
	if inputdata:
		result = calc(inputdata)
	else:
		result = ""
	return (
		"""<form action="" method="get">
				Calc : <input type="text" name="inputdata">
				<input type="submit" value="calc">
			</form>"""
		+ "result:" + result
	)

def calc(inputdata):
	return str(eval(inputdata))

if __name__ == "__main__":
	app.run(port=8080, debug=True)

위 코드를 이해하기 위해서는 html의 기초적인 문법을 이해해야하는데 아래 코드는 입력을 받기위한 FORM을 구성하는 화면입니다.

<form action="" method="get">
Calc : <input type="text" name="inputdata">
<input type="submit" value="calc">
</form>

이때 FORM의 get메소드를 이용해서 전송한다는 뜻입니다. 그리고 입력은 text로 inputdata란 이름을 가지고 있으며, 전송 버튼을 누르면 인자를 통해서 inputdata와 내용이 전송 되는데 request.args.get("inputdata", "") 이런 형태로 서버에서는 읽을 수 있습니다. 여기서 get은 form이 get으로 되어있기 때문에 그렇습니다.

inputdata 가 있으면 이전에 만들어둔 calc함수를 호출하여 결과를 받고 아니라면 빈결과를 출력 하면 됩니다.


서버를 실행시켜줍니다.

C:\Users\USER\Documents\GitHub\sourcecode\python\example>python _31_flask_webapp.py
 * Serving Flask app "_31_flask_webapp" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 298-679-048
 * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
127.0.0.1 - - [28/Nov/2021 16:55:16] "GET / HTTP/1.1" 200 -


아래와 같이 브라우저를 이용해서 접속을 합니다.



계산을 원하는 값을 넣고 


calc 버튼을 누르면 아래와 같이 동작 됩니다.

로컬 PC를 통해서 간단하게 Flask 로 Python 스크립트 실행시키는것에 대해서 알아보았습니다.
python으로 위와 같이 구현한 코드는 UI 적인 동작 부분을 뺀코드라고 보는게 맞을 것입니다.
웹앱을 만들려고 하면 브라우저에서 동작하는 코드를 만들어야 하니 당연히 HTML에 대해서 잘 알아야 합니다.

댓글 없음:

댓글 쓰기