Flask 是一个轻量级的 Python Web 框架,适合用来构建从简单到复杂的 Web 应用。它提供了核心功能,同时灵活且易于扩展。下面将从入门到部署为您介绍如何使用 Flask 进行 Web 开发。
1. 环境准备
安装 Python 和 Flask
确保您的机器上安装了 Python(推荐版本 3.6 及以上)。然后,使用 pip 安装 Flask:
pip install Flask
创建项目文件夹
在您计算机的任意位置创建一个新的文件夹来存放您的项目文件。
mkdir flask_app
cd flask_app
2. 创建 Flask 应用
创建基本的 Flask 应用
在项目文件夹内创建一个新的 Python 文件 app.py。这个文件将包含 Web 应用的核心代码。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
代码解析:
Flask(__name__): 创建 Flask 应用对象。@app.route('/'): 定义一个路由,当用户访问根路径/时,执行hello_world函数并返回'Hello, World!'字符串。app.run(debug=True): 启动开发服务器,debug=True会自动启用调试模式,这样代码修改后会自动重新加载,且在发生错误时提供详细的错误信息。
运行应用
在终端中运行以下命令启动 Flask 开发服务器:
python app.py
您应该能在浏览器中访问 http://127.0.0.1:5000/,看到页面上显示 Hello, World!。
3. 路由与视图
定义更多路由
Flask 使用路由来处理 HTTP 请求。可以为不同的 URL 定义不同的视图函数:
@app.route('/about')
def about():
return 'About Page'
@app.route('/greet/<name>')
def greet(name):
return f'Hello, {name}!'
/about显示关于页面。/greet/<name>是一个动态路由,<name>是路由参数,用户访问时会传递该参数。
访问 http://127.0.0.1:5000/greet/John 将会返回 Hello, John!。
HTTP 方法
Flask 支持多种 HTTP 方法,如 GET、POST、PUT、DELETE 等。可以为一个路由指定接受哪些 HTTP 方法。
@app.route('/submit', methods=['POST'])
def submit():
return 'Form Submitted!'
4. 模板与静态文件
使用 Jinja2 模板
Flask 使用 Jinja2 作为模板引擎,可以动态生成 HTML 页面。首先,创建一个 templates 文件夹,在其中添加一个 HTML 文件 index.html。
<!DOCTYPE html>
<html>
<head>
<title>Flask App</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>Welcome to my Flask app!</p>
</body>
</html>
然后,在 app.py 中渲染模板:
from flask import render_template
@app.route('/')
def home():
return render_template('index.html', title='Hello, Flask!')
使用静态文件
Flask 允许将 CSS、JavaScript 和图片等静态文件放在 static 文件夹中。例如,创建一个 static/styles.css 文件,并在模板中引用:
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='styles.css') }}">
Flask 会自动处理静态文件的路径。
5. 表单与请求
处理表单数据
Flask 通过 request 对象来处理表单提交的数据。使用 POST 方法提交表单,并通过 request.form 获取表单数据。
<form method="POST">
<input type="text" name="username" placeholder="Enter your username">
<button type="submit">Submit</button>
</form>
from flask import request
@app.route('/submit', methods=['POST'])
def submit():
username = request.form['username']
return f'Hello, {username}!'
6. 数据库集成
使用 SQLite 数据库
Flask 支持与数据库交互,通常通过 SQLAlchemy ORM 进行操作。首先,安装 SQLAlchemy:
pip install Flask-SQLAlchemy
然后,配置 Flask 应用并创建数据库模型:
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), nullable=False)
with app.app_context():
db.create_all()
数据库操作
@app.route('/add_user', methods=['POST'])
def add_user():
username = request.form['username']
new_user = User(username=username)
db.session.add(new_user)
db.session.commit()
return f'User {username} added to the database.'
7. 错误处理
Flask 允许你自定义错误页面。你可以使用 @app.errorhandler 来捕捉特定的错误。
@app.errorhandler(404)
def page_not_found(e):
return 'Page not found', 404
8. 部署 Flask 应用
Flask 默认使用开发服务器,不适合生产环境。在生产环境中,常用的是 Gunicorn 或 uWSGI 与 Nginx 配合使用。
使用 Gunicorn 部署
- 安装 Gunicorn:
pip install gunicorn
- 使用 Gunicorn 运行 Flask 应用:
gunicorn app:app
使用 Nginx 配置反向代理
在生产环境中,通常会使用 Nginx 作为反向代理服务器,将 HTTP 请求转发给 Flask 应用。你需要配置 Nginx 以将请求代理到 Gunicorn。
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
9. 总结
从简单的“Hello, World!”到更复杂的数据库操作和表单处理,Flask 提供了强大的灵活性。开发过程中你可以通过模板、路由、表单、数据库等组件构建功能丰富的 Web 应用。在部署时,使用 Gunicorn 和 Nginx 可以确保高效和可靠的生产环境。
Flask 以其简洁和可扩展性成为 Web 开发者的首选框架之一,适合用来快速原型开发和构建复杂的 Web 应用。