Flask Basics | Get Started with the Python Web Framework
이 글의 핵심
A practical guide to Flask basics: start building with Python’s lightweight web framework using clear examples.
Introduction
“The easiest Python web framework to pick up”
Flask is a simple, flexible micro web framework for Python.
1. Getting started with Flask
Installation
pip install flask
Hello World
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Flask!"
if __name__ == '__main__':
app.run(debug=True)
# Run
python app.py
# Open http://localhost:5000 in your browser
2. Routing
Basic routes
@app.route('/')
def index():
return "Home"
@app.route('/about')
def about():
return "About page"
@app.route('/user/<username>')
def user_profile(username):
return f"{username}'s profile"
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f"Post #{post_id}"
HTTP methods
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
return f"Login attempt: {username}"
return "Login page"
3. Templates (Jinja2)
Using templates
# app.py
from flask import render_template
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
<!-- templates/user.html -->
<!DOCTYPE html>
<html>
<head>
<title>{{ name }}'s page</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
{% if name == 'Alice' %}
<p>You are an admin.</p>
{% else %}
<p>Regular user.</p>
{% endif %}
<ul>
{% for i in range(5) %}
<li>Item {{ i }}</li>
{% endfor %}
</ul>
</body>
</html>
4. Handling forms
Reading form data
from flask import request, redirect, url_for
@app.route('/submit', methods=['GET', 'POST'])
def submit():
if request.method == 'POST':
name = request.form.get('name')
email = request.form.get('email')
# Process data
print(f"Name: {name}, Email: {email}")
return redirect(url_for('success'))
return '''
<form method="post">
<input type="text" name="name" placeholder="Name">
<input type="email" name="email" placeholder="Email">
<button type="submit">Submit</button>
</form>
'''
@app.route('/success')
def success():
return "Submitted successfully!"
5. JSON API
Building a REST API
from flask import jsonify, request
users = [
{'id': 1, 'name': 'Alice', 'age': 25},
{'id': 2, 'name': 'Bob', 'age': 30}
]
@app.route('/api/users', methods=['GET'])
def get_users():
return jsonify(users)
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
user = next((u for u in users if u['id'] == user_id), None)
if user:
return jsonify(user)
return jsonify({'error': 'User not found'}), 404
@app.route('/api/users', methods=['POST'])
def create_user():
data = request.get_json()
new_user = {
'id': len(users) + 1,
'name': data['name'],
'age': data['age']
}
users.append(new_user)
return jsonify(new_user), 201
6. Sessions and cookies
Using sessions
from flask import session
app.secret_key = 'your-secret-key'
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
session['username'] = username
return redirect(url_for('dashboard'))
@app.route('/dashboard')
def dashboard():
if 'username' in session:
return f"Welcome, {session['username']}!"
return redirect(url_for('login'))
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('index'))
Practical example
Simple blog API
from flask import Flask, jsonify, request
from datetime import datetime
app = Flask(__name__)
posts = []
@app.route('/api/posts', methods=['GET'])
def get_posts():
return jsonify(posts)
@app.route('/api/posts', methods=['POST'])
def create_post():
data = request.get_json()
post = {
'id': len(posts) + 1,
'title': data['title'],
'content': data['content'],
'created_at': datetime.now().isoformat()
}
posts.append(post)
return jsonify(post), 201
@app.route('/api/posts/<int:post_id>', methods=['GET'])
def get_post(post_id):
post = next((p for p in posts if p['id'] == post_id), None)
if post:
return jsonify(post)
return jsonify({'error': 'Not found'}), 404
if __name__ == '__main__':
app.run(debug=True)
Summary
Key takeaways
- Flask: micro web framework
- Routing:
@app.route() - Templates: Jinja2,
render_template() - API:
jsonify(),request.get_json() - Sessions:
sessiondict