目录
1. Flask介绍
2. Flask第一个应用程序
3. Flask运行方式
4. Flask中DEBUG模式
5. Flask环境参数的加载
6. Flask路径参数的使用
7. Flask路径参数类型
8. Flask路径参数类型转换底层
9. Flask自定义路由转换器
自定义步骤:
10. 自定义转换 to_python 函数
11. Postman的使用
功能:
使用示例:
12. 查询参数的使用
13. 请求体参数的使用
14. 上传文件的使用
15. request其它参数的使用
16. url_for函数的使用
17. 使用url_for的原因
18. 响应_重定向的使用
19. 响应_响应内容
20. 响应_自定义响应对象
Flask -- 轻量级的 Python Web 框架
特点:
核心工具:
创建一个简单的 Flask 应用程序:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run()
运行后访问 http://127.0.0.1:5000/ 将显示 "Hello, Flask!"。
这里设置的端口是本地的
app.run(host="0.0.0.0", port=8080)
$ export FLASK_APP=app.py
$ flask run
作用:
开启方式:
app.run(debug=True)
2.修改配置参数:
app.config['DEBUG'] = True
app.run()
加载方法:
app.config['DEBUG'] = True
2.从文件加载:
app.config.from_pyfile('config.py')
3.使用对象配置:
class Config:
DEBUG = True
app.config.from_object(Config)
4.从环境变量加载:
app.config.from_envvar('APP_CONFIG_FILE')
Flask 支持通过 URL 路径传递参数,例如:
@app.route('/user/' )
def get_user(user_id):
return f'User ID: {user_id}'
访问 /user/123 时,user_id 的值为 123。
可以为路径参数指定类型:
示例:
@app.route('/item/' )
def get_item(item_id):
return f'Item ID: {item_id}'
路径参数类型由 Flask 的底层路由机制(Werkzeug)决定,具体通过以下类处理:
示例:
@app.route('/product/' )
def get_product(product_id):
return f'Product ID: {product_id}'
访问 /product/10 会解析 product_id 为整数类型,若类型不匹配将返回 404 错误。
当内置转换器不能满足需求时,可以自定义转换器。
自定义步骤:
示例:
from werkzeug.routing import BaseConverter
class MobileConverter(BaseConverter):
regex = r'1[3-9]\d{9}' # 匹配手机号格式
app.url_map.converters['mobile'] = MobileConverter
@app.route('/sms/' )
def send_sms(phone_number):
return f'SMS sent to {phone_number}'
访问 /sms/13812345678 将匹配成功。
在转换器类中可以实现 to_python 方法,处理路径参数的值并返回处理后的结果。
示例:
class ListConverter(BaseConverter):
def to_python(self, value):
return value.split('+') # 将路径参数以 "+" 分隔成列表
app.url_map.converters['list'] = ListConverter
@app.route('/tags/' )
def get_tags(tag_list):
return f'Tags: {", ".join(tag_list)}'
访问 /tags/python+flask+web 时,tag_list 将是 ['python', 'flask', 'web']。
Postman 是一个流行的 API 调试工具,可用于测试接口。
功能:
使用示例:
查询参数通常附加在 URL 的末尾,用于传递附加信息。
获取查询参数: 通过request.args 获取查询参数,返回一个 MultiDict 对象。
示例:
from flask import request
@app.route('/search')
def search():
query = request.args.get('q')
return f'Searching for: {query}'
访问 /search?q=flask 将返回 Searching for: flask。
在 POST 请求中,数据通常通过请求体传递。
获取请求体参数:
示例:
@app.route('/login', methods=['POST'])
def login():
username = request.form.get('username')
password = request.form.get('password')
return f'Login with username: {username}, password: {password}'
Flask 支持通过 request.files 获取上传的文件。
示例:
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
file.save(f'./uploads/{file.filename}')
return 'File uploaded successfully!'
注意:
Flask 提供 request 对象来读取请求的不同部分。
属性 |
描述 |
类型 |
values |
包含所有请求参数 |
MultiDict |
form |
包含表单数据 |
MultiDict |
args |
包含查询参数 |
MultiDict |
cookies |
包含请求中的 Cookie |
字典 |
headers |
包含请求的头部信息 |
EnvironHeaders |
method |
请求方法(GET/POST) |
字符串 |
url |
请求的完整 URL 地址 |
字符串 |
files |
上传的文件 |
字典 |
url_for 函数用于根据函数名生成对应的 URL。
示例:
@app.route('/user/' )
def user_profile(user_id):
return f'User ID: {user_id}'
@app.route('/')
def index():
return url_for('user_profile', user_id=42)
返回值为:/user/42
提示: 定义 URL 时,最好以斜杠/ 结尾,避免搜索引擎将加斜杠和不加斜杠的视为不同 URL。
使用 redirect 实现重定向:
from flask import redirect, url_for
@app.route('/')
def index():
return redirect(url_for('login'))
@app.route('/login')
def login():
return 'Login Page'
状态码:
Flask 支持多种响应类型:
return "Hello, Flask!"
2.返回 JSON:
from flask import jsonify
return jsonify({
'message': 'Hello, Flask!'})
3.返回元组:
return "Success", 200, {
'Custom-Header': 'Value'}
可以通过 make_response 创建自定义响应:
from flask import make_response
@app.route('/custom')
def custom_response():
resp = make_response("Custom Response", 404)
resp.headers['X-Custom-Header'] = 'CustomValue'
return resp