Request.form.get() 返回 None

Request.form.get() returns None

提问人:Saurias 提问时间:10/23/2023 最后编辑:Péter SzilvásiSaurias 更新时间:10/24/2023 访问量:54

问:

我正在尝试使用 Python 和 Flask 建立一个预算跟踪器网站,您可以在其中跟踪您的花钱方式。我包含了一个部分,您可以在其中选择支出类型,但是当我尝试使用 Flask 检索用户选择时,返回.request.form.get()None

我还尝试将所选变量存储在会话中,但它不起作用,我尝试了,但它给了我 400 错误。request.form\["selected"\]

有人知道我如何解决这个问题吗?

这是我的HTML:

<form action="/" method="post" enctype="multipart/form-data">
  <h3 class="h3">Your expenses</h3>
  <div class="top">
    <input type="number" class="form-control mx-auto w-auto" placeholder="$0.00" aria-describedby="button-addon2">
  </div>
  <!-- Button trigger modal -->
  <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">Add Expense</button>

  <!-- Modal -->
  <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <h1 class="modal-title fs-5" id="exampleModalLabel">Category: </h1>
          <div>
            <select id="category-select" class="form-select" aria-label="Default select example">
              <option id="selected" name="selected" selected>Select type</option>
              <option id="home" name="home" value="0">Home</option>
              <option id="loans" name="loans" value="1">Loans</option>
              <option id="entertainment" name="entertainment" value="2">Entertainment</option>
              <option id="transportation" name="transportation" value="3">Transportation</option>
              <option id="other" name="other" value="5">Other</option </div>
            </select>
          </div>
          <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
        </div>
        <div class="modal-body">
          <input type="number" id="amount" name="amount" class="form-control" placeholder="$0.00" aria-describedby="button-addon2" min="1">
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
          <button type="submit" id="addBtn" class="btn btn-primary">Add money</button>
        </div>
      </div>
    </div>
  </div>
</form>

以下是我的 Python 代码:

@app.route("/", methods=["GET", "POST"])
@login_required
def index():
   
    if request.method == "GET":
        return render_template("index.html")
    else:
        # Get data from user input

        user_id = session["user_id"]
        date = datetime.datetime.now()

        # Check user cash
        usr_cash = db.execute("SELECT cash FROM users WHERE id = ?", user_id)[0]["cash"]

        # Check expense amount
        amount = int(request.form.get("amount"))

        # Check if user has enough money for expense
        if usr_cash < amount:
            return apology("Not enough money for this expense! Try adding more income")

        # Update user cash after expense
        updt_cash = usr_cash - amount

        # Update database

        db.execute("UPDATE users SET cash = ? WHERE id = ?", updt_cash, user_id)

        # Create transactions list
        selected = request.form.get("selected")
        
        if selected == "Home":
            db.execute("INSERT INTO category (home, user_id, date) VALUES (?, ?, ?)", amount, user_id, date)
        elif selected == "Loans":
            db.execute("INSERT INTO category (loans, user_id, date) VALUES (?, ?, ?)", amount, user_id, date)
        elif selected == "Entertainment":
            db.execute("INSERT INTO category (entertainment, user_id, date) VALUES (?, ?, ?)", amount, user_id, date)
        elif selected == "Transportation":
            db.execute("INSERT INTO category (transportation, user_id, date) VALUES (?, ?, ?)", amount, user_id, date)
        elif selected == "Other":
            db.execute("INSERT INTO category (other, user_id, date) VALUES (?, ?, ?)", amount, user_id, date)

        print(selected)

        return render_template("index.html")
python html css 函数 烧瓶

评论

0赞 Barmar 10/24/2023
我认为这无关紧要,但是当您不上传文件时,没有必要使用。enctype="multipart/form-data"
0赞 Saurias 10/24/2023
是的,我删除了它,但它仍然返回 None :(
0赞 Barmar 10/24/2023
DevTools 的“网络”选项卡是否显示正在发送所有表单参数?显示什么?print(request.form)
0赞 Saurias 10/24/2023
我刚刚在 Flask 文档中读到,当使用 request.form[“..”] 时,如果参数为 None,它将触发错误 400。print(request.form) 完全显示:无
0赞 Barmar 10/24/2023
request.form不应该是,它应该是字典,可能是空的。None

答:

0赞 vintastic 10/24/2023 #1

你说错了。select

你只需要在你的.摆脱和 .valueoptionsidname

此外,flask 正在为您的领域寻找名称。在此添加一个:

 <select id="category-select"