建议食用官方文档:Welcome to Flask — Flask Documentation (2.1.x)https://flask.palletsprojects.com/
前言:避免文章篇幅过长,只简单讨论数据传输、Cookies、Session的常见使用方法。
(1)前后端数据交互
①使用form表格
先来看看form表格是如何打包、传输数据的:
- 先把form表单里的表单元素的name属性和value属性进行收集。
- 按照enctype属性的设置,选择合适的编码方式,对数据进行编码,放在请求头里。
- 向服务器发送数据。
form的enctype有如下常见的几种,在这里你可以全部尝试一遍:
- application/x-www-form-urlencoded (默认方式)把数据变成key-value格式
- multipart/form-data (二进制数据方式)适用于大文本/文件传输(传文件必须用这个)
- text/plain(纯文本格式,用+号间隔)
form的method属性应该设置为:method='post'
在app.py同级下建目录templates/login.html,并写入下面代码:
<form enctype='application/x-www-form-urlencoded' method="post">
<input name="name" placeholder="姓名" /> <br>
<input name="password" placeholder="密码" /> <br>
<button type="submit" > 登录 </button>
</form>
在app.py文件写入代码:
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == "GET":
# 获取请求原始信息
print(request.environ)
# 路由地址 /login
print(request.path)
# 获取访问路径
print(request.url) # http://127.0.0.1:5000/login
# 获取URL头,不包含参数 /login
print(request.base_url) # http://127.0.0.1:5000/login
return flask.render_template("login.html")
if request.method == "POST":
print("value = ", request.values.to_dict())
print("args = ", request.args.to_dict())
print("form = ", request.form.to_dict())
return "POST OK!"
运行flask run可以测试效果(login页面账号密码都必须填上,否则请求报错)。
②使用url路径传参
路径传参又有两种方式:1.使用问号?后面接key=value&key2=value2的形式; 2.使用flask路由的参数
主要写写第一种的,第二种官方文档有实例。
第一种需要写js代码,在templates目录内创建一个html文件,我的是data.html,并且写入:
<script>
function get() {
var value = document.getElementsByName('key')[0].value
window.location.href = window.location.href + '?key=' + value
// 获取当前url,并接上参数
}
</script>
<input type="text" name="key" placeholder="参数" />
<input type="submit" onclick="get()" />
然后在app.py里面写上:
@app.route('/data', methods=['GET'])
def data_page():
if 'key' in request.args:
return "find it! : key = " + request.args.get('key')
return flask.render_template('data.html')
这是一种简单的传参方法,但是参数长度有限制。普通的浏览器限制url的长度不可以超过2000左右,但是也有的浏览器比较牛逼,支持60000左右(比如火狐)。
所以通过url传参只能传达简单的数据,需要传达其它数据请使用form表格或者其它方式(我也不知道还有啥,可能之后会更新)
③ 使用Ajax动态更新页面
这个也算是数据传输方式了吧,使用GET/POST请求,和form表格差不多。但是感觉这是前端的事情,就不在这写了。(主要是因为我不会)
(2)Cookie的练习
情景:当前你在写你个人网站的搜索工具,你想要使用cookies存储用户最近几次搜索记录。
Flask设置cookies有默认的失效时间,当浏览器关闭时cookies就会失效。
cookie不支持存放数组,只能存放字符串key:value,所以使用一个分隔符'|'分割搜索历史。
天有不测之风云,在设置Cookies时,无法显示中文,应该是编码的问题【解决方法】