파이썬에서 가상 환경은 독립된 공간에서 프로젝트의 의존성을 관리하는 데 유용하다.
가상 환경은 시스템-wide 설치와 달리 특정 프로젝트에만 국한된 패키지 관리를 가능하게 한다.
python3 -m venv myenv
myenv\Scripts\activate
, 리눅스나 macOS에서는 source myenv/bin/activate
Flask 프로젝트를 가상 환경에서 구성하면 의존성 관리가 쉽다.
pip install flask
python app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html', text="Welcome to My Website!")
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Main Page</title>
</head>
<body>
<h1>{{ text }}</h1>
</body>
</html>
동적 라우팅을 사용하면 URL의 일부를 변수로 처리할 수 있다. 이 변수는 라우트에 연결된 함수로 전달되어 처리된다.
from flask import Flask
app = Flask(__name__)
@app.route('/user/<userId>')
def show_user_profile(userId):
return f'User {userId}'
if __name__ == '__main__':
app.run()
Flask는 다양한 변환기를 제공하여 동적 라우팅을 더욱 강력하게 만든다. 예를 들어, 특정 타입의 변수만 받고 싶을 때 변환기를 사용할 수 있다.
@app.route('/post/<int:post_id>') # <int:post_id>는 post_id가 int형이어야 함을 지정한다.
def show_post(post_id):
return f'Post {post_id}'
url_for 함수를 사용하면 동적 URL을 생성할 수 있다. 이는 URL 변경 시 코드 전체를 수정하지 않고도 유연하게 대응할 수 있게 한다.
from flask import Flask, url_for, redirect
app = Flask(__name__)
@app.route('/')
def index():
# 'show_user_profile' 함수로 연결되는 URL로 리다이렉트
return redirect(url_for('show_user_profile', username='wish'))
@app.route('/user/<username>')
def show_user_profile(username):
# 사용자 이름을 화면에 출력
return f'User {username}'
if __name__ == '__main__':
app.run()
Flask에서 템플릿(template)은 HTML 코드 내에 동적 데이터를 삽입하고 렌더링하는 방법을 제공한다. 템플릿을 사용하면 코드와 HTML의 분리, 재사용 가능한 컴포넌트, 조건 및 반복문의 적용 등이 가능해진다. Flask는 Jinja2라는 강력한 템플릿 엔진을 사용한다.
기본적인 템플릿은 HTML과 유사하게 작성되지만, 중괄호({{ }})와 같은 특수 구문을 사용해 변수를 삽입하거나 제어 구조를 사용할 수 있다.
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
템플릿을 렌더링하려면 render_template
함수를 사용하고 변수를 인자로 전달한다.
from flask import render_template
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name, title='Hello Page')
Jinja2 템플릿 엔진은 for 루프, if 문 등의 제어 구조를 제공한다.
<ul>
{% for user in users %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
템플릿 상속을 사용하면 기본 레이아웃을 정의하고 여러 페이지에서 재사용할 수 있다.
<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
<!-- child.html -->
{% extends "base.html" %}
{% block title %}Child Page{% endblock %}
{% block content %}
<h1>Welcome to the Child Page</h1>
{% endblock %}
템플릿은 Flask에서 웹 페이지의 동적 내용을 관리하고 재사용 가능한 구조를 만드는데 필수적인 요소다. Jinja2 엔진은 강력한 기능을 제공하며, 개발자가 효율적으로 다양한 웹 페이지를 생성할 수 있게 한다.
본 후기는 정보통신산업진흥원(NIPA)에서 주관하는 <AI 서비스 완성! AI+웹개발 취업캠프 - 프론트엔드&백엔드> 과정 학습/프로젝트/과제 기록으로 작성 되었습니다.
#정보통신산업진흥원 #NIPA #AI교육 #프로젝트 #유데미 #IT개발캠프 #개발자부트캠프 #프론트엔드 #백엔드 #AI웹개발취업캠프 #취업캠프 #개발취업캠프