概要:本章主要记录Flask框架中的模板、静态文件和Cookie的操作
一、模板
Flask视图函数的主要作用是对HTTP请求响应内容,当响应页面时,如果通过字符串方式转义拼接页面内容,可能会导致不必要和未知的错误,因此可以采用模板引擎。
Flask使用jinga2模板引擎,尝试在templates文件夹中找到HTML文件并返回。主要通过下列函数实现:
flask.render_template(template_name_or_list, context)
参数:
- template_name_or_list: 模板名称
- context – 需要传递给模板的参数
简单示例:
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route('/study/<username>', methods=['GET'])
def sayhello(username):
return render_template('Hello.html', username=username)
if __name__ == '__main__':
app.run()
响应页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
{% if username =='admin' %}
<p>Hello, {{ username }}</p>
{% else %}
<p>{{ username }}, Permission denied </p>
{% endif %}
</body>
</html>
浏览器访问:http://127.0.0.1:5000/study/wangwu
输出结果:
wangwu, Permission denied
浏览器访问:http://127.0.0.1:5000/study/admin
输出结果:
Hello, admin
Jinja2模板引擎使用以下分隔符从HTML转义
- {% … %}: 用于语句
- {{ … }} :用于表达式可以打印到模板输出
- {# … #} : 用于未包含在模板输出中的注释
- # … ## :用于行语句
二、静态文件
Web应用程序通常需要静态文件,例如js文件或css文件。通常这些文件是从static文件夹中提供。
示例:(对上述HTML文件稍加修改)
扫描二维码关注公众号,回复:
9402296 查看本文章
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename = 'hello.css') }}">
</head>
<body>
{% if username =='admin' %}
<p>Hello, {{ username }}</p>
{% else %}
<p>{{ username }}, Permission denied </p>
{% endif %}
</body>
</html>
在工程的static目录下新建文件hello.css
p{
font-size: 60px;
color: blue;
}
当访问连接后即可发现样式已修改,js 文件类似引入即可。
三、Cookie操作
是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
Flask中主要通过Request对象操作Cookie,示例如下:
from flask import Flask
from flask import render_template
from flask import make_response
from flask import request
app = Flask(__name__)
@app.route('/study/<username>', methods=['GET'])
def sayhello(username):
# 通过make_response函数获得flask.wrappers.Response对象
resp = make_response(render_template('Hello.html', username=username))
# 通过Response对象设置cookie
resp.set_cookie('username', username)
return resp
@app.route('/study/cookie')
def getcookie():
# 通过request.cookies函数获取cookies字典,然后获取指定的数据即可
return request.cookies.get('username')
if __name__ == '__main__':
app.run()
测试:
浏览器访问: http://127.0.0.1:5000/study/admin 和 http://127.0.0.1:5000/study/cookie
返回:admin
通过F12即可查看请求头中的cookies