python用flask框架寫了個(gè)簡(jiǎn)單的增刪改查例子,途中遇到點(diǎn)問(wèn)題序宦,就簡(jiǎn)單記錄一下滥玷。
問(wèn)題一:route()
裝飾器,可以通過(guò)method參數(shù)來(lái)指定http方法寒屯,剛開(kāi)始我明明指定了method=['POST']
荐捻,可是執(zhí)行后,依然會(huì)報(bào)錯(cuò)寡夹,查看提示信息依然是GET
方式处面。
解決:首先我們得要有個(gè)頁(yè)面,渲染時(shí)默認(rèn)用get
來(lái)打開(kāi)模板菩掏,然后在post
進(jìn)行傳參魂角。
如下,可以將同一個(gè)頁(yè)面合并在一起寫:
@app.route('/add', methods=['GET', 'POST'])
def add():
# get打開(kāi)頁(yè)面
if request.method == 'GET':
return render_template('add.html')
else:
# 獲取表單數(shù)據(jù)
datas = request.form.to_dict()
datas['time'] = time.strftime('%Y-%m-%d %H:%M:%S')
sql = 'insert into message(nick,messages,create_time) Values("%s","%s","%s")' % (
datas['name'], datas['message'], datas['time'])
res = con.execute_edit_sql(sql)
if res:
return redirect('/index')
else:
return redirect('/add')
也可以分開(kāi)寫:
@app.route('/add', methods=['GET'])
def add():
return render_template('add.html')
@app.route('/add', methods=['POST'])
datas = request.form.to_dict()
datas['time'] = time.strftime('%Y-%m-%d %H:%M:%S')
sql = 'insert into message(nick,messages,create_time) Values("%s","%s","%s")' % (
datas['name'], datas['message'], datas['time'])
res = con.execute_edit_sql(sql)
if res:
return redirect('/index')
else:
return redirect('/add')
問(wèn)題二:封裝sql語(yǔ)句時(shí)智绸,執(zhí)行完sql語(yǔ)句直接就關(guān)閉了數(shù)據(jù)庫(kù)連接野揪,導(dǎo)致不能連續(xù)打開(kāi)接口访忿,導(dǎo)致數(shù)據(jù)庫(kù)報(bào)錯(cuò)
# 源代碼
def execute_select_sql(self, sql):
self.cursor.execute(sql)
data = self.cursor.fetchall()
self.con.commit()
#self.cursor.close()
#self.con.close()
return data
解決:注釋掉關(guān)閉連接的語(yǔ)句,主代碼直接調(diào)用一次即可
request.form.to_dict()
:獲取表單數(shù)據(jù)并轉(zhuǎn)化成數(shù)據(jù)字典
request.args.get('id')
:獲取地址欄?號(hào)后的id參數(shù)