Flask里面的默认转换器和自定义转换器
简介:本文讲解,Flask里面的默认转换器和自定义转换器。
Flask项目创建参考这篇文章:通过命令行的方式快速创建一个flask项目
代码讲解
默认转换器
以下是一个简单的 Flask 应用程序,演示了 Flask 的默认转换器的使用:
from flask import Flask app = Flask(__name__) # 默认转换器示例 @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post ID: {}'.format(post_id) @app.route('/username/<username>') def show_username(username): return 'Username: {}'.format(username) if __name__ == '__main__': app.run(debug=True)
在这个示例中,定义了两个路由:
- /post/<int:post_id>:使用了默认的转换器,<int:post_id> 表示匹配一个整数类型的参数,并将其传递给路由处理函数 show_post()。
- /username/<username>:也使用了默认的转换器,不指定转换器类型,因此默认为字符串类型。无论传入的是什么,Flask 都会将其作为字符串处理,并传递给路由处理函数 show_username()。
运行该应用程序后,你可以通过访问不同的 URL 来测试这两个路由的行为:
- /post/123: 显示 Post ID: 123
- /post/abc: Flask 将返回 404 错误,因为 abc 不是整数。
- /username/johndoe: 显示 Username: johndoe
运行结果展示
- 如果传递的参数类型错误就会报错
自定义转换器
下面代码砖石了内置转换器和自定义转换器的使用:
from flask import Flask from datetime import datetime from werkzeug.routing import BaseConverter app = Flask(__name__) # 使用内置转换器演示 @app.route('/user/<int:user_id>') def show_user(user_id): return 'User ID: %d' % user_id # 定义自定义转换器 class DateConverter(BaseConverter): # to_python方法将 URL 中的字符串转换为 Python 对象 def to_python(self, value): return datetime.strptime(value, '%Y-%m-%d') # to_url方法将 Python 对象转换为 URL 中的字符串 def to_url(self, value): return value.strftime('%Y-%m-%d') # 将自定义转换器添加到应用程序的转换器中,'date' 是转换器的名称 app.url_map.converters['date'] = DateConverter @app.route('/date/<date:date>') def show_date(date): return 'Date: %s' % date if __name__ == '__main__': app.run(debug=True)
在这个应用程序中,演示了两个路由:
- /user/<int:user_id>:使用了内置的 <int> 转换器,它只匹配整数类型的参数。
- /date/<date:date>:使用了自定义的 DateConverter 转换器,它接受形如 YYYY-MM-DD 的日期字符串,并将其转换为 datetime 对象。
运行该应用程序后,你可以通过访问不同的 URL 来测试这两种转换器的使用。例如:
- /user/123: 显示 User ID: 123
- /user/abc: Flask 将返回 404 错误,因为 abc 不是整数。
- /date/2022-12-31: 显示 Date: 2022-12-31
- /date/31-12-2022: Flask 将返回 404 错误,因为日期格式不正确。
运行结果展示
- 测试日期的效果