私はかなりの間、この問題を抱えています。送信されたフォームのデータを含むSQLiteデータベースに行を追加しようとしています。ただし、データベースにデータが追加されていないようです。奇妙なのは、データベースに手動でデータを追加する機能(詳細は後述)を実行するとうまくいくことです。 :/どんな助けでも大歓迎です!FlaskとFlask-WTFを使用してSQLiteデータベースに行を追加できません
私は以下の4つのコードセクション、サインフォームの作成、フラスコのルーティング機能、データベースの挿入方法、最後にフォームのHTMLを持っています。
私は、ルーティング・ファイル内の私のサインアップ()関数である、ということに続き
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email, Length
class SignupForm(FlaskForm):
username = StringField("Username", validators=[DataRequired("Username required!")])
first_name = StringField("First Name", validators=[DataRequired("First name required!")])
last_name = StringField("Last Name", validators=[DataRequired("Last name required!")])
email = StringField("E-Mail", validators=[DataRequired("E-mail required!"), Email("Please enter a valid e-mail!")])
password = PasswordField("Password", validators=[DataRequired("Password required!"), Length(min=5, message=("Password must be at least 5 characters."))])
submit = SubmitField("Sign up!")
、次のようにフラスコ-WTFを使用して、私のSignupFormを作成します。
from flask import Flask, render_template, request, session, redirect, url_for, flash
from forms import SignupForm
import database_methods
app = Flask(__name__)
app.secret_key = "development key"
@app.route('/signup', methods=["GET", "POST"])
def signup():
""" Signs a user up for an account so that they may log in """
form = SignupForm()
if request.method == 'POST':
if not form.validate(): # ensure that a user enters all fields correctly
return render_template('signup.html', form=form)
else:
username = form.username.data
first_name = form.first_name.data
last_name = form.last_name.data
email = form.email.data
password = form.password.data
database_methods.insert_row_in_db(username, first_name, last_name, email, password)
return "All right! Signed up!"
elif request.method == 'GET':
return render_template('signup.html', form=form)
最後に、ユーザーがフォームに入力したデータを挿入する実際の方法があります。
import sqlite3
import os
from werkzeug.security import generate_password_hash
from uuid import uuid4
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_PATH = os.path.join(BASE_DIR, "chat.sqlite")
def insert_row_in_db(username, firstname, lastname, email, password):
""" Creates a row in chat.sqlite's users table """
uid = uuid4().hex
pwd_hash = generate_password_hash(password)
login_time = set_lastlogin(uid)
row_data = (uid, username, firstname, lastname, email, pwd_hash, login_time, True)
with sqlite3.connect(DB_PATH) as conn:
c = conn.cursor()
c.execute('''INSERT INTO users (uid, username, firstname, lastname, email, passwordhash,
lastlogin, loggedin) VALUES (?, ?, ?, ?, ?, ?, ?, ?);''', row_data)
参考のためにHTMLファイルが必要な場合は、ここにあります。
私は数時間前からグーグルグーグルであり、多くのことを無駄にしてきました。あなたが提供できるどんな助けも大いに感謝されるでしょう!
ありがとうございます! :)
エラーが発生するか、insert_row_in_db()が正常に返されますか? – Vib
私は間違いをしない。それは静かに失敗しています。 insert_row_in_db()を手動で実行すると、すべて正常に動作し、行がデータベースに追加されます。 – agaidis
また、signup()では、username、first_name、last_nameなどの書式設定された文字列を返すだけで、これらの要素はWebページ上で完全に正常に表示されます。 – agaidis