dem171
@dem171
3 дня изучаю питон по книге Майкла Доусона

Как привязать обработчик flask'a к форме html?

я пытаюсь делать простое веб приложение на фласке просто с карточками информации которые можно редактировать удалять и добавлять
я сделал базу данных flask sql alchemy создал там поля по типу id , name и text
сделал шаблон страницы с добавлением карточки и у каждой созданной карточки должно быть 2 кнопки :
редактирования
удаления
кнопку удаления я сделал, а вот кнопку редактирования не получается сделать
так выглядит обработчик редактирования
@app.route('/update/<int:id>', methods=['POST' ,'GET'])
def upd_card(id):
    card = Cards.query.get_or_404(id)
    if request.method == 'POST':
        card.name = request.form["name"]
        card.text = request.form["text"]

        try:
            db.session.commit()
            return redirect(url_for('index'))
        except:
            return "ПРоизошла ошибка редактирования"
    else:
        return render_template('index.html', card=card)

в общем не могу понять как правильно написать html форму для редактирования карточки
логика такая на карточке есть кнопка редактирования я ее нажимаю и перехожу на страницу редактирования карточки
где есть такие же поля как и в добавлении карточки , при их редактировании /написании при кнопке сохранить должно произойти изменение в бд у этой карточки ,но оно не происходит
и как вообще называется процесс связывания обработчика с формой html (ну чтобы можно было работать с бд используя поля на странице ) и где про него можно подробно почитать/посмотреть/послушать а то на flask sqlalchemy описано только обработчики которые для главного файла и нету примеров html
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
@DDV23
Биокибернетик
routing и form handling - это называется.
Не совсем понятно что вы хотите рендерить? Я так понимаю отдельный шаблон для страницы редактирования вы хотите рендерить, а не основной?
return render_template('index.html', card=card) " # тогда используй название придуманного html который будет рендерится при редактирование.

Вместо index.html тогда создайте HTML-шаблон (название придумайте), который будет рендерится при редактировании карточки.

Вот пример body под вашу задачу. Остальное сами осилите.
<body>
    <h1>Редактирование карточки</h1>
    <form action="{{ url_for('upd_card', id=card.id) }}" method="POST">
        <label for="name">Название:</label>
        <input type="text" id="name" name="name" value="{{ card.name }}" required><br><br>

        <label for="text">Текст:</label>
        <textarea id="text" name="text" required>{{ card.text }}</textarea><br><br>

        <input type="submit" value="Сохранить">
    </form>
</body>


На index.html где у Вас карточки установите кнопки для каждой карточки
<a href="{{ url_for('upd_card', id=card.id) }}">Редактировать</a>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы