Данные не попадают в базу данных в приложении Flask - PullRequest
1 голос
/ 01 октября 2019

Я делаю приложение Flask. Там все работает нормально, но возникает проблема, когда форма пытается вставить значения в базу данных. Я отладил код и увидел, что request.method == 'POST' в add_warehouse() не срабатывает.

aap.py

# Show Warehouse stocks
@app.route('/dashboard/warehouse', methods=['POST','GET'])
@is_logged_in
def warehouse():
    form = Add_Warehouse(request.form)
    cur = mysql.connection.cursor()
    result = cur.execute('SELECT * from company_warehouse')
    data = cur.fetchall()
    if result>0:
        return render_template('warehouse.html', stocks=data, form=form)
    else:
        return render_template('warehouse.html',msg='Stock Empty', form=form)
    cur.close()

# Add Warehouse Stocks
class Add_Warehouse(Form):
    product_name = StringField('Name',[validators.Length(min=5,max=20), validators.DataRequired()])
    product_qty = IntegerField('Quantity',[validators.DataRequired()])
    product_price = DecimalField('Price',[validators.DataRequired()])

@app.route('/add_warehouse',methods=['POST','GET'])
@is_logged_in
def add_warehouse():
    form = Add_Warehouse(request.form)
    if request.method == 'POST' and form.validate():
        product_name = form.product_name.data
        product_qty = form.product_qty.data
        product_price = form.product_price.data
        app.logger.info(product_name,product_qty,product_price)
        cur = mysql.connection.cursor()
        cur.execute('INSERT INTO company_warehouse(PRODUCT_NAME,QTY,PRICE_PER_UNIT) VALUES(%s,%s,%s)',(product_name,product_qty,product_price))
        mysql.connection.commit()
        flash('Product Added !!','success')
        return redirect(url_for('warehouse'))
        cur.close()

warehouse.html

{% from 'includes/_formhelpers.html' import render_field %}
        {% include 'includes/_messages.html' %}
        <form method="POST" action="">
        <div class="modal-body">
            <div class="form-group">{{render_field(form.product_name, class_="form-control")}}</div>
            <div class="form-group">{{render_field(form.product_qty, class_="form-control")}}</div>
            <div class="form-group">{{render_field(form.product_price, class_="form-control")}}</div>
        </div>
        <div class="modal-footer">
            <button type="submit" class="btn btn-primary">Add Product</button>
            <button type="reset" class="btn btn-danger">Reset</button>
        </div>
      </form>

Это шаблон для приведенного выше кода. Я пытался писать раньше, так как думал, что это создает проблему action = "{{url_for('add_warehouse')}}", но ничего не изменилось.

1 Ответ

0 голосов
/ 01 октября 2019

Я думаю, это потому, что вам не хватает атрибута action в form.

Попробуйте этот <form method="POST" action="/add_warehouse">

...