如何使用 Python 修复错误“代码 501,消息不支持的方法('POST')”?

问题描述 投票:0回答:1

我用 HTML、CSS 和 JS 制作了一个网页,其中有一个表单必须将数据存储在 SQLite 数据库中,并且我使用 Python(带有 Flask)作为表单和数据库之间的中间 API。问题是,当我通过单击注册按钮注册数据时,在控制台中(因为我使用的是 Python 的本地主机)我收到以下消息: 代码 501,消息不支持的方法('POST') “POST /subpaginas/database/machine_reg HTTP/1.1”501 -

如何解决这个问题?这是我的表单代码,采用 javascript 和 Python 代码

表单html代码:

<div class = "reg_form">
            <form id = "registrationForm" onsubmit="submitForm(); return false;">
                <div class = "row">
                    <div class="col-md-4">
                        <label for="validationDefault01" class="form-label">No. serie</label>
                        <input type="text" class="form-control" id="validationDefault01" required>
                    </div>
                    <div class="col-md-4">
                        <label for="validationDefaultUsername" class="form-label">Ubicación</label>
                    <div class="input-group">
                        <span class="input-group-text" id="inputGroupPrepend2">📍</span>
                        <input type="text" class="form-control" id="validationDefaultUsername" aria-describedby="inputGroupPrepend2" required>
                    </div>
                    </div>
                    <div class="col-md-4">
                        <label for="validationDefault04" class="form-label">Estado</label>
                        <select class="form-select" id="validationDefault04" required>
                            <option selected disabled value="">Elige...</option>
                            <option>Encendido</option>
                            <option>Apagado</option>
                        </select>
                    </div>
                    <p id="registrationMessage" style="display: none;">Se han registrado los datos.</p>
                    <div class="col-12">
                        <button class="btn btn-primary" type="submit">Registrar</button>
                    </div>
                </div>
            </form>

JavaScript 代码:

function submitForm()
{
    var form = document.getElementById('registrationForm');
    var formData = new FormData(form);
    var xhr = new XMLHttpRequest();

    xhr.open("POST", "http://localhost:8000/subpaginas/database/machine_reg");
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.onreadystatechange = function()
    {
        if (xhr.readyState == 4)
        {
            if (xhr.status == 200)
            {
                var registrationMessage = document.getElementById('registrationMessage');
                registrationMessage.style.display = 'block';
                setTimeout(function()
                {
                    registrationMessage.style.display = 'none';
                }, 3000);
            } else
            {
                console.error(xhr.statusText);
            }
        }
    };
    xhr.send(formData);
   /* var jsonData = {};
    formData.forEach(function (value, key) {
        jsonData[key] = value;
    });
    xhr.send(JSON.stringify(jsonData));*/
}

Python代码:

import sqlite3
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/subpaginas/database/machine_reg', methods = ['POST'])

def registrar_maquina():
    #data = request.json
    #data.get

    serial_no = request.form.get('validationDefault01')
    status = request.form.get('validationDefault04')
    location = request.form.get('validationDefaultUsername')

    conn = sqlite3.connect('baseuno.sqlite')
    cursor = conn.cursor()

    cursor.execute(f"INSERT INTO machines (serial_no,status,location) VALUES ({serial_no}, {status}, {location})")
    conn.commit()
    conn.close()

    return jsonify({"message" : "Maquina registrada exitosamente"})

if __name__ == '__main__':
    app.run(debug=True , port=8000)

注意: 表单所在的HTML代码和JS位于同一个文件夹,这是一个子文件夹,因为论坛位于我主页的子页面,Python代码和数据库位于与 HTML 表单位于同一文件夹中的子文件夹

我尝试使用这段代码(在 JavaScript 代码中作为注释找到):

var jsonData = {};
    formData.forEach(function (value, key) {
        jsonData[key] = value;
    });
    xhr.send(JSON.stringify(jsonData));

它也不起作用

javascript python api flask post
1个回答
0
投票

装饰器和函数之间不应该有空间。

import sqlite3
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/subpaginas/database/machine_reg', methods = ['POST'])
def registrar_maquina():
    .....
© www.soinside.com 2019 - 2024. All rights reserved.