首页 > 编程问答 >如何使用 Python Flask 将新的咖啡馆(元素)添加到数据库(SQLite)?

如何使用 Python Flask 将新的咖啡馆(元素)添加到数据库(SQLite)?

时间:2024-07-23 05:22:02浏览次数:12  
标签:python sqlite flask

这是我的代码:

@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

相关文章

  • 使用 tkinter 为 python 创建 GUI 时如何解决语法错误?
    我是一名Python初学者,决定使用tkinter制作一个小型GUI,该GUI接受用户(潜在餐馆)的3个输入,然后单击按钮后随机输出其中一家餐馆。我不断收到语法错误,并认为它与我的buttonfunc或调用它的命令有关。此代码尚未包含在GUI上输出餐厅的任何位置。任何帮助将不胜感激#Pyth......
  • 在 python 中打开 gnome 终端立即显示为僵尸
    作为背景,我正在编写一个脚本来训练多个pytorch模型。我有一个训练脚本,我希望能够在gnome终端中作为子进程运行。这样做的主要原因是我可以随时关注训练进度。如果我可能有多个GPU,我想在单独的窗口中多次运行我的训练脚本。为了实现这一点,我一直在使用popen。以下代码用于打......
  • python threading.Condition 的意外行为
    我正在尝试同步多个线程。我期望使用threading.Condition和threading.Barrier时的脚本输出大致相同,但事实并非如此。请解释一下为什么会发生这种情况。一般来说,我需要线程在一个无限循环中执行工作(一些IO操作),但是每个循环都是以主线程的权限开始的,而权限是仅在......
  • Python - 逆透视数据框
    我有一个按日期时间索引的表,每个日期时间都有多个层(中心和交货间隔):日期时间中心交货间隔结算点价格2024-01-0101:00:00休斯顿中心1......
  • 试图理解这个错误:致命的Python错误:PyEval_RestoreThread:该函数必须在持有GIL的情况下
    我有一个小型tkinter应用程序,我一直在其中实现最小的“拖放”,主要作为学习实验。我真正关心的是删除文件的文件路径。一切实际上都工作正常,直到我尝试在拖放后打包标签小部件。下面的最小工作示例。有问题的行会用注释指出。我通常不会在调试方面遇到太多麻烦,但我只是不知......
  • 如何使代码格式再次适用于 Python(Mac 上的 Visual Studio Code)?
    在Mac上,Option+Shift+F现在会显示“没有安装用于‘python’文件的格式化程序”。消息框:我尝试安装这个插件,但没有看到这种情况的变化:我已经为Python安装了这两个插件:但是正如@starball提到的,它可能已经减少了支持现在。......
  • 无法在 python 中安装 pip install expliot - bluepy 的 Building Wheel (pyproject.t
    在此处输入图像描述当我尝试在Windows计算机中通过cmd安装pipinstallexpliot包时,我收到2个错误名称×Buildingwheelforbluepy(pyproject.toml)didnotrunsuccessfully.│exitcode:1**AND**opt=self.warn_dash_deprecation......
  • python 用单斜杠-反斜杠替换url字符串中的双斜杠
    我的URL包含错误的双斜杠(“//”),我需要将其转换为单斜杠。不用说,我想保持“https:”后面的双斜杠不变。可以在字符串中进行此更改的最短Python代码是什么?我一直在尝试使用re.sub,带有冒号否定的正则表达式(即,[^:](//)),但它想要替换整个匹配项(包括前面......
  • 如何使用 Selenium Python 搜索 Excel 文件中的文本
    我有一些数据在Excel文件中。我想要转到Excel文件,然后搜索文本(取自网站表),然后获取该行的所有数据,这些数据将用于在浏览器中填充表格。示例:我希望selenium搜索ST0003然后获取名称,该学生ID的父亲姓名,以便我可以在大学网站中填写此信息。我想我会从网站......
  • Python 套接字请求在很多情况下都会失败
    我在python中尝试了超过5种不同的方法,尽管人们说它在其他论坛上有效,但所有这些方法都惨遭失败。importsocketmessage="test"clientsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)clientsocket.connect(('1.1.1.1',80))clientsocket.send(mes......