본문 바로가기

파이썬/수업내용

[python] Flask

플라스크란?

플라스크는 파이썬으로 작성된 마이크로 웹 프레임워크입니다. 2010년에 Armin Ronacher가 오픈 소스 프로젝트로 만들었습니다. Flask는 웹 애플리케이션을 구축하는 데 필요한 핵심 기능을 제공하는 데 중점을 둔 단순하고 미니멀한 디자인으로 유명합니다. 특정 도구나 라이브러리를 강요하지 않는다는 점에서 '마이크로'라는 원칙을 따르며, 개발자가 원하는 구성 요소를 선택하고 통합할 수 있습니다.

플라스크는 마이크로 웹 프레임워크다

플라스크는 많은 사람이 ‘마이크로 웹 프레임워크’라고 부른다. 여기서 ‘마이크로’는 ‘한 개의 파이썬 파일로 작성할 수 있다’ 또는 ‘기능이 부족하다’ 와 같은 의미가 아니라 프레임워크를 간결하게 유지하고 확장할 수 있도록 만들었다는 뜻이다.

 

간결하다는 것은 대체 무슨 뜻일까?

플라스크 프레임워크의 간결함은 구체적으로 무엇인지 다음 코드를 살펴보자. 다음 코드는 완벽하게 동작하는 플라스크 웹 프로그램이다.

 - Hello newjeans찍어보기

from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def main():
    return 'hello newjeans'


if __name__ == '__main__':
    app.run(host="0.0.0.0" , port=80)

이 코드를 실행한 다음 웹 브라우저로 접속하면 화면에 ‘hello newjeans’가 출력된다. 이처럼 플라스크를 이용하면 파일 하나로 구성된 짧은 코드만으로도 완벽하게 동작하는 웹 프로그램을 만들 수 있다.

 

 

플라스크는 자유로운 프레임워크다

플라스크는 자유도가 높은 프레임워크다. 프레임워크는 대부분 규칙이 복잡하고 개발자는 그 규칙을 반드시 따라야 한다. 규칙을 따라야하는 건 플라스크도 마찬가지다. 하지만 플라스크에는 최소한의 규칙만 있으므로 개발의 자유도는 다른 프레임워크보다 높은 편이다.

 

특징

1. 가볍고 쉽게 시작할 수 있습니다
Flask는 가볍고 코드베이스가 작도록 설계되었습니다. 간단하고 직관적인 API를 갖추고 있어 개발자가 웹 애플리케이션 구축을 빠르게 시작할 수 있습니다. 

2. 라우팅 및 URL 매핑
Flask는 URL을 Python 코드의 함수나 메서드에 매핑할 수 있는 라우팅 메커니즘을 제공합니다. 이를 통해 다양한 URL과 HTTP 메서드(예: GET, POST)를 처리하고 요청에 따라 적절한 코드를 실행하는 데 도움이 됩니다. 

3. 템플릿 엔진
플라스크는 진자2와 같은 템플릿 엔진 사용을 지원하여 프레젠테이션 로직과 애플리케이션 로직을 분리합니다. 템플릿 엔진은 HTML 템플릿 내에 Python 코드를 삽입할 수 있게 함으로써 HTML 페이지를 동적으로 생성할 수 있게 해줍니다. 

4. HTTP 요청 및 응답 처리
플라스크는 HTTP 요청 및 응답 처리를 간소화합니다. 요청 데이터에 쉽게 액세스하고, 양식 제출, 파일 업로드, 쿠키 처리를 지원하며, 다양한 상태 코드, 헤더, 콘텐츠 유형이 포함된 HTTP 응답을 생성할 수 있습니다. 

5. 확장성
플라스크는 개발자가 확장을 통해 기능을 추가할 수 있는 모듈식 설계를 갖추고 있습니다. 데이터베이스 통합, 사용자 인증, 캐싱, API 개발 도구 등과 같은 추가 기능을 제공하는 풍부한 Flask 확장 프로그램 에코시스템이 있습니다. 

6. 테스트 지원
Flask는 웹 애플리케이션 테스트를 위한 기본 지원을 제공합니다. 여기에는 HTTP 요청을 시뮬레이션하고 응답을 검사할 수 있는 테스트 클라이언트가 포함되어 있어 애플리케이션에 대한 테스트 케이스를 더 쉽게 작성할 수 있습니다. 

7. 개발 서버 및 디버깅
Flask에는 개발 서버가 내장되어 있어 개발 단계에서 애플리케이션을 실행하고 테스트할 수 있습니다. 또한 코드의 오류를 식별하고 수정하는 데 도움이 되는 편리한 디버거를 제공합니다. 

 

 

플라스크는 단순성, 유연성, 방대한 문서로 인해 개발자들 사이에서 Python을 사용해 웹 애플리케이션과 API를 구축하는 데 널리 사용되고 있습니다. 개발자가 필요에 따라 애플리케이션을 사용자 정의하고 확장할 수 있는 동시에 탄탄한 기반을 제공합니다.

 

 

Parameter 넘기고 받기 

GET 방식 

from flask import Flask
from flask.globals import request
 
app = Flask(__name__)
 
@app.route('/')
def main():
    return 'hello newjeans'

@app.route('/param')
def param():
    menu = request.args.get('menu', default = '탕수육')
    return 'PARAM:'+menu

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=80)

 

 

POST 방식 

from flask import Flask
from flask.globals import request
 
app = Flask(__name__)
 
@app.route('/')
def main():
    return 'hello newjeans'

@app.route('/post',methods=['POST'])
def post():
    #menu =request.form["menu"]
    menu =request.form.get("menu", default = "짬뽕")
    return 'post'+menu

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=80)

 

 

 

forward 방식 

from flask.app import Flask
from flask.globals import request
from flask.templating import render_template

app = Flask(__name__)
 
@app.route('/')
def main():
    return 'hello newjeans'


@app.route('/forw')
def forw():
    a = "홍길동"
    b = ["전우치","유관순"]
    c = [
           {'e_id':1,'e_name':'1','gen':'1','addr':'1'},
           {'e_id':2,'e_name':'2','gen':'2','addr':'2'},
           {'e_id':3,'e_name':'3','gen':'3','addr':'3'} 
        ]
    return render_template('forw.html', a = a, b = b, c = c)

if __name__ == '__main__':
    app.run(host="0.0.0.0",debug=True, port=80)

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
FORW HTML 화면<br>
{{a}}<br>
{{b}}<br>
{% for i in b %}
{{ i }}<br/>
{% endfor %}


<table border="1">
	<tr>
		<td>사번</td>
		<td>이름</td>
		<td>성별</td>
		<td>주소</td>
	</tr>
{% for i in c %}
	<tr>
		<td>{{ i.e_id }}</td>
		<td>{{ i.e_name }}</td>
		<td>{{ i.gen }}</td>
		<td>{{ i.addr }}</td>
	</tr>
{% endfor %}
</table>


<br>
</body>
</html>