Flask Framework Core Concepts and Implementation
Documentation Resources
- Chinese Documentation: http://docs.jinkan.org/docs/flask/
- English Documentation: http://flask.pocoo.org/docs/0.11/
Requirements File Management
In a virtual environment, generate dependencise with version numbers:
pip freeze > requirements.txt
Example requirements.txt content:
Flask==0.10.1
Jinja2==2.9.6
Werkzeug==0.12.2
SQLAlchemy==1.1.10
Flask-SQLAlchemy==2.2
Flask-Migrate==2.0.4
Flask-Login==0.4.0
Flask-WTF==0.14.2
click==6.7
itsdangerous==0.24
To recreate the exact environment:
pip install -r requirements.txt
Basic Flask Application Structure
from flask import Flask
application = Flask(__name__)
@application.route("/")
def home():
return "Welcome"
if __name__ == '__main__':
print(application.url_map)
application.run()
Route Configuration Methods
HTTP Method Restrictions
from flask import Flask
app = Flask(__name__)
@app.route("/", methods=["POST"])
def process_data():
return "Processing POST request"
Route Parameter Handling
@app.route("/user/<user_id>")
def user_profile(user_id):
return f"User ID: {user_id}"
@app.route("/number/<int:num_id>")
def number_handler(num_id):
return f"Number ID: {num_id}"
Response Types
Redirects
from flask import Flask, redirect
app = Flask(__name__)
@app.route('/')
def redirect_example():
return redirect('http://example.com')
JSON Responses
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def json_response():
data = {"status": "success", "message": "Hello"}
return jsonify(data)
Custom Route Converters
from flask import Flask
from werkzeug.routing import BaseConverter
class CustomConverter(BaseConverter):
def __init__(self, map, *args):
super().__init__(map)
self.regex = args[0]
app = Flask(__name__)
app.url_map.converters["custom"] = CustomConverter
@app.route('/pattern/<custom("[0-9]{3}"):pattern_id>')
def pattern_matcher(pattern_id):
return f"Matched pattern: {pattern_id}"
Status Code Handling
from flask import Flask, abort
app = Flask(__name__)
@app.route('/custom-status')
def custom_status():
return 'Custom status', 201
@app.route('/not-found')
def not_found():
abort(404)
@app.errorhandler(404)
def handle_404(error):
return "Resource not found", 404
Request Hooks
from flask import Flask
app = Flask(__name__)
@app.before_first_request
def initialize():
print("Initial setup before first request")
@app.before_request
def pre_request():
print("Executing before each request")
@app.after_request
def post_request(response):
print("Executing after successful request")
return response
@app.teardown_request
def cleanup(error):
print("Cleanup after request completion")
State Management
Cookies
from flask import Flask, make_response, request
app = Flask(__name__)
@app.route('/set-cookie')
def set_cookie():
response = make_response('Cookie set')
response.set_cookie("session_token", "abc123")
return response
@app.route('/get-cookie')
def get_cookie():
token = request.cookies.get("session_token")
return token
Sessions
from flask import Flask, session, redirect, url_for
app = Flask(__name__)
app.secret_key = "secure_key"
@app.route('/login')
def login():
session['user_id'] = 'user123'
return redirect(url_for('profile'))
@app.route('/profile')
def profile():
return session.get('user_id', 'No user logged in')
Context Objects
Application Context
from flask import Flask, current_app, g
app = Flask(__name__)
@app.route('/')
def app_info():
return f"App name: {current_app.name}"
Global Context Variable
def auth_required(func):
def wrapper(*args, **kwargs):
g.user_id = "authenticated_user"
return func(*args, **kwargs)
return wrapper
@app.route('/')
@auth_required
def protected_route():
user_id = g.user_id
return f"User: {user_id}"