在使用SQLALchemy更新数据的时候,一直不成功。
数据更新的方式采用ajax,具体代码如下:
$(function () {
$('#user_profile').click(function (event) {
event.preventDefault(); //prevent the actual form post
user_profile();
});
// Inject our CSRF token into our AJAX request.
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", $('#csrf_token').val())
}
}
})
})
function user_profile() {
$.ajax({
type: $('#tab_1_1 form').attr("method"),
url: $('#tab_1_1 form').attr("action"),
data: $('#tab_1_1 form').serialize(),
contentType: "application/x-www-form-urlencoded",
success: function (data) {
console.log(data);
}
});
}
但是提交到后台无法获取数据,提交的数据结构如下所示:
csrf_token=IjkwNjQ5OTE2MTJjMGMwZDk4OTc5ZmQxOTZjOTgxMmU4MmU0ZDRmMzAi.DjHgiQ.hDgD-Yz89RkJZPL-YorWJdG7Z7c&fullname=%E9%BB%84%E5%85%B5&nick_name=%E7%8B%AC%E8%A1%8C%E4%BE%A0&phone_number=13429950072&about_me=%E6%88%91%E6%98%AF%E4%B8%80%E4%B8%AA%E5%AE%85%E7%94%B7%EF%BC%8C%E8%AF%B7%E5%A4%A7%E5%AE%B6%E4%B8%8D%E8%A6%81%E6%89%93%E6%89%B0%E6%88%91%E7%BB%A7%E7%BB%AD%E5%AE%85%E3%80%82&website_url=https%3A%2F%2Fpdf-lib.org
之后看一下后台如何接收数据:
# 验证提交
if form.validate_on_submit():
current_user.fullname = form.fullname.data
current_user.phone_number = form.phone_number.data
current_user.nick_name = form.nick_name.data
current_user.website_url = form.website_url.data
try:
sql_query=str(db.session.add(current_user._get_current_object()))
print(sql_query)
print(current_user._get_current_object())
db.session.commit()
except:
flash('账户更新失败!')
flash('账户资料已更新!')
使用这种方式无法获取数据,数据一直没有更新,搞不清是什么情况。之后不断调试,参考了别人文章之后终于把问题解决了。
需要修改源代码如下:
# 验证提交
if form.validate_on_submit():
current_user.fullname = request.values.get('fullname', 0)
current_user.phone_number = request.values.get('phone_number', 0)
current_user.nick_name = request.values.get('nick_name', 0)
current_user.about_me = request.values.get('about_me', 0)
current_user.website_url = request.values.get('website_url', 0)
try:
db.session.add(current_user._get_current_object())
db.session.commit()
except:
flash('账户更新失败!')
flash('账户资料已更新!')
这个是flask获取post参数的方式,具体可以参考这里: https://pdf-lib.org/Home/Details/5201
这样再次获取数据就没有什么问题了。
再次使用SQLALchemy保存数据,数据已经成功更新了。