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>
问题分析与解决方法
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>
- 修复方法:删除第二个
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'))
- 优化方法:在路由函数中判断请求方法,仅在POST请求时处理表单提交,GET请求则重定向回表单页面:
额外检查项:确保MongoDB服务已正常启动,
127.0.0.1:27017可正常访问,避免因数据库连接问题引发其他异常。
内容的提问来源于stack exchange,提问作者Turaga Harini
相关产品推荐
相关产品推荐

