首页 > 解决方案 > 如何修复此错误 Flask Boolean Form?

问题描述

所以,我尝试在 db 中输入布尔类型,但它不起作用,总是出错。但是除了布尔值之外,其他列都可以正常工作。其他形式正在工作,我建议在 Flask 中出现错误。

HTML
....
**<input type="checkbox" name="S">
<input type="checkbox" name="M">
<input type="checkbox" name="L">
<input type="checkbox" name="XL">
<input type="checkbox" name="XXL">**
.....

烧瓶

from flask import Flask, render_template, request, redirect
from flask_sqlalchemy import SQLAlchemy
from cloudipsp import Api, Checkout

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///shop.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
db = SQLAlchemy(app)

class Item(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(36), nullable=False)
    newPrice = db.Column(db.Integer, nullable=False)
    oldPrice = db.Column(db.Integer, nullable=True)
    star = db.Column(db.Integer, nullable=True)
    colors = db.Column(db.Integer, nullable=False)
    S = db.Column(db.Boolean, nullable=True, default=False)
    M = db.Column(db.Boolean, nullable=True, default=False)
    L = db.Column(db.Boolean, nullable=True, default=False)
    XL = db.Column(db.Boolean, nullable=True, default=False)
    XXL = db.Column(db.Boolean, nullable=True, default=False)

    def __repr__(self):
        return str(self.id)

@app.route('/create', methods=['POST', 'GET'])
def create():
    if request.method == "POST":
        title = request.form['title']
        newPrice = request.form['newPrice']
        oldPrice = request.form['oldPrice']
        star = request.form['star']
        colors = request.form['colors']
        S = request.form['S']
        M = request.form['M']
        L = request.form['L']
        XL = request.form['XL']
        XXL = request.form['XXL']
        
        item = Item(title=title, newPrice=newPrice, oldPrice=oldPrice, star=star, colors=colors, S=S, M=M, L=L, XL=XL, XXL=XXL)
        
        try:
            db.session.add(item)
            db.session.commit()
            return redirect('/shop')
        except:
            return "Error Pls Enter Correct Dates"
    else:
        return render_template('create/index.html')

它总是返回“错误请输入正确的日期”(尝试...除了...)。当我不触摸复选框(False)时,丢弃错误:“werkzeug.exceptions.BadRequestKeyError werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent an request that this server could not understand. KeyError: 'M' "

标签: htmldatabaseflaskbooleanflask-sqlalchemy

解决方案


from flask import Flask, render_template, request, redirect, url_for,jsonify
import sqlite3
from flask_sqlalchemy import SQLAlchemy
from cloudipsp import Api, Checkout

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///shop.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
db = SQLAlchemy(app)



class Item(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(36), nullable=False)
    newPrice = db.Column(db.Integer, nullable=False)
    oldPrice = db.Column(db.Integer, nullable=True)
    star = db.Column(db.Integer, nullable=True)
    colors = db.Column(db.Integer, nullable=False)
    S = db.Column(db.Boolean, nullable=True, default=False)
    M = db.Column(db.Boolean, nullable=True, default=False)
    L = db.Column(db.Boolean, nullable=True, default=False)
    XL = db.Column(db.Boolean, nullable=True, default=False)
    XXL = db.Column(db.Boolean, nullable=True, default=False)
    db.create_all
    def __repr__(self):
        return str(self.id)
        
@app.route('/create', methods=['POST', 'GET'])
def create():
    if request.method == 'GET':
        return render_template('create/index.html')
    else:
        title = request.form.get('title')
        newPrice = request.form.get('newPrice')
        oldPrice = request.form.get('oldPrice')
        star = request.form.get('star')
        colors = request.form.get('colors')
        S = request.form.get('S')
        M = request.form.get('M')
        L = request.form.get('L')
        XL = request.form.get('XL')
        XXL = request.form.get('XXL')
        
        item = Item(title=title, newPrice=newPrice, oldPrice=oldPrice, star=star, colors=colors, S=S, M=M, L=L, XL=XL, XXL=XXL)


    try:
        db.session.add(item)
        db.session.commit()
        db.session.close()
        return redirect(url_for('shop'))
    except:
        return "Error Pls Enter Correct Data"

if __name__ == '__main__': app.run()

你有在模板目录中创建文件夹吗?

如果问题仍然存在,请检查 id 可能它不会增加并且它是空的。

如果我可以在 GitHub 上看到代码,那会很有帮助


推荐阅读