每日一言
All meetings must end with partings. — Dera Mochimazzi from Tamako Market
创建表单
首先我们创建一个html表单内容如下:
<!DOCTYPE html>
<html>
<head>
<title>Form Example</title>
</head>
<body>
<form action="/submit" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name">
<br>
<label for="email">Email:</label>
<input type="email" id="email" name="email">
<br>
<input type="submit" value="Submit">
</form>
</body>
</html>
action="/submit":表示将表单提供到路径/submitmethod="post":表示提交方式为post
样式如下:

Flask接收数据
要获取从表单提取的数据,首先完美需要从flask中导入request
from flask import request
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def form():
return render_template('form.html')
@app.route('/submit', methods=['POST']) #设置form提交数据的路由
def submit():
name = request.form.get('name') #这里填入参数对应html中的name属性
email = request.form.get('email')#这里填入参数对应html中的name属性
return f'Name: {name}, Email: {email}' #提交表单后自动跳转到/submit路径
if __name__ == '__main__':
app.run(debug=True)
提交表单后,浏览器会自动跳转到 /submit路径,同时触发 submit视图函数。若不需要让用户看自己提交的数据,可以使用重定向回到主页,或者你需要的位置
@app.route('/submit', methods=['POST']) #设置form提交数据的路由
def submit():
name = request.form.get('name') #这里填入参数对应html中的name属性
email = request.form.get('email')#这里填入参数对应html中的name属性
return redirect(url_for('/')) #重定向到首页
文件上传
templates/upload.html 文件代码:
<!DOCTYPE html>
<html>
<head>
<title>Upload File</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="file">File:</label>
<input type="file" id="file" name="file">
<br>
<input type="submit" value="Upload">
</form>
</body>
</html>
enctype="multipart/form-data":表示不对字符编码,用于文件上传application/x-www-form-urlencoded(默认值)- 所有字符会被编码
处理文件上传
from flask import Flask, request, redirect, url_for,render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('upload.html')
@app.route('/upload', methods=['POST'])
def upload():
file = request.files.get('file') #html中的name属性
if file:
filename = file.filename
file.save(f'app/uploads/{filename}') #此处路径为工作目录下的相对路径,而非flask应用的相对路径
return f'File uploaded successfully: {filename}'
return 'No file uploaded'
if __name__ == '__main__':
app.run(debug=True)
Flask-WTF扩展
在很多教程中都使用的Flask-WTF扩展用于对表单进行处理,但是本系列flask笔记只想围绕最基本的flask框架进行初步学习,后续如果需要用到WTF扩展会再补充该部分。但是希望能够知道这样一个东西存在。