- render_template 渲染模板 从模版文件夹templates中呈现给定的模板上下文
- url_for
函数的作用是根据视图函数的名称和参数生成该视图的 URL,这样,当您更改应用程序的 URL 结构时,您只需要更新视图函数的名称和参数,而不需要修改应用程序中的每个 URL,从而使代码更具可维护性。
例子
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/')
def index():
return 'This is the index page.'
@app.route('/user/<username>')
def profile(username):
return f'This is the profile page of {username}'
if __name__ == '__main__':
with app.test_request_context():
print(url_for('index'))
print(url_for('profile', username='John Doe'))
在上面的示例中,我们定义了两个路由函数 index() 和 profile()。index() 函数处理应用程序的根路由,而 profile() 函数处理带有用户名参数的 /user/ 路由。然后,我们在 if name == ‘main’ 语句块中使用 url_for() 函数生成两个 URL,并打印输出。
当我们运行该程序时,输出应该如下所示:
/
/user/John%20Doe
注意:我们用app.test_request_context(),创建一个模拟请求的上下文环境,用于测试视图函数或其他 Flask 应用程序代码。
- app.test_request_context() 函数
我们可以方便地测试我们的 Flask 应用程序,而不必手动构造请求环境。这样可以大大简化测试代码,并提高测试的准确性和可靠性。
例子:
from flask import Flask, request
app = Flask(__name__)
@app.route('/echo', methods=['POST'])
def echo():
data = request.data.decode('utf-8')
return data
if __name__ == '__main__':
with app.test_request_context('/', method='POST', data=b'Hello, World!'):
response = app.full_dispatch_request()
assert response.data == b'Hello, World!'
我们首先定义了一个 echo() 视图函数,它将接收到的请求数据作为响应返回。然后,我们使用 app.test_request_context() 函数创建一个模拟请求环境,模拟了一个 POST 请求,请求的数据为 b’Hello, World!‘。最后,我们使用 app.full_dispatch_request() 函数来调用这个路由,并获取响应结果。在这个示例中,我们断言响应数据是否等于 b’Hello, World!’,以确保这个视图函数能够正确地处理请求并返回预期的结果
- redirect()重定向
1.重定向到视图函数路径。
2.使用url_for函数构建指定函数的URL,操作对象是函数,不是route里的路径,即得到函数的路由地址。
3.重定向到完整链接。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route("/index_1")
def index_1():
# 重定向到视图函数路径
return redirect("t")
@app.route("/index_2")
def index_2():
# url_for构建指定函数的URL,操作对象是函数,不是route里的路径,即得到函数的路由地址
return redirect(url_for("test"))
@app.route("/index_3")
def index_3():
# 重定向到完整链接
return redirect("http://127.0.0.1:5000/t")
@app.route("/t")
def test():
print("test")
return "test"
if __name__ == '__main__':
app.run(host="127.0.0.1", port=5000)