如何将数据从 Flask 表单(模态内部)提交到 SQL 数据库?

问题描述 投票:0回答:1

我对 Flask 还很陌生,正在努力将数据从表单传输到 SQL 数据库。该表单位于模式内,可以完美运行,并且在提交表单后将重定向回主页。但是,表单中的数据不会传输到我与该项目关联的 SQL 数据库。我确信我错过了一些非常简单的东西,我们将不胜感激!如果需要更多代码屏幕截图,请告诉我。

用于注册模式的 HTML 模板

<div class="modal fade" id="registerModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title" id="registerModalLabel">Register</h4>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <form method="POST" action="" novalidate>
                    {{ registration_form.hidden_tag() }}
                    <div class="mb-2">
                        {{ registration_form.employee_id.label(class="form-label") }}
                        {{ registration_form.employee_id(class="form-control") }}
                        {% for error in registration_form.employee_id.errors %}
                            <span style="color: red;">[{{ error }}]</span>
                    </div>
                    <div class="mb-2">
                        {{ registration_form.email.label(class="form-label") }}
                        {{ registration_form.email(class="form-control") }}
                        {% for error in registration_form.email.errors %}
                            <span style="color: red;">[{{ error }}]</span>
                    </div>
                    <div class="mb-2">
                        {{ registration_form.password.label(class="form-label") }}
                        {{ registration_form.password(class="form-control") }}
                        {% for error in registration_form.password.errors %}
                            <span style="color: red;">[{{ error }}]</span>
                    </div>
                    <div class="mb-2">
                        {{ registration_form.confirm_password.label(class="form-label") }}
                        {{ registration_form.confirm_password(class="form-control") }}
                        {% for error in registration_form.confirm_password.errors %}
                            <span style="color: red;">[{{ error }}]</span>
                    </div>
                    <div class="mb-2">
                        {{ registration_form.submit(class="btn btn-primary") }}
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

表单数据发送到的索引路由功能

@app.route('/index', methods=['GET', 'POST'])
def index():
    if current_user.is_authenticated:
        return redirect(url_for('index'))

    registration_form = RegistrationForm()
    login_form = LoginForm()

    if registration_form.validate_on_submit():

        employee_id = registration_form.employee_id.data
        email = registration_form.email.data
        password = registration_form.password.data

        # Check if employee ID or email already exists
        existing_employee_id = Employee.query.filter_by(employee_id=employee_id).first()
        existing_email = Employee.query.filter_by(email=email).first()

        if existing_employee_id:
            flash('This ID is already in use.', 'danger')
        elif existing_email:
            flash('This email is already registered.', 'danger')
        else:

            new_employee = Employee(
                employee_id=employee_id,
                email=email,
                password_hash=generate_password_hash(password, salt_length=32)
            )
            print(new_employee)
            db.session.add(new_employee)
            try:
                db.session.commit()
                flash(f'Registration successful for employee {employee_id}.', 'success')
                return redirect(url_for('index'))
            except:
                db.session.rollback()
                flash(f'Failed to register user', 'danger')

    return render_template('index.html', registration_form=registration_form, login_form=login_form)

我希望将模态表单中的数据提交到我的 SQL 数据库。表单完成并关闭,但数据尚未传输。

flask flask-sqlalchemy flask-wtforms
1个回答
0
投票
  1. 表单操作 URL:确保表单的操作属性指向 Flask 应用程序中处理表单提交的正确路径。
  2. CSRF 保护:如果您使用 Flask-WTF,请确保在表单中包含 CSRF 令牌,这通常通过 {{ form.hidden_tag() }} 完成。
  3. 表单验证:验证表单是否已正确验证。如果 form.validate_on_submit() 不为 True,则可能无法处理表单。
  4. 数据库提交:确保使用 db.session.add() 和 db.session.commit() 将新数据添加并提交到数据库。检查提交期间是否有任何异常,以优雅地处理错误。
  5. 模型配置:仔细检查您的数据库模型是否与您的表单字段匹配,并且您的 SQLAlchemy 设置是否正确。
  6. 调试:使用打印语句或日志记录来跟踪从表单提交到数据库插入的数据流。这将有助于确定哪里可能出了问题。
  7. 表单提交测试:确保表单提交确实触发了处理数据的路由。您可以通过添加调试输出或检查表单数据是否到达服务器端代码来测试这一点。
  8. 数据库连接:验证您的数据库连接是否配置正确并且连接到数据库没有问题。

通过执行这些步骤,您应该能够排除故障并修复将表单数据保存到 SQL 数据库的问题。如果您遇到特定错误或需要进一步帮助,请随时询问!

© www.soinside.com 2019 - 2024. All rights reserved.