本文目录导读:
我来详细讲解Flask框架的搭建过程。
环境准备
安装Python
确保已安装Python 3.6+,检查版本:
python --version
创建虚拟环境(推荐)
# 创建虚拟环境 python -m venv venv # 激活虚拟环境 # Windows venv\Scripts\activate # macOS/Linux source venv/bin/activate
安装Flask
pip install flask
创建基础Flask应用
最简单的Flask应用
# app.py
from flask import Flask
# 创建Flask应用实例
app = Flask(__name__)
# 定义路由和视图函数
@app.route('/')
def hello_world():
return 'Hello, Flask!'
# 启动应用
if __name__ == '__main__':
app.run(debug=True)
运行应用
python app.py
访问 http://127.0.0.1:5000
完整项目结构
推荐的项目目录结构:
my_flask_app/
├── app.py # 应用入口
├── requirements.txt # 依赖文件
├── venv/ # 虚拟环境
├── static/ # 静态文件
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── main.js
│ └── images/
├── templates/ # HTML模板
│ ├── base.html
│ ├── index.html
│ └── about.html
└── config.py # 配置文件
进阶功能实现
配置文件
# config.py
import os
class Config:
SECRET_KEY = 'your-secret-key'
SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
路由和请求处理
# app.py 进阶版
from flask import Flask, render_template, request, redirect, url_for, jsonify
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
# 基本路由
@app.route('/')
def index():
return render_template('index.html', title='首页')
# 动态路由
@app.route('/user/<username>')
def user_profile(username):
return f'用户: {username}'
# HTTP方法
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 处理登录逻辑
return redirect(url_for('index'))
return render_template('login.html')
# JSON API
@app.route('/api/data')
def get_data():
data = {'key': 'value', 'number': 42}
return jsonify(data)
# 错误处理
@app.errorhandler(404)
def not_found(error):
return render_template('404.html'), 404
HTML模板(使用Jinja2)
基础模板
<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<nav>
<a href="/">首页</a>
<a href="/about">lt;/a>
</nav>
{% block content %}
{% endblock %}
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
</body>
</html>
继承模板
<!-- templates/index.html -->
{% extends "base.html" %}
{% block title %}首页{% endblock %}
{% block content %}
<h1>欢迎来到Flask应用</h1>
<p>这是一个示例页面</p>
{% endblock %}
数据库集成(Flask-SQLAlchemy)
安装数据库扩展
pip install flask-sqlalchemy
数据库模型
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return f'<User {self.username}>'
数据库操作
# 初始化数据库
with app.app_context():
db.create_all()
# 添加数据
user = User(username='admin', email='admin@example.com')
db.session.add(user)
db.session.commit()
# 查询数据
users = User.query.all()
user = User.query.filter_by(username='admin').first()
完整的app.py示例
from flask import Flask, render_template, request, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
# 用户模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
@app.route('/')
def index():
users = User.query.all()
return render_template('index.html', users=users)
@app.route('/add_user', methods=['GET', 'POST'])
def add_user():
if request.method == 'POST':
username = request.form['username']
email = request.form['email']
new_user = User(username=username, email=email)
db.session.add(new_user)
db.session.commit()
flash('用户添加成功!', 'success')
return redirect(url_for('index'))
return render_template('add_user.html')
if __name__ == '__main__':
with app.app_context():
db.create_all()
app.run(debug=True)
部署准备
requirements.txt
Flask==2.3.0 Flask-SQLAlchemy==3.0.0 gunicorn==20.1.0 # 生产环境使用
生成依赖文件
pip freeze > requirements.txt
安装依赖
pip install -r requirements.txt
运行和测试
开发模式
python app.py
生产模式(使用Gunicorn)
gunicorn -w 4 -b 0.0.0.0:8000 app:app
实用技巧
- 调试模式:开发时设置
debug=True,会自动重载 - 环境变量:敏感信息使用环境变量存储
- ORM使用:尽量使用SQLAlchemy而不是直接SQL
- 蓝图:大型项目使用蓝图模块化
- 缓存:使用Flask-Caching提高性能
这样你就完成了基本的Flask框架搭建!根据你的项目需求,还可以添加表单验证、用户认证、RESTful API等功能。
标签: Flask框架 Python Web