Python 기초 실습 C8
Python 기초 실습 C8입니다. Flask main.py, scrapper.py, templates/home.html, templates/read.html 구조와 render_template 실행 예제를 정리했습니다.
Python 기초 실습 C8: Flask 파일 구조와 template 렌더링
실습에는 main.py, templates/home.html, templates/read.html, scrapper.py 파일명이 남아 있다. 이 구조는 Flask에서 route와 template, 데이터 수집 로직을 분리하는 연습으로 볼 수 있다. 여기서는 실행 가능한 최소 Flask 예제로 정리한다.
프로젝트 구조
python-c8/
main.py
scrapper.py
templates/
home.html
read.html가상환경과 Flask 설치
mkdir -p python-c8/templates
cd python-c8
python3 -m venv.venv
source.venv/bin/activate
pip install --upgrade pip
pip install Flaskscrapper.py
외부 사이트를 바로 긁기보다, 먼저 데이터 처리 함수가 template과 어떻게 연결되는지 확인하는 예제로 시작한다.
def get_posts():
return [
{"id": 1, "title": "Linux basic", "summary": "Command practice"},
{"id": 2, "title": "Flask template", "summary": "Render HTML with data"},
{"id": 3, "title": "Network lab", "summary": "DNS and routing test"},
]
def find_post(post_id):
for post in get_posts():
if post["id"] == post_id:
return post
return Nonemain.py
from flask import Flask, abort, render_template
from scrapper import find_post, get_posts
app = Flask(__name__)
@app.get("/")
def home():
posts = get_posts()
return render_template("home.html", posts=posts)
@app.get("/read/<int:post_id>")
def read(post_id):
post = find_post(post_id)
if post is None:
abort(404)
return render_template("read.html", post=post)
if __name__ == "__main__":
app.run(debug=True)templates/home.html
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>Python C8</title>
</head>
<body>
<h1>Post list</h1>
<ul>
{% for post in posts %}
<li>
<a href="/read/{{ post.id }}">{{ post.title }}</a>
<p>{{ post.summary }}</p>
</li>
{% endfor %}
</ul>
</body>
</html>templates/read.html
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>{{ post.title }}</title>
</head>
<body>
<article>
<h1>{{ post.title }}</h1>
<p>{{ post.summary }}</p>
</article>
<p><a href="/">Back</a></p>
</body>
</html>실행
python main.py다른 터미널에서 확인한다.
curl http://127.0.0.1:5000/
curl http://127.0.0.1:5000/read/1마무리
이 구조의 핵심은 main.py가 route를 담당하고, scrapper.py가 데이터를 만들며, templates가 화면 출력을 담당한다는 점이다. 기능이 작을 때부터 파일 역할을 나누면 이후 실제 scraping, database, form 처리로 확장하기 쉽다.