【问题标题】:How to add a value to a database in Flask without using a form?如何在不使用表单的情况下向 Flask 中的数据库添加值?
【发布时间】:2020-04-08 21:07:49
【问题描述】:

我是 Flask 和高级 Web 开发的新手,所以请放轻松。这是我第一次使用 Flask,我仍然在掌握它。我不确定我是否在问正确的问题,所以我将解释我的意思。

通过教程,我了解了如何通过使用 HTML <form> 元素来传递数据和信息,例如注册/登录用户以及将页面切换回索引。

就我而言,我正在创建一个求解计时器网站,用于快速求解魔方。我已经用纯 HTML/CSS/JavaScript 完成了这个网站,这当然只保存了当前会话,而不会将时间保存到数据库中。现在我想将其转换为 Flask 网站。

我想知道,很抱歉,如果这真的很广泛,是如何让我的 JavaScript 函数处理求解的结束,最初只是将它保存到本地数组,现在将它保存到 SQL 数据库.在稍后在我的 Web 服务器上切换到 PostgreSQL 或 MySQL 之前,我在开发中使用 SQLite。

如果您愿意,我会详细说明。提前致谢。

编辑 到目前为止,这是我尝试过的,来自不同教程的信息:

(我删除了所有不相关的内容)

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'))

routes.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)

最后在 index.html 中,我尝试根据 routes.py

中传递的内容将时间加载到表格中

index.html

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

【问题讨论】:

    标签: flask flask-sqlalchemy


    【解决方案1】:

    您无需使用 JavaScript 编写 HTTP 请求。查看Flask-WTF,这是一个在 Flask 中处理表单的包。在 Flask 中开发时,您会经常使用它。 This tutorial 很好的解释了如何使用它。

    【讨论】:

    • 感谢您的回复。我已经使用了一点 Flask-WTF,但仅适用于带有 html &lt;form&gt; 元素的东西。我没有在这里使用那些,所以你能推荐一种方法让那个包在我的场景中工作吗?或者,我应该在这里使用&lt;form&gt; 吗?
    • 您可以隐藏表单,如果您不想显示它,请将其样式属性设置为“显示:无”。然后,您可以填充它并使用 JavaScript 提交它。有几种方法可以直接通过 JavaScript 执行此操作,例如 AJAX,但工作量要大得多。 Flask WTF 可靠、安全且易于使用。
    猜你喜欢
    • 2015-12-27
    • 2016-12-15
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多