我正在构建一个简单的 Flask python 网站,基本思想是用户每次按下按钮都会收到 1 分。有一个简单的登录系统,稍后我将为其添加密码。
目前,当用户按下按钮时,我无法更改 SQLAlchemy 数据库中 score 列的值。这是代码:
from flask import Flask, redirect, url_for, render_template, request, session, flash
from datetime import timedelta
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.secret_key = "nicetry"
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.sqlite3'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.permanent_session_lifetime = timedelta(minutes=5)
db = SQLAlchemy(app)
class users(db.Model):
_id = db.Column("id", db.Integer, primary_key=True)
name = db.Column(db.String(100))
email = db.Column(db.String(100))
score = db.Column(db.Integer)
def __init__(self, name, email, score):
self.name = name
self.email = email
self.score = score
@app.route("/clicker")
def clicker():
return render_template("clicker.html") #This opens a page with a button, when the button is clicked it runs buttonclick() below:
@app.route('/buttonclick', methods=['POST'])
def buttonclick():
print("button pressed")
# HERE!
return 'Success'
未显示网站的其余部分,包括用户输入用户名和电子邮件地址的登录过程,以及非常基本的 HTML/CSS。
我不确定如何格式化 UPDATE 代码行(在上面的块中用 # HERE! 标记)。大多数数据库内容完全来自教程,我仍在进一步了解它的工作原理。每次按下按钮(buttonclick())时,如何将用户的分数更改为一?
任何帮助表示赞赏!
要更新用户分数,首先需要使用user_id调用api。然后通过user_id找到用户并更新分数。
@app.route('/buttonclick', methods=['POST'])
def buttonclick():
# you can use in on path ex /<int:user_id>/buttonclick
user_id = request.json.get("user_id")
# find user by id, use with_for_update() to lock query, avoid multi request coming
user = users.query.filter_by(_id=user_id).with_for_update().first()
user.score += 1
db.session.commit()
return 'Success'