Flask 框架笔记

  • 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)

猜你喜欢

转载自blog.csdn.net/weixin_45837404/article/details/129079018