Как вернуть значение из form?

Всем здравствуйте, очень нужна помощь!
У меня есть код с базой данных на Flask + SQLAlchemy. Так же есть HTML. Все операции чтобы внести в базу данных значения через форму я сделала. Ниже привожу коды:

from flask import Flask, render_template, request, redirect
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydb.db'

db = SQLAlchemy(app)


class Subject(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    names = db.Column(db.String(100))
    place = db.Column(db.Integer)
    total = db.Column(db.Integer)
    power = db.Column(db.String(50))

@app.route('/', methods=['GET', 'POST'])
def concrete():
    if request.method == 'GET':

        return render_template('index.html')

# /subj если подключать то можно дополнять БД.
@app.route('/subj', methods=['GET', 'POST'])
def get():
    if request.method == 'GET':
        subjects = Subject.query.all()
        user = Subject(names='', place='', total='', power='')
        return render_template('subj.html', subjects=subjects, user=user)

    else:
        names = request.form['names']
        place = request.form['place']
        total = request.form['total']
        power = request.form['power']
        newSubject = Subject(names=names, place=place,
                             total=total, power=power)
        db.session.add(newSubject)
        db.session.commit()
        return redirect('/subj')

if __name__ == '__main__':
    app.run(debug=True)


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="look.css">

    <title>Калькулятор баллов</title>
</head>

<body>
    <div class="header">
        <h2>Калькулятор баллов</h2>
    </div>

    <div class="mainer">
        <form action="/" method="POST" target="_blank"></form>
        <p><b>Выберите форму обучения:</b></p>
        <p><input name="forma" type="radio" value={{direc}}> Очная</p>
        <p><input name="forma" type="radio" value={{derec}}> Заочная</p>
        <input type="submit" value="Выбрать" />
        </form>
    </div>

    <div class="list_text">
        <p><b>Какие предметы Вы сдавали по ЕГЭ:</b></p>
    </div>

    <div class="menu_test">

        <form method="POST" action="/" name="menu_test">

            <label for="maths">Математика: </label>
            <input id="math" type="text" name="math" placeholder="100" size="2" required value={{math}}>

            <p><label for="rus">Русский язык: </label>
                <input id="rus" type="text" name="rus" placeholder="100" size="2" required value={{rus}}></p>

            <p><label for="bio">Биология: </label>
                <input id="bio" type="text" name="bio" placeholder="100" size="2" value={{bio}}></p>

            <p><label for="geo">География: </label>
                <input id="geo" type="text" name="geo" placeholder="100" size="2" value={{geo}}></p>

            <label for="phis">Физика: </label>
            <input id="phis" type="text" name="phis" placeholder="100" size="2" value={{phis}}>

            <button class="btn_block" type="submit">Показать доступные направления</button>

        </form>

    </div>

</body>

</html>


Вот вроде бы все есть, но я не могу:
1. Достать значения из формы, нужно введенные числа достать и сложить, чтобы построить запрос. Стоит ли создавать еще одну базу данных для пользователя который их будет вводить или можно как-то проще это сделать?
2. Как составить такой запрос: нужно суммировать значения чисел введенных в предметы и сравнить сумму этих чисел, и выбранное поле по радио кнопке с уже имеющимися значениями в базе данных( там хранятся в строках численные значения и выбор радио кнопки как "очное", так и "заочное")
  • Вопрос задан
  • 1063 просмотра
Решения вопроса 1
@iddqda
network engineer, netdevops
Ваш код на фласке не имеет ничего общего с формами в html
посмотрите может Вы файлы перепутали

Если Вы используете метод request.form
то ключ в методе и в форме должны совпадать

т.е. для
name = request.form["username"]

в html форме должен быть такой input:
<input type="text" name = "username" blablabla >
Надеюсь понятно, что ключем здесь является username
А ваши ключи в коде и форме не совпадают.

Кроме того, для обработки и валидации html forms в Flask-е принято использовать WTF-Forms.
По ссылке про него очень подробно и доходчиво: https://habr.com/en/post/346342/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы