我正在尝试将用户注册到sqlite数据库中。 我的表单包含一个带有数值的隐藏字段。
当我处理表单时,它返回以下错误: “浏览器(或代理)发送了此服务器无法理解的请求。”
这显然意味着变量未传递给函数。
我怎么能解决这个问题? 我已经尝试在发送到函数之前将数据类型更改为后端的int(),我已将字段显示为etcetc。没有任何效果。
有趣的是:当我在后端使用“打印”功能并禁用“User.regUser(电子邮件,用户名,密码,排名)”时,它们的值会显示在控制台中...所以我会假设变量包含我需要传递给函数的信息。
以下是代码:
查看:
@app.route('/register', methods=['GET', 'POST'])
def register():
#if request.method == 'POST':encrypt
email = request.form['email']
username = request.form['username']
password = generate_password_hash(request.form['pass1'])
rank = int(request.form['rank'])
print(email, password, username, rank)
User.regUser(email, username, password, rank)
# db.session.add(User(email, username, password, "50"))
# db.session.commit()
return render_template('register.html')
型号:
from pjctBB.views import db
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String, nullable=False)
username = db.Column(db.String, nullable=False)
password = db.Column(db.String, nullable=False)
rank = db.Column(db.Integer, nullable=False)
def __init__(self, email, username, password, rank):
self.email = email
self.username = username
self.password = password
self.rank = rank
def regUser(self, email, username, password, rank):
db.session.add(User(email, username, password, rank))
db.session.commit()
非常感谢!
答案 0 :(得分:0)
根据我收集的内容,您尝试从表单中请求而不先呈现它,这意味着没有表单可以获取或发布。试试这个:
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.mthod == 'GET':
return render_template('register.html')
elif request.method == 'POST':
email = request.form['email']
username = request.form['username']
password = generate_password_hash(request.form['pass1'])
rank = int(request.form['rank'])
print(email, password, username, rank)
User.regUser(email, username, password, rank)
#db.session.add(User(email, username, password, "50"))
#db.session.commit()
return render_template('register.html')
假设register.html存在。
答案 1 :(得分:0)
感谢大家对我提问的兴趣。它让我思考了一下:)
我对SO的问题略有不同,2位用户给了我一个解决方案。 我发现有人遇到了与我类似的问题,请查看此主题以寻找可能的解决方案: