3. Flask请求-响应循环
2025-02-17
模块
视图函数的作用很明确,即生成请求的响应,但一般而言,请求会改变程序的状态,而这种变化也会在视图函数中产生。
例如,用户在网站中注册了一个新账户。用户在表单中输入电子邮件地址和密码,然后点击提交按钮。服务器接收到包含用户输入数据的请求,然后 Flask把请求分发到处理注册请求的视图函数。这个视图函数需要访问数据库,添加新用户,然后生成响应回送浏览器。这两个过程分别称为业务逻辑和表现逻辑。
业务逻辑和表现逻辑混在一起,会导致代码难以理解和维护。
当需要为一个大型表格构建HTML代码,表格中的数据由数据库中读取的数据以及必要的HTML字符串连接在一起,把表现逻辑移到模块中能够提升程序的可维护性。
模块,是一个包含相应文本的文件,其中包含用来占位变量表示的动态部分,具体值只在请求的上下文中才能知道。渲染:使用真实值替换变量,再返回最终得到的相应字符串
为了渲染模板,Flask使用一个名为jinja2的模块引擎
Jinja2模块引擎
最简单的jinja2模块就是一个包含响应文本的文件。
<!-- templates/index.html:Jinja2模块 -->
<h1>Hello World!</h1>变量表示的动态部分
<!-- templates/user.html:Jinja模块 -->
<h1>Hello,{{ name }}!</h1>渲染模块
默认情况,Flask在程序文件夹中的templates子文件夹中寻找模块。 一般把定义的模块保存在templates文件夹中。
实例:
# hello.py:渲染模块
from flask import Flask,render_template
# ...
@app.route('/')
def index():
return render_template('index.html')
@app.route('/user/<name>')
def user(name):
return render_template('user.html',name=name)解释:
Flask提供的render_template函数把Jinja2模块引擎集成到了程序中。
render_template函数的第一个参数是模块的文件名(idnex.html)
第二个参数是键值对,表示模块中变量对应的真实值
在上面的代码中。第二个user.html模块收到一个 name 的变量
上面中,name=name是关键字参数。
左边的 name :表示参数名,就是模块的占位符
右边的 name :表示当前作用于的变量,表示同名参数的值