我用 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));
它也不起作用
装饰器和函数之间不应该有空间。
import sqlite3
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/subpaginas/database/machine_reg', methods = ['POST'])
def registrar_maquina():
.....