14.web開發之flask-3
阿新 • • 發佈:2022-04-18
表單處理
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>