14.web开发之flask-3
表单处理
main.py
@app.route('/chuli', methods=['POST'])
def chuli():
if request.method == 'POST':
# uname和passwd是前端的name字段里的字符
username = request.form.get('uname')
password = request.form.get('passwd')
print("用户名提交了" + username + "密码提交了" + password)
return render_template('/chuli.html')
@app.route('/test1')
def test1():
return render_template('test1.html')
test1.html
<!-- action表示提交到哪个页面 -->
<form method="post" action="/chuli">
用户名:<input type="text" name="uname" /><br>
密码:<input type="password" name="passwd" /><br>
<input type="submit" value="点我提交" />
</form>
chuli.html
<body>
处理完毕
</body>
流程:用户访问/test1
路由跳转到test1.html
中提交用户名和密码,交到/chuli
路由下,chuli函数通过提取前端输入并print
到控制台,同时转到chuli.html
向前端返回处理完毕的字样
测试时请使用无痕窗口,因为前端容易留下缓存,可能影响结果
数据库操作(查)
在此之前先用phpstudy搭建数据库haha和表table1
fetchone查询
main.py
import pymysql
@app.route('/chuli', methods=['POST'])
def chuli():
if request.method == 'POST':
# uname和passwd是前端的name字段里的字符
username = request.form.get('uname')
password = request.form.get('passwd')
print("用户名提交了" + username + "密码提交了" + password)
# 打开数据库
db = pymysql.connect(host="localhost", user="root", password="root", db="haha")
# 创建游标对象,相当于指针指向数据库,指向哪就做什么事
cursor = db.cursor()
# sql语句
sql = "SELECT * FROM table1"
# 通过指针执行sql语句
cursor.execute(sql)
# 确认执行
db.commit()
# 数据执行sql语句后已经保存到这个cursor中,需要接收
list1 = []
for i in range(5):
# 将指针内的数据一条一条拿出来
data = cursor.fetchone()
print(data)
db.close()
return render_template('/chuli.html')
此时是以元组的形式输出,并不是我们想要的
强制类型转换并列表输出,是一个大列表包含一个小列表,可以获得第二个用户的用户名
for i in range(5):
# 将指针内的数据一条一条拿出来
data = cursor.fetchone()
# 强制类型转换
li = list(data)
# 列表拼接
list1.append(li)
print(list1)
# 输出第二个列表的第二个数据
print(list1[1][1])
db.close()
不能使用
list1+=li
,因为会连在一起
fetchall查询
fetchone
语句一个一个取出,我们是知道有多少,如果事先不知道的话要对整个数据库进行查找需要使用fetchall
语句
for item in cursor.fetchall():
# item本身是一个元组,转换成字典形式存储
dict = {'用户名': item[1], '密码': item[2]}
list1.append(dict)
print(list1[1]["名字"])
db.close()
返回json格式数据
在db.close()
后添加代码,并注释掉之前的return语句
result = json.dumps(list1, sort_keys=True, ensure_ascii=False)
return result
sort_key=True:告诉编码器按照字典排序(a到z)输出
ensure_ascii=False:避免返回数据对中文编码
数据库的增删改以及模板输出
增删改
# sql语句,通过三个双引号扩大语句编写位置
sql = """
INSERT INTO table1(username,password) VALUES('test3','999999')
"""
try:
# 通过指针执行sql语句
cursor.execute(sql)
# 确认执行
db.commit()
except:
# 执行失败就回滚,还原数据且不执行
db.rollback()
db.close()
增语句还可以通过变量传递
sql = """
INSERT INTO table1(username,password) VALUES('%s','999999')
""" % 'test4'
删和改都在sql变量中修改即可
利用jinja模板获取数据库输出
main.py
sql = "SELECT * FROM table1 where id < 5"
cursor.execute(sql)
db.commit()
list1 = []
for item in cursor.fetchall():
# 用list和dict存储利于之后数据修改和脱敏处理
dict = {'name':item[1],'password':item[2]}
list1.append(dict)
print(list1)
db.close()
return render_template('/chuli.html',list1=list1)
chuli.html
<body>
处理完毕
<hr>
{% for line in list1 %}
<li>{{line.name}}</li>
<li>{{line.password}}</li>
{% endfor %}
</body>
本文来自博客园,作者:icui4cu,转载请注明原文链接:https://www.cnblogs.com/icui4cu/p/16160115.html