如何在Flask中使用Ajax从sql调用用户名?

时间:2019-07-08 07:07:42

标签: javascript python ajax flask

我尝试使用ajax从SQL调用用户名列信息,但仅使用第一个id的用户名,但我希望所有人都使用

这是模型

class users(db.Model):
    id=db.Column(db.Integer,primary_key=True)
    username=db.Column(db.String(100),unique=True)
    email=db.Column(db.String(100),unique=True)
    password=db.Column(db.String(100))
    posts=db.relationship('posts',backref='user')
    picture=db.Column(db.String(1000))

这是路线

@app.route('/test/', methods=['GET','POST'])
def test():
    user=None
    if request.method == "POST":
    user=users.query.all()
    for i in user:
        return (i.username)

return render_template('test.html',user=user)

这是html代码

{% extends 'base.html'%}
{% block title %}
    Test Page
{% endblock %}

{% block content_title %}
   <h1 class="text-center"> Please Tests</h1>
{% endblock %}

{% block content %}
    <button class="usersList btn btn-info">Users List</button>
{% endblock %}

这是我的js文件

$(document).ready(function(){


        $(".usersList").click(function(){ 
        $.ajax({
            type : 'POST',
            url : "/test/",
            dataType:'json',
            contentType: 'application/json',
            success:function(response){

            }
        });
    });
});

1 个答案:

答案 0 :(得分:0)

要记住的是函数

    @app.route('/test/', methods=['GET','POST'])
    def test():
每次执行该Ajax请求时,

仅会被称为ONCE。我们尝试在此处实现功能的方式是,flask应用程序需要构建整个用户列表,然后返回整个用户列表。

该函数应仅返回render_template调用的结果,该结果应包括所有用户。这里发生的是,甚至在调用render_template之前,我们的“ return(i)用户名”被点击并返回了第一个用户。

换句话说,当“ return”语句被命中时,该函数将立即返回我们告诉它的内容,而该函数的其余部分将永远不会执行。

我对代码做了一些修改

    @app.route('/test/', methods=['GET','POST'])
    def test():
        #you're only returning one value like this
        #user=None

        #use a list to hold all the users returned from the query instead
        users=[]

        if request.method == "POST":
        user=users.query.all()
        for i in user:
            #don't do this
            #return (i.username)

            #do this instead
            username = i.username
            users.append(username)    
    return render_template('test.html',users=users)

然后,在我们的html模板中,我们要遍历返回的列表并为每个用户名项呈现一个元素。类似于以下内容可能会让您入门:

    <h2>Usernames</h2>
    {% for username in usernames %}
      <span>{{username}}</span>
    {% endfor %}

希望对您有帮助