Flask : 플라스크 기본 사용법

2022. 1. 13. 15:35기타 공부들

반응형

플라스크 기본 사용법

Flask 시작하기

플라스크로 프로젝트를 할 폴더에 가상환경을 만들고, 플라스크를 설치하고 app.py에 아래 코드입력.

from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)
# app.run() 괄호 안에 debug=True라고 명시하면 해당 파일의 코드를 수정할 때마다 Flask가 변경된 것을 인식하고 다시 시작한다.

Route(URL에 웹페이지 연결하기)

웹 브라우저에서 URL을 방문하면 서버에 요청을 보내고, 서버는 그 요청을 처리해서 브라우저에 응답을 반환하게 된다. 반환된 결과를 HTML 문서로 보내주면 그 웹 페이지를 브라우저가 띄워주게 된다.

Flask에서는 URL을 방문 할 때 준비된 함수가 실행되도록 하기 위해 route()데코레이터를 사용한다.이를 라우팅이라 한다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

@app.route('/login')
def login():
    return render_template('login.html')

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

이렇게 @app.route('/경로') 를 쓸 때 URL 경로는 반드시 “/” (슬래시)로 시작해야 한다.

또, 이걸 URL을 뷰 함수에 바인딩하는 방법이라고도 한다.

동적 URL 다루는 방법

경우에 따라 변경되는 동적 URL을 사용하려면 어떻게 해야 할까?

Flask에서는 뷰 함수에 바인딩 할 URL을 지정할 때 <variable_name>을 명시하는 게 가능하다. 그러면 이 변수는 뷰 함수에 인수 형태로 전달이 된다.

다시 app.py에서 이번엔 @app.route('/user')와 user()함수를 아래와 같이 수정해보자.

from flask import Flask

app = Flask(__name__)

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

@app.route('/user/<user_name>/<int:user_id>')
def user(user_name, user_id):
    return f'Hello, {user_name}({user_id})!'

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

반환되는 값으로 f-string 포맷을 활용해서 문자열에 변수를 넣는다.

# f-string 예시
# 문자열 맨 앞에 f를 붙이고, 출력할 변수, 값을 중괄호 안에 넣습니다.
s = 'coffee'
n = 5
result1 = f'저는 {s}를 좋아합니다. 하루 {n}잔 마셔요.'
print(result1)

이렇게 하면 “/user/유저이름/유저아이디” 형식의 URL을 입력 받았을 때 유저이름과 유저아이디를 활용한 내용의 HTML 문서를 반환할 수 있다.

그리고 URL은 문자열이기 때문에 <converter : variable_name> 구문을 사용해서 URL에서 받은 변수 타입을 변형할 수 있다.

파이썬 Flask 사용법 2 (Jinja2 템플릿, 변수, 조건문/반복문)

제대로 된 웹 사이트를 만들고자 한다면모든 페이지마다 HTML 파일을 각각 작성할 게 아니라 일관된 구조와 기능을 가진 템플릿(template)을 활용해야 한다.

Flask에서는 Jinja2라는 템플릿 엔진을 사용해서 애플리케이션 내 변수와 반복문, 조건문 등을 포함하는 HTML 파일을 렌더링할 수 있다.

템플릿 렌더링해서 URL에 연결하기

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template("index.html")

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

index.html파일을 생성하고 로컬호스트 5000으로 접속하면 첫 화면이 index.html을 띄워준다. @app.route('/')에 바인딩 된 함수가 render_template("index.html")이라고 되어 있기 때문에 해당 문서를 렌더링해서 반환하는 거다.

템플릿에서 변수 사용하기

템플릿 내에서 변수를 사용하려면 render_template() 괄호 안에 렌더링 할 HTML 파일 이름에 이어 변수명을 키워드 인수를 추가해주면 된다. 둘 이상의 변수를 추가하려면 쉼표로 구분하고 html에서 이 변수를 사용할 때는 {{ 변수명 }}과 같은 식으로 불러와서 쓰면 된다.

템플릿에서 if 조건문 사용하기

{% if문 %} 괄호 안에 조건문을 써주고, {% endif %}로 마무리하면 된다.

템플릿에서 for 반복문 사용하기

{% for문 %} 괄호 안에 반목문을 써주고, {% endfor %}로 마무리하면 된다.

 

반응형