Следующая структура приложения, где один ...
- входит в систему
- выполняет задание
- перенаправляется в меню после выполнения задачи
... работает нормально, вот так:
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
не будет загружен ..
что мне не хватает?