You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask连接MongoDB时出现405 Method Not Allowed错误求助

Flask表单提交出现405 Method Not Allowed错误排查与解决

我正在学习Flask,尝试将其与MongoDB数据库连接,但提交表单时出现405 Method Not Allowed错误,无法定位问题。以下是我的代码:

app1.py 代码

from flask import *
from pymongo import MongoClient


app = Flask(__name__)

client = MongoClient("mongodb://127.0.0.1:27017")

db = client['STUDENT']

studentdetails = db.DETAILS



@app.route("/crudexample")
def sample10():
    return render_template('studentform.html')


@app.route("/success", methods=['GET', 'POST'])
def onsubmit():
    fname = request.form.get('fn')
    lname = request.form.get('ln')
    rollno = request.form.get('regno')
    mob = request.form.get('mb')

    a = {"First Name": fname, "Last Name": lname,
         "Regd Number": rollno, "Mobile Number": mob}

    studentdetails.insert_one(a)

    return "Successfully Inserted"


if __name__ == "__main__":
    app.run(debug=True)

studentform.html 代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form method="POST" action="/success">
            First Name: <input type="text" name="fn"><br>
            Last Name: <input type="text" name="ln"><br>
            Regd. No:<input type="number" name="regno"><br>
            Mobile Number: <input type="number" name="mb"><br>
            <br>
            <input type="submit" value="Click Here">
       </form>

</form>
</body>
</html>

问题分析与解决方法

  1. HTML表单结构错误:你的HTML代码中存在多余的</form>闭合标签,这会导致浏览器解析表单时出现异常,无法正确处理提交请求,进而引发405错误。

    • 修复方法:删除第二个</form>标签,确保表单结构唯一且正确。修复后的HTML代码如下:
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
      
      <form method="POST" action="/success">
                  First Name: <input type="text" name="fn"><br>
                  Last Name: <input type="text" name="ln"><br>
                  Regd. No:<input type="number" name="regno"><br>
                  Mobile Number: <input type="number" name="mb"><br>
                  <br>
                  <input type="submit" value="Click Here">
             </form>
      </body>
      </html>
      
  2. Flask路由逻辑优化:当前/success路由同时支持GET和POST方法,但代码中没有区分请求类型。如果用户直接通过GET访问/success,会尝试执行数据库插入操作,导致错误。

    • 优化方法:在路由函数中判断请求方法,仅在POST请求时处理表单提交,GET请求则重定向回表单页面:
      @app.route("/success", methods=['GET', 'POST'])
      def onsubmit():
          if request.method == 'POST':
              fname = request.form.get('fn')
              lname = request.form.get('ln')
              rollno = request.form.get('regno')
              mob = request.form.get('mb')
      
              a = {"First Name": fname, "Last Name": lname,
                   "Regd Number": rollno, "Mobile Number": mob}
      
              studentdetails.insert_one(a)
      
              return "Successfully Inserted"
          # GET请求时重定向回表单页面
          return redirect(url_for('sample10'))
      
  3. 额外检查项:确保MongoDB服务已正常启动,127.0.0.1:27017可正常访问,避免因数据库连接问题引发其他异常。

内容的提问来源于stack exchange,提问作者Turaga Harini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:47:13