Как выполнить функцию по нажатию кнопки в форме? Flask

115
02 февраля 2022, 03:10

Разрабатываю небольшое API. Мне требуется после нажатия кнопки считать данные из input'a, произвести с ними некоторые действия и выввести на экран, если это возможно (Что-то вроде месседжбокса).

{% extends 'base.html' %}
{% block body %}
    <body>
        <input class="position_center borders" type="text" placeholder="Вставте нужную ссылку или хеш сюда">
        <button type="button" class="position_center borders">Тык!</button>
    </body>
{% endblock %}

Пробовал временно обойтись без кнопки, прописав инпуту следующую конструкцию:

method="GET" name="q" value="{{ request.args.get('q', '') }}"

и старался забрать переменную q:

def some_sum():
    q = request.args.get['q']
    print(q)

Но, мягко говоря, все тщетно.

Абсолютно не понимаю как по кнопке выполнить определенную функцию.

UPD:

Разобрался. Если вдруг у кого возникнет подобный вопрос, то вот код и скрины.

Первый файл:

index.html
{% extends 'base.html' %}
{% block body %}
    <body>
        <form action="/a" method="post">
            <input class="position_center borders" type="text" placeholder="Вставте нужную ссылку или хеш сюда"
                   name="q">
            <button type="submit" class="position_center borders">Тык!</button>
        </form>
    </body>
{% endblock %}

Второй файл:

blueprint.py
from flask import Blueprint
from flask import render_template, request
urlToHash = Blueprint('urlToHash', __name__, template_folder='templates')

@urlToHash.route('/a', methods=['GET', 'POST'])
def urlToHash_func():
    q = request.form['q']
    return render_template('urlToHash/test.html', q=q)

Третий файл:

test.html
{% extends 'base.html' %}
{% block body %}
    <body>
    <h1>{{ q }}</h1>>
    </body>
{% endblock %}

Скрины:

Answer 1

Вам нужна форма а не просто поле и кнопка.

<body>
    <form action="/url" method="post">
       <input class="position_center borders" type="text" placeholder="Вставте нужную ссылку или хеш сюда">
       <button type="submit" class="position_center borders">Тык!</button>
    </form>
</body>

При этом вам надо тип кнопки сделать submit а вместо /url указать ваш урл роутинга которая перехватывается вашей функцией some_sum.

Ну и вашей функции some_sum указать декоратор вашего урла. Для моего примера должно быть так:

@app.route('/url')
def some_sum():
    q = request.args.get['q']
    return q

И не печатать q а возвращать как ответ.

READ ALSO
Приоритет загрузки данных jquery

Приоритет загрузки данных jquery

Всех с новым годом, есть ссылка при нажатию на которую загружаются данные это:

163
не работают менеджеры tomcat

не работают менеджеры tomcat

Не открываются менеджеры "server status, manager app, host manager"нажимаю на соответствующие кнопки и tomcat начинает загружать страницу и больше ничего не происходит:...

116
Vaadin: дублируются значения для Grid

Vaadin: дублируются значения для Grid

Я описал Grid, как описано в инструкции

102
Поиск в базе через Spring Data Jpa

Поиск в базе через Spring Data Jpa

Есть два @Entity - Meal и Restaurant, взаимосвязанные через @OneToMany - ресторан имеет List<Meal> mealListВот сущности (геттеры и сеттеры намеренно не указал, но в коде...

187