Flask - отображать страницу загрузки с помощью Ajax, пока выполняется длинное задание - PullRequest
0 голосов
/ 13 января 2019

Следующая структура приложения, где один ...

  • входит в систему
  • выполняет задание
  • перенаправляется в меню после выполнения задачи

... работает нормально, вот так:

clients.py

@consumers_bp.route('/client', methods=['GET','POST'])
def consumer():  
    if request.method == 'POST':
        mail = request.form['email']
        client_name = request.form['name']
        streaming = request.form['streaming']
        username = request.form['username']
        if db.session.query(Consumer).filter_by(username=username).count() < 1:            
            # long task
            return redirect(url_for('menus.menu_client'))
        else
            # another long task             
            return redirect(url_for('menus.menu_client'))   
    return render_template('login.html')

menus.py

@menus_bp.route('/menu_client', methods=['GET'])
def menu_consumer():
    user = User.query.filter_by(restaurant='some').first()
    menu = user.menu
    user_items = [t['item_name'] for t in menu['items']]     
    return render_template('menu_client.html',
                            user_items=user_items)

login.html

<div class="login">
  <h1>Client Login</h1>
    <form action="/client" method="post">
      <input type="username" name="name" placeholder="Your Name" required="required" />
      <input type="email" name="email" placeholder="Email" required="required" />
        <input type="streaming" name="streaming" placeholder="Streaming" />
        <input type="password" name="username" placeholder="Username" />
        <button type="submit" name="submit_button" class="btn btn-primary btn-block btn-large">Login.</button>
    </form>
</div>

menu_consumer.html

      <li><a href="{{ url_for('dishes.client_dishes')}}">{{ dishes[0] }}</a></li>
       <li><a href="{{ url_for('dishes.client_dishes')}}">{{ dishes[1] }}</a></li>

Однако задача в представлении '/client' стоит дорого, и я хотел бы отобразить загрузочную страницу, пока она потребляется, до отображения menu_client.html.

Я попытался включить <script> в шаблон menu_client.html выше, например, так:

Где новое действие выше будет указывать на это новое представление:

loading.py

@loading_bp.route('/loading_client')
def loading_client():
    return render_template('loading_client.html',
                            form_data=request.form['name'])

вызывается с функцией ajax внутри шаблона:

loading_client.html

<script>
    $.ajax({
        type: 'POST',
        url: '/menu_client',
        data: {
            form_data: '{{form_data}}',
        },
        success: function() {
            window.location.replace('/menu_client');
        }
      });
</script>

loading_client.html не загружается при запуске. страница входа по-прежнему висит до тех пор, пока menu_client.html не будет загружен ..

что мне не хватает?

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