我尝试使用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){
}
});
});
});
答案 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 %}
希望对您有帮助