Как добавить значение в базу данных в Flask без использования формы? - PullRequest
0 голосов
/ 08 апреля 2020

Я новичок в Flask и продвинутой веб-разработке, так что go легко для меня. Я впервые использую Flask, и я все еще изучаю его. Я не уверен, что задаю правильный вопрос, поэтому я объясню, что я имею в виду.

С помощью учебных пособий я выяснил, как передавать данные и информацию с помощью элемента HTML <form> в таких вещах, как регистрация / регистрация пользователя и переключение страниц, например, на индекс.

В моем случае я создаю сайт таймера решения для быстрого решения кубика Рубика. Я закончил сайт с чистым HTML / CSS / JavaScript, который, конечно, только сохраняет текущий сеанс и не экономит время в базе данных. Теперь я хочу преобразовать его в Flask веб-сайт.

Что я хотел бы знать, и извините, если это действительно широкий вопрос, как получить мою функцию JavaScript, которая обрабатывает окончание решения и первоначально просто сохранил его в локальном массиве, теперь сохраните его в базе данных SQL. Я использую SQLite в разработке, прежде чем переключиться на PostgreSQL или MySQL позже на своем веб-сервере.

Я уточню подробнее, если вы захотите. Заранее спасибо.

РЕДАКТИРОВАТЬ Вот что я пытался сделать, с информацией из разных уроков:

(я удалил все, что не относится)

JavaScript

  //...
  var xhr = new XMLHttpRequest();
  xhr.open("POST", '/bgprc', true);
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.send(JSON.stringify({ time: time }));
  //...

time - это переменная, создаваемая после того, как решение выполнено по времени, и это то, что я пытаюсь отправить в базу данных.

models.py

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    #...
    times = db.relationship('SolveTimes', backref='user', lazy='dynamic')
    #...
    def load_times(self):
        times = SolveTimes.query.all()
        return times

class SolveTimes(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    times = db.Column(db.Float, index=True, unique=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

rout.py

@app.route('/')
@app.route('/index')
@login_required
def index():
    times = current_user.load_times()
    return render_template('index.html', times=times)
#...
@app.route('/bgprc')
def background_process():
    try:
        time = request.args.get('time',  0, type=str)
        t = SolveTimes(time, user=current_user)
        db.session.add(t)
        db.session.commit()
    except Exception as e:
        return str(e)

И, наконец, индекс . html Я пытаюсь загрузить время в таблицу, основываясь на том, что было передано в rout.py

index. html

...
<ul id="solveTimes">
  {% for time in times %}
    <li>{{ time }}</li>
  {% endfor %}
</ul>
...

1 Ответ

0 голосов
/ 08 апреля 2020

Нет необходимости писать HTTP-запрос в JavaScript. Проверьте Flask -WTF , пакет, который обрабатывает формы в Flask. Вы будете часто использовать его при разработке в Flask. В этом уроке объясняется, как правильно его использовать.

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