Python Web 框架之 Flask
Flask 框架简介
Flask 是一个轻量级的 Python Web 框架,被称为 “微框架”。它旨在保持核心简单且易于扩展,核心功能仅提供路由系统和请求处理等基础功能,而诸如数据库集成、表单验证等功能则通过扩展来实现。这使得 Flask 非常适合初学者入门 Web 开发,同时也适用于构建小型到中型规模的 Web 应用程序。
安装 Flask
使用 pip
进行安装,在命令行中输入:
pip install flask
若使用 Python3 且安装了多个 Python 版本,可能需使用 pip3
:
pip3 install flask
第一个 Flask 应用
创建一个简单的 Flask 应用示例代码如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
- 代码解释:
- 首先从
flask
模块导入Flask
类。 - 创建一个
Flask
类的实例app
,__name__
是 Python 中的一个特殊变量,它会根据该脚本是作为主程序运行还是作为模块导入而有所不同,这里将其传递给Flask
类用于确定应用的根路径。 - 使用
@app.route('/')
装饰器来定义一个路由。@app.route
是 Flask 中用于定义 URL 规则的装饰器,'/'
表示根路径,当用户访问应用的根路径时,会执行下面定义的函数hello_world
。 hello_world
函数返回一个字符串'Hello, World!'
,这个字符串会作为响应内容返回给客户端。if __name__ == '__main__':
这个条件判断确保只有在直接运行该脚本时,app.run()
才会被执行,启动 Flask 应用。app.run()
用于启动 Flask 内置的开发服务器,默认监听在127.0.0.1:5000
。
- 首先从
路由系统
动态路由:可以在路由中定义动态部分。例如:
from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')
def show_user_profile(username):
return f'User {username}'
if __name__ == '__main__':
app.run()
这里 <username>
是一个动态部分,当访问 /user/john
时,show_user_profile
函数会接收到 john
作为参数,并返回 User john
。
指定请求方法:默认情况下,路由只接受 GET 请求。可以通过 methods
参数指定允许的请求方法。例如:
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return '处理 POST 请求,例如登录验证'
else:
return '显示登录表单'
if __name__ == '__main__':
app.run()
在这个例子中,/login
路由既接受 GET 请求(显示登录表单),也接受 POST 请求(处理登录验证)。request
是 Flask 中用于处理请求相关信息的对象,通过 request.method
可以获取当前请求的方法。
模板引擎
Flask 内置支持使用 Jinja2 模板引擎。首先在项目目录下创建一个 templates
文件夹,用于存放模板文件。
- 创建一个模板文件
index.html
:
<!DOCTYPE html>
<html>
<head>
<title>Flask 模板示例</title>
</head>
<body>
<h1>你好,{{ name }}</h1>
</body>
</html>
- 修改 Flask 应用代码来渲染模板:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/greet/<name>')
def greet(name):
return render_template('index.html', name = name)
if __name__ == '__main__':
app.run()
这里 render_template
函数用于渲染指定的模板文件,并将变量 name
传递给模板。当访问 /greet/alice
时,模板中的 {{ name }}
会被替换为 alice
。
请求处理与响应
- 获取请求数据:如果是 POST 请求提交表单数据,可以通过
request.form
获取。例如:
from flask import Flask, request
app = Flask(__name__)
@app.route('/submit', methods=['POST'])
def submit():
username = request.form.get('username')
password = request.form.get('password')
return f'用户名: {username}, 密码: {password}'
if __name__ == '__main__':
app.run()
这里假设表单中有 username
和 password
两个字段,通过 request.form.get()
方法获取对应的值。
- 设置响应头:可以通过
Response
对象来设置响应头。例如:
from flask import Flask, Response
app = Flask(__name__)
@app.route('/custom - header')
def custom_header():
response = Response('带有自定义头部的响应')
response.headers['Custom - Header'] = '这是自定义头部内容'
return response
if __name__ == '__main__':
app.run()
在这个例子中,创建了一个 Response
对象,并设置了一个自定义的响应头 Custom - Header
。