简介:本文讲解,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 错误,因为日期格式不正确。