兩小時上手 Flask:用 Python 快速構建 Web 服務的極簡教程
Flask是Python中輕量級的開發(fā)開源庫,本文介紹Flask開發(fā)的基本框架,希望大家通過本文的學習,能快速熟悉Flask的使用。

1. Flask框架簡介與環(huán)境配置
Flask是一個輕量級的Python Web框架,基于Werkzeug WSGI工具箱和Jinja2模板引擎,被稱為"微框架"的核心在于其可擴展性設計。
環(huán)境安裝:
# 創(chuàng)建虛擬環(huán)境(推薦)
python -m venv flask-env
# 激活虛擬環(huán)境
# Windows:
flask-env\Scripts\activate
# macOS/Linux:
source flask-env/bin/activate
# 安裝Flask
pip install flask最小應用示例:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello, World!'
if __name__ == '__main__':
    app.run(debug=True)2. 路由系統(tǒng)詳解
基本路由配置:
@app.route('/user/<username>')
def show_user_profile(username):
    return f'User {username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
    return f'Post {post_id}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    return f'Subpath {subpath}'HTTP方法處理:
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_login()
    else:
        return show_login_form()3. 模板引擎(Jinja2)使用
(1) 基礎模板渲染
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)模板文件templates/hello.html:
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
  <h1>Hello {{ name }}!</h1>
{% else %}
  <h1>Hello World!</h1>
{% endif %}(2) 模板繼承示例
基礎模板templates/base.html:
<html>
<head>
  <title>{% block title %}{% endblock %}</title>
</head>
<body>
  {% block content %}{% endblock %}
</body>
</html>子模板templates/page.html:
{% extends "base.html" %}
{% block title %}Page Title{% endblock %}
{% block content %}
  <h1>This is the page content</h1>
{% endblock %}4. 請求與響應處理
訪問請求數(shù)據(jù):
from flask import request
@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    password = request.form.get('password')
    # 處理文件上傳
    uploaded_file = request.files['file']
    if uploaded_file:
        uploaded_file.save('/tmp/uploaded_file')
    return'Login processed'自定義響應:
from flask import make_response
@app.route('/custom')
def custom_response():
    response = make_response(render_template('custom.html'))
    response.headers['X-Custom-Header'] = 'Value'
    response.set_cookie('username', 'john')
    return response5. 會話與Cookies管理
會話使用示例:
from flask import session
# 必須設置secret_key
app.secret_key = 'your_secret_key_here'
@app.route('/setsession')
def set_session():
    session['username'] = 'john'
    return 'Session set'
@app.route('/getsession')
def get_session():
    return session.get('username', 'Guest')Cookies操作:
from flask import request, make_response
@app.route('/setcookie')
def set_cookie():
    resp = make_response('Cookie set')
    resp.set_cookie('username', 'john')
    return resp
@app.route('/getcookie')
def get_cookie():
    username = request.cookies.get('username')
    return f'Hello {username}' if username else 'Hello Guest'6. 文件上傳處理
文件上傳實現(xiàn)
from werkzeug.utils import secure_filename
import os
UPLOAD_FOLDER = UPLOAD_FOLDER = '/path/to/uploads'
'/path/to/uploads'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png'}
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def allowed_file(filename):
    return'.'in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/upload', methods=['POST'])
def upload_file():
    if'file'notin request.files:
        return'No file part'
    file = request.files['file']
    if file.filename == '':
        return'No selected file'
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        return'File uploaded successfully'7. 錯誤處理與調試
自定義錯誤頁面:
@app.errorhandler(404)
def page_not_found(error):
    return render_template('404.html'), 404調試模式使用:
if __name__ == '__main__':
    app.run(debug=True)
  
# 或者設置環(huán)境變量
# export FLASK_ENV=development
# flask run8. Flask擴展與中間件
常用擴展介紹:
# Flask-SQLAlchemy (數(shù)據(jù)庫ORM)
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
# Flask-WTF (表單處理)
from flask_wtf import FlaskForm
from wtforms import StringField
# Flask-Login (用戶認證)
from flask_login import LoginManager
login_manager = LoginManager(app)
# Flask-Migrate (數(shù)據(jù)庫遷移)
from flask_migrate import Migrate
migrate = Migrate(app, db)中間件示例
@app.before_request
def before_request():
    g.user = current_user if current_user.is_authenticated else None
@app.after_request
def after_request(response):
    # 可以在響應中添加統(tǒng)一的headers等
    return response
@app.teardown_request
def teardown_request(exceptinotallow=None):
    # 請求結束時執(zhí)行的清理工作
    pass9. 項目結構與藍圖(Blueprint)
項目標準目錄結構:
/project
    /app
        /static        # 靜態(tài)文件
        /templates     # 模板文件
        /views         # 視圖函數(shù)
            __init__.py
            auth.py    # 認證相關路由
            blog.py    # 博客相關路由
        __init__.py    # 應用工廠
        models.py      # 數(shù)據(jù)模型
    config.py          # 配置文件
    manage.py          # 啟動腳本藍圖使用示例:
# app/views/auth.py
from flask import Blueprint
auth_bp = Blueprint('auth', __name__)
@auth_bp.route('/login')
def login():
    return 'Login Page'
# app/__init__.py
from .views.auth import auth_bp
app.register_blueprint(auth_bp, url_prefix='/auth')10. 部署與性能優(yōu)化
生產環(huán)境部署(Gunicorn):
# 安裝Gunicorn
pip install gunicorn
# 啟動命令
gunicorn -w 4 -b 127.0.0.1:8000 your_app:app性能優(yōu)化建議:
- 啟用模板緩存: app.config['TEMPLATES_AUTO_RELOAD'] = False
 - 使用flask-compress壓縮響應
 - 靜態(tài)文件使用CDN加速
 - 數(shù)據(jù)庫連接池配置
 - 使用緩存(memcached/Redis)
 















 
 
 









 
 
 
 