Как я могу назвать имя пользователя из sql с ajax в колбе? - PullRequest
1 голос
/ 08 июля 2019

Я пытался вызвать информацию о столбце имени пользователя из SQL с помощью ajax, но приходит только имя пользователя с 1-м идентификатором, но я хочу, чтобы все они

это модель

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 голосов
/ 09 июля 2019

Следует помнить, что функция

    @app.route('/test/', methods=['GET','POST'])
    def test():

будет вызываться ONCE только каждый раз, когда вы выполняете этот запрос ajax.Для того чтобы реализовать эту функциональность здесь, нашему приложению-колбе необходимо создать ВЕСЬ список пользователей, а затем вернуть ВЕСЬ список пользователей.

Функция должна возвращать только результат вызова render_template,который должен включать всех пользователей.Здесь происходит то, что наше «return (i) username» подвергается удару и возвращает первого пользователя еще до того, как наша render_template даже вызывается.

Другими словами, когда оператор 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 %}

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...