1. 程式人生 > 其它 >14.web開發之flask-3

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>