
from flask import Flask
app = Flask(__name__)
# http://127.0.0.1:5000/hello 로 접속하면 hello() 함수가 실행됨.
@app.route("/hello")
def hello():
return "Hello Flask!"
# 기본 경로에 대한 라우트(127.0.0.1:5000/)
@app.route('/')
def home():
return 'Hello, this is the home page!'
# 다른 경로에 대한 라우트(127.0.0.1:5000/about)
@app.route('/about')
def about():
return 'This is the about page.'
# 127.0.0.1:5000/project
@app.route('/project')
def project():
return 'The project page'
# 동적인 URL 파라미터 사용
@app.route('/user/<username>')
def show_user_profile(username):
return f'User: {username}'
# URL에 변수 및 타입 지정
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post ID: {post_id}'
# API END POINT 생성
# CRUD: Create(POST), Read(GET), Update(UPDATE), Delete(DELETE) -> REST API
# GET: 데이터를 요청할 때
# POST: CREATE. 데이터를 생성할 때
from flask import jsonify # import Flask 대신 jsonify
@app.route("/api/v1/feeds", methods=['GET'])
def get_all_feeds():
# DB에서 불러온다.
data = {
'status': 'success',
'feed': {
"feed1": "data",
"feed2": "data2"
}
}
# python -> dict -> json
return jsonify(data)
# 다양한 HTTP 메소드 지원
@app.route('/submit', methods=['POST', 'GET'])
def submit():
if request.method == 'POST':
return 'POST method.'
else:
return 'GET method.'
@app.route("/")
def index():
return "Hello Flask"
@app.route("/hello/<username>")
def hello(username):
return f"안녕하세요, {username}!"
@app.route("/user/<int:user_id>")
def user_profile(user_id):
return f"User ID: {user_id}"
{{ ... }} <p>{{ variable_name }}</p>
{% ... %}1. 조건문
{% if user %}
<p>Hello, {{ user.name }}!</p>
{% else %}
<p>Hello, Guest!</p>
{% endif %}
2. 반복문
<ul>
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
1. 튜플
# app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
users = [
("user1", "홍길동"),
("user2", "김철수"),
("user3", "이영희"),
]
return render_template("index.html", users=users)
# 왼 users : 템플릿(index.html) 안에서 사용할 변수 이름
# 오 users : 파이썬 함수 index() 안에서 만든 리스트 객체
# 즉, 파이썬에서 만든 데이터를 jinja2 템플릿으로 전달
# data=users
# {% for username, name in data %}
# index.html
<ul>
{% for username, name in users %}
<li>아이디: {{ username }} / 이름: {{ name }}</li>
{% endfor %}
</ul>
--------------------------------------------------------
<ul>
{% for u in users %}
<li>아이디: {{ u[0] }} / 이름: {{ u[1] }}</li>
{% endfor %}
</ul>
2. 딕셔너리
# app.py
@app.route("/")
def index():
users = [
{"username": "user1", "name": "홍길동"},
{"username": "user2", "name": "김철수"},
{"username": "user3", "name": "이영희"},
]
return render_template("index.html", users=users)
# index.html
<ul>
{% for user in users %}
<li>아이디: {{ user.username }} / 이름: {{ user.name }}</li>
{% endfor %}
</ul>
------------------------------------------------------------------
<ul>
{% for user in users %}
<li>아이디: {{ user["username"] }} / 이름: {{ user["name"] }}</li>
{% endfor %}
</ul>
request는 클라이언트(브라우저) → 서버(Flask 앱) 로 들어오는 모든 요청 데이터를 담고 있는 객체
# URL 쿼리스트링 (GET 방식)
## 주소창에 ? 뒤에 붙는 값들 → request.args로 가져옴.
from flask import Flask, request
@app.route("/search")
def search():
keyword = request.args.get("word")
# 여러 값이 들어올 수 있음 → request.args.getlist("word")
return f"검색어: {keyword}"
# /search?word=python 검색어: python 출력
# 폼 데이터 (POST 방식)
## HTML 폼에서 method="POST" 로 보낸 값 → request.form에서 가져옴.
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
return f"로그인 성공: {username}"
return '''
<form method="post">
<input name="username" placeholder="아이디">
<input name="password" type="password" placeholder="비밀번호">
<button type="submit">로그인</button>
</form>
'''
app.run(debug=True) : 코드 바꾸면 자동으로 서버 재시작 + 에러 메시지 자세히 확인 가능.