1. Flask 安装
Flask 是一个轻量级的 Python Web 框架,安装非常简单。可以使用 pip 命令进行安装:
bash
pip install flask
安装后,可以在 Python 脚本中导入 Flask 模块,开始使用 Flask 创建 Web 应用。
2. Flask 创建应用
Flask 应用的创建相当简单,只需要实例化一个 Flask 对象。Flask 类接收一个参数,通常是 __name__,表示当前 Python 文件的模块名。应用实例可以设置一些配置,例如数据库、日志等。
python
from flask import Flask
app = Flask(__name__) # 创建 Flask 应用实例
然后通过 @app.route() 装饰器来定义 URL 路由,并将请求的 URL 路径与视图函数进行映射。例如:
python
@app.route('/')
def hello_world():
return 'Hello, World!'
这段代码的作用是,当用户访问根路径 / 时,会调用 hello_world() 函数,并返回一个简单的 "Hello, World!" 文本。
3. Flask 启动网站
启动 Flask 应用非常简单,只需要在代码最后调用 app.run() 方法:
python
if __name__ == '__main__':
app.run() # 启动服务器
app.run() 会启动 Flask 的内置开发服务器,默认在本地的 5000 端口运行。你可以通过浏览器访问 http://127.0.0.1:5000/ 来查看应用。
如果想改变默认端口或运行模式(开发模式、生产模式等),可以传递额外的参数:
python
app.run(debug=True, host='0.0.0.0', port=8080)
-
debug=True:开启调试模式,允许自动重新加载代码,并显示详细的错误信息。 -
host='0.0.0.0':允许应用在外部网络访问(默认只能在本机访问)。 -
port=8080:设置自定义端口。
4. Flask 路由
Flask 路由的核心是将 URL 路径与视图函数进行绑定,用户请求的 URL 会被映射到指定的 Python 函数,称为视图函数。
例如:
python
@app.route('/about')
def about():
return 'This is the about page'
此时,当用户访问 /about 时,Flask 会执行 about() 函数并返回 "This is the about page"。
路由的动态部分
Flask 路由还支持动态 URL 部分。你可以在 URL 路径中加入变量部分,这些变量会作为参数传递给视图函数:
python
@app.route('/user/<username>')
def show_user(username):
return f'Hello, {username}!'
在这个例子中,<username> 是一个动态部分,表示匹配任何内容,Flask 会将这个内容传递给 show_user 函数。
支持 HTTP 方法
Flask 默认支持 GET 请求,但可以通过 methods 参数支持其他 HTTP 方法,如 POST、PUT、DELETE 等。例如:
python
@app.route('/submit', methods=['POST'])
def submit_form():
return 'Form submitted'
5. Flask URI 重定向
Flask 提供了 redirect() 和 url_for() 函数来进行 URL 重定向。redirect() 用于将用户的请求重定向到另一个 URL,url_for() 用于生成某个视图函数对应的 URL。
redirect() 示例:
python
from flask import redirect, url_for
@app.route('/home')
def home():
return redirect(url_for('about')) # 重定向到 about 视图
url_for() 示例:
url_for() 用于生成指定视图函数对应的 URL。例如:
python
@app.route('/user/<username>')
def user_profile(username):
return f'User profile for {username}'
# 使用 url_for 生成 URL
url = url_for('user_profile', username='john')
# 生成的 URL: /user/john
6. Flask 模板
Flask 使用 Jinja2 模板引擎来渲染 HTML 页面。模板文件存储在 templates 目录下,可以在模板中使用变量、条件语句和循环等功能来动态生成内容。
创建模板
例如,创建一个 index.html 模板:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
渲染模板
在视图函数中使用 render_template() 渲染模板,并传递变量到模板中:
python
from flask import render_template
@app.route('/')
def home():
return render_template('index.html', name='John')
此时,Flask 会将 name='John' 传递给模板,渲染后的 HTML 会显示 "Hello, John!"。
7. Flask-Request
Flask 提供了 request 对象,用于访问 HTTP 请求的各种信息。常用的 request 属性有:
-
request.method:请求方法(GET、POST等)。 -
request.args:获取 URL 中的查询参数(GET 请求)。 -
request.form:获取提交的表单数据(POST 请求)。 -
request.files:获取上传的文件。 -
request.json:获取 JSON 格式的请求数据。
获取表单数据:
python
@app.route('/submit', methods=['POST'])
def submit():
username = request.form['username'] # 获取表单中的用户名字段
return f'Hello, {username}!'
获取查询参数:
python
@app.route('/search')
def search():
query = request.args.get('q') # 获取 URL 查询字符串中的 q 参数
return f'Searching for {query}'
8. Flask 蓝图(Blueprint)
Flask 蓝图是组织应用代码的一个重要特性,蓝图可以让你将应用的不同部分进行模块化,方便开发和管理。一个蓝图可以定义路由、视图函数等,并在主应用中注册。
创建蓝图:
python
from flask import Blueprint
# 创建蓝图
user_bp = Blueprint('user', __name__)
@user_bp.route('/profile')
def profile():
return 'User profile page'
注册蓝图:
在主应用中注册蓝图,并定义 URL 前缀:
python
app.register_blueprint(user_bp, url_prefix='/user')
此时,访问 /user/profile 会调用 user_bp 中定义的 profile 视图函数。
蓝图的使用可以有效地将应用分成多个模块,特别适合于较大的 Web 应用。