这是我的代码:
@app.route("/add", methods=["POST"])
def post_new_cafe():
new_cafe = Cafe(
name=request.form.get("name"),
map_url=request.form.get("map_url"),
img_url=request.form.get("img_url"),
location=request.form.get("loc"),
has_sockets=bool(request.form.get("sockets")),
has_toilet=bool(request.form.get("toilet")),
has_wifi=bool(request.form.get("wifi")),
can_take_calls=bool(request.form.get("calls")),
seats=request.form.get("seats"),
coffee_price=request.form.get("coffee_price"),
)
db.session.add(new_cafe)
db.session.commit()
return jsonify(response={"success": "Successfully added the new cafe."})
我在 URL 中遇到的错误 http://127.0.0.1:5000/add 是
不允许的方法
该方法不允许请求的 URL。
我应该怎样做才能使表单正常工作?
该错误信息 "Method Not Allowed" 表明你正尝试使用 POST 请求以外的 HTTP 方法访问
/add
路由。 虽然你的 Flask 代码定义了
/add
路由以处理 POST 请求,但你可能正在浏览器中直接访问该 URL,这默认为 GET 请求。
为了解决这个问题,你需要创建一个 HTML 表单,该表单发送 POST 请求到
/add
路由。以下是你可以添加到 Flask 应用中的示例 HTML 表单:
<!DOCTYPE html>
<html>
<head>
<title>添加新咖啡馆</title>
</head>
<body>
<h1>添加新咖啡馆</h1>
<form method="POST" action="/add">
<label for="name">名称:</label><br>
<input type="text" id="name" name="name" required><br><br>
<label for="map_url">地图 URL:</label><br>
<input type="url" id="map_url" name="map_url" required><br><br>
<label for="img_url">图片 URL:</label><br>
<input type="url" id="img_url" name="img_url" required><br><br>
<label for="loc">地址:</label><br>
<input type="text" id="loc" name="loc" required><br><br>
<input type="checkbox" id="sockets" name="sockets" value="True">
<label for="sockets">有插座</label><br>
<input type="checkbox" id="toilet" name="toilet" value="True">
<label for="toilet">有洗手间</label><br>
<input type="checkbox" id="wifi" name="wifi" value="True">
<label for="wifi">有 WiFi</label><br>
<input type="checkbox" id="calls" name="calls" value="True">
<label for="calls">可以打电话</label><br><br>
<label for="seats">座位数:</label><br>
<input type="number" id="seats" name="seats" required><br><br>
<label for="coffee_price">咖啡价格:</label><br>
<input type="number" id="coffee_price" name="coffee_price" step="0.01" required><br><br>
<input type="submit" value="添加咖啡馆">
</form>
</body>
</html>
当你在浏览器中访问此 HTML 页面并提交表单时,它将向
/add
路由发送 POST 请求,其中包含表单数据。然后,你的 Flask 代码将能够处理该请求并将新咖啡馆添加到数据库中。
请确保:
-
将
Cafe
替换为你的实际咖啡馆模型类。 - 根据你的应用程序的路由和模板结构调整 URL 和表单操作。
-
在你的
app.py
中添加一个新路由以呈现此 HTML 文件。例如:
@app.route("/add")
def add_cafe_form():
return render_template("add_cafe.html")
通过使用此 HTML 表单,你将能够通过 POST 请求发送数据,从而使你的 Flask 代码按预期工作。
标签:python,sqlite,flask From: 78780677