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参数的方式,具体可以参考这里: https://pdf-lib.org/Home/Details/5201

这样再次获取数据就没有什么问题了。
再次使用SQLALchemy保存数据,数据已经成功更新了。

标签:Flask 发布于:2019-10-21 21:45:53