Flask 是一个轻量级的 Python Web 框架,比起Node.js,ASP .net Core等Web 框架,它更适合初学者学习。它的设计哲学是简洁和灵活,旨在让开发者专注于功能实现,而不是配置和过多的框架限制。下面,我将以由浅入深的方式,一起来一步步理解和掌握 Flask,帮助初学者打下一个比较扎实的 Web 开发基础。
1. 什么是 Flask?
Flask 是一个用于构建 Web 应用程序的框架,它提供了很多常用的工具和库,帮助你快速搭建一个 Web 服务。Flask 很小,功能也很基础,但正因为这样,你可以自由地选择自己需要的功能,而不需要为不需要的东西而困扰。
2. 为什么选择 Flask?
- 简单易学:Flask 的学习曲线较平缓,适合初学者入门 Web 开发。
- 灵活性:它不像其他一些大型框架那样“捆绑”太多东西。你可以自由选择你想要的工具。
- 快速上手:你只需要几行代码就能搭建起一个简单的 Web 应用。
- 实际价值:虽然简单,但是在企业内部实现一些必要的应用,还是绰绰有余的!
3. 安装 Flask
首先,你需要安装 Flask。在命令行中运行以下命令:
pip install flask
4. 创建你的第一个 Flask 应用
现在我们来创建一个最简单的 Flask 应用。打开一个文本编辑器,创建一个名为 app.py
的文件,然后输入以下内容:
from flask import Flask
# 创建一个 Flask 实例
app = Flask(__name__)
# 定义一个路由和视图函数
@app.route('/')
def hello_world():
return 'Hello, World!'
# 运行应用
if __name__ == '__main__':
app.run(debug=True)
这里说的路由,就是根据用户的访问路径调用不同处理接口进行处理并回复响应内容。
/ 就是根目录,比如 http://www.baidu.com/ 就是对根目录的访问,路由是 / 。
当webServer 接收到 / 的根目录进行路由,会调用指定的接口处理和响应。
响应可以是一个Function 比如读取数据库后计算 然后再返回结果,也可以是一个静态页面。
5. 解释代码
-
Flask 实例:
app = Flask(__name__)
创建了一个 Flask 应用实例。Flask 会根据传入的参数(通常是__name__
)来确定应用的根路径。 -
路由:
@app.route('/')
定义了一个路由,这个路由会将 HTTP 请求/
(即首页)与视图函数hello_world()
绑定。每当用户访问网站的首页时,Flask 会调用hello_world()
函数并返回它的返回值。 -
视图函数:
def hello_world():
这是一个视图函数,当路由被触发时,它会返回一个字符串Hello, World!
,这就是用户在浏览器中看到的内容。
实际上这里返回的是一个变量,然后通过html中的模板进行渲染。这个类似于VUE 或者React的渲染方式。 -
调试模式:
app.run(debug=True)
让 Flask 运行在调试模式下,这意味着每次代码发生变化时,Flask 会自动重新加载并显示错误信息。
6. 运行应用
保存文件后,在命令行中运行:
python app.py
然后打开浏览器,访问
http://127.0.0.1:5000/
,你应该能看到网页上显示 "Hello, World!"。
7. 路由和视图函数
Flask 中的“路由”就是 URL 地址与 Python 函数的映射。你可以定义多个路由来响应不同的 URL 请求。
例如:
@app.route('/about')
def about():
return 'This is the about page'
每当用户访问 /about
时,就会显示 This is the about page
。
它这里有一点比较好,就是当你修改源码保存后,服务器会自动重新启动,这样就避免了不停去重启你的webServer, 也避免了你去用第三方工具监控文件变化。 如下图:
8. 动态路由
Flask 允许你定义动态 URL 路由,来捕获 URL 中的变量部分。
例如:
@app.route('/hello/<name>')
def hello(name):
return f'Hello, {name}!'
当用户访问 /hello/Alice
时,会显示 "Hello, Alice!",而访问 /hello/Bob
时,会显示 "Hello, Bob!"。
这里的<name> 类似一个变量,在前端这个位置输入任何字符 ,在服务器端都会被赋值解析。 你也可以写成/hello/<age> ,在服务器端接收就是 {age}
/hello/35 这里的age 就是35
9. HTTP 请求方法
Flask 默认只处理 GET 请求。但你可以指定处理其他 HTTP 请求方法,比如 POST、PUT、DELETE 等。
@app.route('/submit', methods=['POST'])
def submit():
return 'Form submitted successfully!'
这个路由只会响应 POST 请求。你可以通过 HTML 表单提交 POST 请求,或者使用其他工具(如 Postman)进行测试。
在根目录创建一个目录 /static, 然后在static下创建一个post.html的的文件:
<h1>Submit a Form</h1>
<form action="/submit" method="POST">
<button type="submit">Submit</button>
</form>
用浏览器输入http://127.0.0.1:5000/static/post.html
提交按钮后:
我们成功地提交了一个POST请求,并且后台地路由正确返回了设定地信息
10. 模板渲染
Flask 还支持渲染 HTML 模板。通过 Flask
的 render_template()
函数,你可以轻松地返回动态生成的 HTML 页面。
首先,在根目录下创建一个 templates
文件夹,并在里面创建一个 index.html
文件:
<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask App</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
然后修改 app.py
以使用这个模板:
from flask import render_template
@app.route('/greet/<name>')
def greet(name):
return render_template('index.html', name=name)
现在,访问 /greet/Alice
会显示页面 "Hello, Alice!",页面的内容由模板动态生成。
11. 表单处理
Flask 允许你轻松地处理 HTML 表单。在接收用户输入时,你通常会使用 POST 方法发送数据。
例如修改前面那个 /static/post.html:
<form action="/submit" method="POST">
<input type="text" name="username">
<input type="submit" value="Submit">
</form>
然后在 Flask 中处理这个表单,修改app.py中之前 /submit 的POST路由方法:
from flask import request
@app.route('/submit', methods=['POST'])
def submit():
username = request.form['username']
return f'Hello, {username}!'
在浏览器中打开post.html,输入你的名字:
提交这个表单:
12. 数据库连接
Flask 支持与数据库连接,通过 SQLAlchemy 等 ORM 库,或者直接使用 SQLite。
简单的数据库操作示例:
pip install flask-sqlalchemy
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.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, nullable=False)
@app.route('/add_user/<username>')
def add_user(username):
new_user = User(username=username)
db.session.add(new_user)
db.session.commit()
return f'User {username} added to the database.'
13. 学习小结
Flask 是一个轻量级的框架,非常适合初学者入门 Web 开发。通过上面简单的代码,你已经学会了如何快速创建 Web 应用、定义路由、渲染模板和处理表单。随着你对 Flask 更加熟悉,你可以逐渐使用更多高级功能,如用户认证、API 开发和数据库操作。
14. 进阶学习
当你熟悉了 Flask 的基础后,你可以深入学习以下内容:
- Flask 蓝图:组织大型应用。
- Flask 认证与授权:实现用户登录与权限管理。
- Flask RESTful API:使用 Flask 创建 RESTful API。
- 部署 Flask 应用:将应用部署到云服务器或本地服务器上。
15.复习Flask 模板渲染
Flask 使用 Jinja2 模板引擎来进行 HTML 模板的渲染。Jinja2 是一个强大的模板引擎,提供了丰富的模板语言功能,使得动态内容的渲染变得简单而灵活。在 Flask 中,模板渲染主要是通过 render_template
函数来实现的。
1. Flask 中的模板渲染
Flask 的模板渲染允许你将 Python 后端逻辑和 HTML 前端界面分开,从而实现视图的动态生成。你可以在模板中插入动态内容,并与视图函数进行交互。
2. 模板渲染的基本流程
-
创建模板文件: 模板文件通常存放在名为
templates
的目录中。文件扩展名通常为.html
,并且可以包含 Jinja2 的模板语言。 -
使用
render_template
渲染模板: 在 Flask 中,render_template()
函数用于渲染模板。它会自动查找模板目录中的 HTML 文件,并将从视图函数传递的数据渲染到该模板中。
关于 Flask的模板渲染,我们下次再聊吧!