我正在创建基本的Flask网站&API。
我想从SQL Server中删除一条记录。我设法解决了创建&更新记录。
我想到了以下内容:
api2.py
import secrets
import pdb
secret = secrets.token_urlsafe(32)
from flask import Flask,render_template,url_for, request, redirect, flash
import pyodbc
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_ENGINE_OPTIONS'] =None
app.config['SESSION_TYPE'] = 'memcached'
app.secret_key = secret
conn = pyodbc.connect('Driver={SQL Server};'
'Server=127.0.0.1;'
'Database=AdventureWorksDW2019;'
'UID=sa;'
'PWD=xxx;'
'Trusted_Connection=no;')
@app.route('/', methods= ['GET'])
def home():
cursor = conn.cursor()
cursor.execute("SELECT * FROM notes")
productDetails= cursor.fetchall()
return render_template('home.html',
productDetails=productDetails)
@app.route('/delete/<string:id>', methods= ['DELETE'])
def delete(id):
if request.method=='DELETE':
cursor=conn.cursor()
productDetails1=cursor.execute("DELETE FROM notes WHERE id=?", (id))
conn.commit()
cursor.close()
return redirect('/')
home。
{% extends 'base.html' %}
{% set active_page = 'home' %}
{% block content %}
<table bolder= 1px>
<tr>
<td> id </td>
<td> note </td>
<td> admin </td>
</tr>
{% for note in productDetails %}
<tr>
<td> {{note[0]}} </td>
<td> {{note[1]}} </td>
<td> <a href='/edit/{{note[0]}}'>Edit</a> <a href='/new_item'>Add</a> <a href='/delete/{{note[0]}}'>Delete</a> </td>
</tr>
{% endfor %}
</table>
{% endblock %} -->
当我点击表中生成的url上的链接时,我遇到了下面的错误:
url: http://127.0.0.1:5000/delete/3
Method Not Allowed请求的URL不允许使用该方法。
当您编写<a href='/delete/{{note[0]}}'>Delete</a>
时,客户端浏览器将生成一个GET请求到您的服务器(当点击链接时)。您的端点@app.route('/delete/<string:id>', methods= ['DELETE'])
只允许DELETE请求。
HTML客户端不支持创建DELETE请求:PUT, DELETE, HEAD等方法在大多数web浏览器中可用吗?两种可能的解决方案:
- 用POST请求的表单代替超链接,并适应
delete(id)
功能:https://stackoverflow.com/a/24794230/11405279 - 适应使用ajax请求:Python flask DELETE请求