Flask 框架笔记

本文介绍了Flask框架中如何使用`render_template`渲染模板以及`url_for`函数动态生成视图URL,强调了它们在代码可维护性上的作用。同时,展示了如何利用`url_for`进行视图函数重定向,并给出了`redirect`函数用于重定向到完整链接的例子。
摘要由CSDN通过智能技术生成
  • 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值