營(yíng)銷型企業(yè)網(wǎng)站的功能網(wǎng)絡(luò)廣告營(yíng)銷方案策劃內(nèi)容
1. Flask 是什么?
Flask 是一個(gè) 微框架(Microframework),特點(diǎn)包括:
- 輕量靈活:核心僅包含路由和模板引擎,其他功能通過擴(kuò)展實(shí)現(xiàn)
- 易于學(xué)習(xí):代碼直觀,適合快速開發(fā)小型應(yīng)用和 API
- 高度可定制:不強(qiáng)制項(xiàng)目結(jié)構(gòu),可自由選擇組件
2. 核心組件
(1) 最小應(yīng)用示例
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello World!"if __name__ == '__main__':app.run(debug=True)
- 路由:
@app.route()
?裝飾器定義 URL - 開發(fā)服務(wù)器:
app.run()
?啟動(dòng)調(diào)試模式
(2) 路由與變量規(guī)則
@app.route('/user/<username>')
def show_user(username):return f'User: {username}'@app.route('/post/<int:post_id>')
def show_post(post_id):return f'Post ID: {post_id}'
- 轉(zhuǎn)換器:
<int:var>
、<float:var>
、<path:var>
(3) 請(qǐng)求與響應(yīng)
from flask import request, jsonify@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':return jsonify({'status': 'success'})else:return render_template('login.html')
- 請(qǐng)求對(duì)象:
request.args
?(GET)、request.form
?(POST) - 響應(yīng)對(duì)象:
jsonify()
?返回 JSON
(4) 模板渲染 (Jinja2)
from flask import render_template@app.route('/hello/<name>')
def hello(name):return render_template('hello.html', name=name)
<!-- templates/hello.html -->
<h1>Hello {{ name }}!</h1>
- 自動(dòng)轉(zhuǎn)義:防 XSS 攻擊
- 繼承機(jī)制:
{% extends "base.html" %}
{% block content %}...{% endblock %}
3. 關(guān)鍵擴(kuò)展
擴(kuò)展名 | 用途 | 安裝命令 |
---|---|---|
Flask-SQLAlchemy | ORM 支持 | pip install flask-sqlalchemy |
Flask-WTF | 表單處理 | pip install flask-wtf |
Flask-Login | 用戶認(rèn)證 | pip install flask-login |
Flask-RESTful | 構(gòu)建 REST API | pip install flask-restful |
數(shù)據(jù)庫(kù)示例 (SQLAlchemy)
from flask_sqlalchemy import SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True)@app.route('/add_user')
def add_user():user = User(username='admin')db.session.add(user)db.session.commit()return "User added!"
4. 項(xiàng)目結(jié)構(gòu)(推薦)
myflaskapp/
├── app/
│ ├── templates/ # HTML 模板
│ ├── static/ # CSS/JS/圖片
│ ├── __init__.py # 工廠模式初始化
│ ├── models.py # 數(shù)據(jù)模型
│ ├── routes.py # 視圖路由
│ └── forms.py # 表單定義
├── config.py # 配置文件
└── requirements.txt # 依賴列表
5. Flask vs Django
特性 | Flask | Django |
---|---|---|
定位 | 微框架(靈活輕量) | 全??蚣?#xff08;功能齊全) |
學(xué)習(xí)曲線 | 簡(jiǎn)單 | 較陡峭 |
ORM | 需擴(kuò)展(SQLAlchemy) | 自帶(Django ORM) |
Admin 后臺(tái) | 需擴(kuò)展(Flask-Admin) | 自帶 |
適用場(chǎng)景 | API/微服務(wù)/快速原型 | 企業(yè)級(jí)應(yīng)用/內(nèi)容管理系統(tǒng) |
項(xiàng)目結(jié)構(gòu) | 自由定義 | 強(qiáng)制約定 |
6. 快速啟動(dòng)
# 安裝
pip install flask# 最小應(yīng)用 (app.py)
from flask import Flask
app = Flask(__name__)@app.route('/')
def home():return "Hello Flask!"if __name__ == '__main__':app.run(debug=True)# 運(yùn)行
python app.py
訪問 http://localhost:5000
7. 最佳實(shí)踐
- 工廠模式:延遲創(chuàng)建應(yīng)用實(shí)例
# app/__init__.py
def create_app(config):app = Flask(__name__)app.config.from_object(config)return app
藍(lán)圖(Blueprint):模塊化路由
from flask import Blueprint
auth = Blueprint('auth', __name__)@auth.route('/login')
def login(): ...
環(huán)境配置:
# config.py
class Config:SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard-to-guess'SQLALCHEMY_TRACK_MODIFICATIONS = False
- 生產(chǎn)部署:
- WSGI 服務(wù)器:Gunicorn + Nginx
- 靜態(tài)文件:
flask collectstatic
8. 常見擴(kuò)展推薦
- 數(shù)據(jù)庫(kù):Flask-SQLAlchemy, Flask-Migrate
- 表單:Flask-WTF
- 認(rèn)證:Flask-Login, Flask-JWT
- API:Flask-RESTful, Flask-APIs
- 后臺(tái):Flask-Admin
- 測(cè)試:pytest-flask
Flask 的哲學(xué)是 "微核+擴(kuò)展",適合希望從底層構(gòu)建應(yīng)用的開發(fā)者。建議從官方快速入門(https://flask.palletsprojects.com/)開始實(shí)踐!