文章内容

2018/7/19 16:52:08,作 者: 黄兵

flask 更新数据库失败

在使用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参数的方式,具体可以参考这里:Flask如何获取Post传过来的参数?

这样再次获取数据就没有什么问题了。

再次使用SQLALchemy保存数据,数据已经成功更新了。


参考资料:

ajax post data in flask view

Posting a WTForm via AJAX with Flask


黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - flask 更新数据库失败

分享到:

发表评论

评论列表