05. 通过falsk后端验证form表单提交数据
通过falsk后端验证form表单提交数据
1. falsk+html form表单
1.1 html前端代码
show code
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>form表单</title>
</head>
<body>
<!--action 提交数据到后端的路径(给哪个服务器提交)-->
<!--
1.什么都不写 默认当前页面所在的url
2.全路径 www.baidu.com 百度
3.只写路径后缀 action='/index'
自动识别出服务端的ip和port拼接到前面
host:port/index
-->
<!--input 和 label一起使用-->
<form action="http://127.0.0.1:5000/index" method="post" enctype="multipart/form-data">
<p><label for="d1">
<!-- readonly 只读 disable 禁用
input type="hidden" 隐藏
-->
username : <input type="text" id="d1" name="username" disabled value="默认值"/>
</label></p>
<!--通过id连接即可-->
<p><label for="d2"></label> password : <input type="password" id='d2' name="password"/></p>
<p>birthday :
<label for="d3"><input type="date" id="d3" name="birthday"/></label>
</p>
<!--
所有获取用户标签输入的标签 都应该有name属性
name类似于字典的key
用户数据类似于字典的value
-->
<p>gender :
<input type="radio" value="男" name="gender" checked="checked" />男
<input type="radio" value="女" name="gender" />女
<input type="radio" value="其他" name="gender" >其他
</p>
<p>bobby :
<input type="checkbox" name="bobby" value="打球"/> 打球
<input type="checkbox" name="bobby" value="音乐"/> 音乐
</p>
<p>province:
<select name="province" id="">
<option value="桂林" >桂林</option>
<option value="南宁" selected>南宁</option>
<option value="梧州">梧州</option>
</select>
</p>
<p>subject :
<select name="subject" id="" multiple>
<option value="python">python</option>
<option value="java" selected>java</option>
<option value="js">js</option>
</select>
</p>
<!-- <p> addr:-->
<!-- <select name="" id="">-->
<!-- <optgroup label="桂林">-->
<!-- <option value="">临桂</option>-->
<!-- <option value="">龙胜</option>-->
<!-- <option value="">恭城</option>-->
<!-- </optgroup>-->
<!-- <optgroup label="河池">-->
<!-- <option value="">宜州</option>-->
<!-- <option value="">金城江</option>-->
<!-- </optgroup>-->
<!-- </select>-->
<!-- </p>-->
<p>上传文件:
<input type="file" name="myfile" multiple/>
</p>
<p>自我介绍:
<textarea name="introdue" id="" cols="30" rows="10" maxlength="20"></textarea>
</p>
<!--提交form表单数据页面刷新-->
<input type="submit" value="注册" />
<!--普通按钮,本身没有功能,后面有用,学js之后自定义功能-->
<input type="button" value="按钮" />
<!--用来重置内容-->
<input type="reset" value="重置" />
<!--button也可以提交表单数据-->
<button>点我</button>
</form>
</body>
</html>
1.2 falsk后端代码
# -*- coding: utf-8 -*-
from flask import Flask, request
app = Flask(__name__)
# form表单是发送get请求
# 提交文件注意:
# method必须是post
# enctype="multipart/form-data"
# enctype 默认是urlencoded 只能提交普通文本数据
@app.route('/index', methods=['get', 'post'])
def index():
print(request.form) # 获取form表单中非文件属性(没有name属性的获取不了)
print(request.files) # 获取文件数据
file_obj = request.files.get('myfile')
print(file_obj.name)
file_obj.save(file_obj.name)
return 'ok'
app.run()
2. 注意事项
2.1 form表单路径&文件传输
- action = "http://127.0.0.1:5000/index"
- 以上实现了文件传输,文件传输必须注意
- method必须是post
- ctype="multipart/form-data"
- nctype 默认是urlencoded 只能提交普通文本数据
<form action="http://127.0.0.1:5000/index" method="post" enctype="multipart/form-data">
......
</form>>
2.2 小细节功能
<p><label for="d1">
<!--readonly 只读 disable 禁用 input type="hidden" 隐藏 value="默认值"-->
username : <input type="text" id="d1" name="username" disabled value="默认值"/>
</label></p>
<!--multiple 可以多选(比如上传多个文件,复选框选多个)-->
<input type="file" name="myfile" multiple/>
2.3 下拉框,单选框,复选框等说明
注意
:默认情况下(下拉框,单选框,复选框等)用户选择的表单都需要设定一个默认值 value,才能从后端获取到值
<!--
所有获取用户标签输入的标签 都应该有name属性
name类似于字典的key
用户数据类似于字典的value
-->
运行说明
- 先运行后端代码 后用户输入数据
再坚持一下下,会越来越优秀