본문 바로가기
Django, Flask

Flask 웹프레임워크 사용방법 정리 # python Routing

by Developer88 2022. 4. 23.
반응형

오늘은 파이썬의 경량 웹프레임워크인 플래스크(Flask)에 대해서 정리해 보도록 하겠습니다.

 

1. flask 설치

프로젝트 디렉토리에서 pip모듈을 이용해서 flask를 먼저 설치해 주어야 하는데요.

아래 명령어를 사용해주면 됩니다.

 

python -m pip install Flask

 

2. Hello World

경량 웹프레임워크이므로 빠르게 코드를 작성해서, Hello World를 뛰어 보겠습니다.

아래와 같이 해주면 되는데요.

host는 test용이므로, 'localhost'로 지정해주구요.

port는 원하는 port를 할 수 있는데, 지정하지 않으면, 5000포트로 열립니다.

다만, macOS에서는 5000포트가 이미 사용되는 것으로 알고 있어서 여기서는 3000포트를 사용하였습니다.

 

 

정상적으로 잘 동작하는 것을 볼 수 있습니다.

 

너무나 쉽게 route를 생성해서 접근한 것을 볼 수 있습니다.

 

3. Routing

3-1. routing

웹프레임워크에서 중요한 요소는 여러가지가 있지만,

역시나 Routing만큼 중요한 것도 없지요.

flask에서의 routing은 매우 간단합니다.

decorator(@) 것을  붙여주면,

해당 url로 접근할 경우,

decorator아래에 있는 함수를 실행시켜 줍니다.

'/hello' url로는 아래와 같이 hello()함수를 실행시켜 주겠지요.

 

 

 

3-2. url 변수

url에 다이나믹하게 변수를 받아올 수 있습니다.

'<>'로 감싸서 받고자 하는 변수를 받아와 사용할 수 있습니다.

 

 

아래와 같이 url로 받아온 변수를 받아서 보여주고 있습니다.

 

공식문서에 따르면, 이외에도 아래와 같이, int나 float등을 사용할 수도 있습니다.

 

 

3-3. http methods

실제 프로덕션 레벨에서는 get메소드 뿐만이 아니라, post메소드도 사용하게 될 텐데요.

아래와 같이 쉽게 구현할 수 있습니다.

keyword arguments로 아래와 같이  method를 사용해줄 수 있습니다.

 

3-4. Static files

CSS나 JS파일같은 static한 파일들은 아래와 같이 호출할 수 있습니다.

 

url_for('static', filename='style.css')

 

대신 파일경로는 아래와 같아야 합니다.

  •  static/style.css

 

3-5. HTML 템플릿 렌더링

이제 HTML템플릿은 어떻게 렌더링하는지 보도록 하겠습니다.

실행파일이 application.py이고,

html은 templates라는 폴더아래에 hello.html이라는 파일로 들어가 있다고 가정해 보겠습니다.

 

 

Flask는 jinja2라는 템플릿엔진을 사용하고 있는데요.

실행파일이 있는 폴더의 'templates'폴더아래에 있는 html들을 조회해서 사용합니다.

 

 

render_template을 import해주는 것이 먼저 필요하구요.

한가지 더 주의할 점은, python3를 실행시키는 곳의 위치입니다.

만약, VisualStudio Code를 이용해서 실행시키는데,

프로젝트폴더가 아닌곳에서 실행시키면, 아래의 home.html파일을 렌더러가 못찾고 에러를 발생시킬 수 있습니다.

(NodeJS에서 Express사용할 때는 이런일이 없도록 상대경로로 작성해 두었는데,

flask에도 이런 방법이 있겠지만, 여기서는 그냥 넘어가겠습니다.)

 

 

 

3-6.  QueryString 가져오기

만약 다음과 같은 url을 받았다면, 어떻게 keyword = '테스트'라는 queryString을 어떻게 가져올 수 있을까요?

이것을 위해서는 request 객체를 사용해주어야 합니다.

 

http://localhost:3000/result?keyword=테스트

 

request객체는 먼저 flask module에서 포함시켜 주어야 합니다.

 

from flask import request

 

공식문서에서는 아래와 같이 접근할 수 있다고 하고 있네요.

 

 

실제 코드를 보는 것이 이해가 빠르겠지요.

 

 

실행해보면, 아래와 같이 잘 받아온 것을 확인할 수 있습니다.

 

 

 

html로 렌더링하려면, 아래와 같이 넘겨주면 되겠지요.

 

 

이제 html에서 아래와 같이 불러서 쓸 수 있겠습니다.

 

 

3-7. Redirects

유저가 아무것도 입력하지 않았을 경우, redirect를 해 줄수도 있는데요.

redirect를 할 때는 redirect를 아래와 같이 import 시켜주어야 합니다.

 

from flask import redirect

 

import 한 다음 redirect()함수를 사용해서 쉽게 구현할 수 있습니다

 

 

위 코드에서는 url_for()라는 url build 함수를 사용하였는데요.

아래줄에 해놓은 것처럼 하드코딩하는 것보다는 이런 build 함수를 사용하는 것이 좋기는 하겠지요.

 

공식문서에 따르면 url_for()함수의 인자로 아래와 같이, routing함수의 이름을 넣어주면 됩니다.

 

 

3-8. Errors

error code와 함께 request 를 중지시키려면, 아래와 같이 할 수 있습니다.

 

from flask import abort

@app.route('/login')
def login():
    abort(401)
    this_is_never_executed()

 

 

error페이지를 보여주고자 한다면, 아래와 같이 errorhandler를 사용해주면 됩니다.

 

from flask import render_template

@app.errorhandler(404)
def page_not_found(error):
    return render_template('page_not_found.html'), 404

 

3-9. send_file

파일을 다운로드 할수 있도록 방법은 매우 간단합니다.

아래와 같이 send_file 을 import해 주어야 하구요

 

from flask import send_file

 

라우터에서 아래와 같이 return 해주면 파일을 다운로드 할 수 있게 됩니다.

너무나 간단합니다.

 

return send_file(filename)

 

4. 팁 및 주의할 점

4-1. already in use 에러 대응

만약, 작업중에 서버를 멈추지 않고, 재실행 하였다면, 아래와 같이 already in use를 보게 됩니다.

 

 

 

이럴 경우 아래의 명령어를 통해서 실행중인 포트를 확인합니다.

3000포트라면, 'lsof -i:3000' 이 되겠지요.

 

lsof -i:<포트번호>

 

실행중인 port에서 PID번호를 확인한 다음, 

 

 

아래 명령어로 해당 PID의 프로세스를 Kill할 수 있습니다.

root권한이 필요한 경우, sudo 를 앞에 붙여야 할 경우도 있습니다.

 

kill <PID번호>

 

 이상으로 Flask 웹프레임워크 사용방법에 대해서 정리해 보았습니다.

 

728x90

댓글