Flask 区分不同的 post 请求
Flask differentiating between different post requests
我有一个网页,其中包含一个供用户输入文本的输入字段和一个用于将注释添加到数据库的按钮,我想添加一个用户可以删除这些注释的按钮。现在笔记的创建将发送一个 post 请求,我可以使用以下命令检查:
if request.method == "POST":
但是当另一个按钮将通过相同的 URL (POST) 发送相同的请求方法时,我该怎么办?
我怎样才能使我的程序区分用户单击 'add note' 按钮或 'delete note' 按钮的时间,而不是 运行 当用户仅发送 POST 方法?
我看到了一个使用 Javascript fetch api 的解决方案,点击按钮会在不同的端点下发送一个 POST 方法,但想知道是否有办法仅使用 python 即可。
我在想一些方法来使用 python 请求模块和 flask RESTful api 来处理数据库修改,但我无法将整个代码的功能拼凑在一起.
除非有人问,否则我不会 post 我的任何代码,因为无论如何我都不知道要 post 什么,因为这不是与错误相关的问题。我只是想知道如何处理同一网页上的多个 post 请求,以及服务器如何知道用户点击了两个按钮中的哪一个,因为它们都在使用同样的方法。
这是我的 'create note' 表格:
<form method = "POST" class = "pt-3">
<div class = "d-flex justify-content-center">
<textarea name = "text" id = "text"></textarea>
</div>
<br/>
<div class = "d-flex justify-content-center">
<button type = "submit" class = "btn btn-success" name = "addNote">Add Note</button>
</div>
<div class = "d-flex justify-content-end">
</div>
</form>
现在这是我使用 javascript fetch api 找到的解决方案,我将其存储在链接到我的 html 网页的单独 javascript 文件中:
function deleteNote(noteId){
fetch('/delete-note', {
method: 'POST',
body: JSON.stringify({ noteId:noteId }),
}).then((_res) => {
window.location.href = "/";
});
}
它与我的烧瓶文件中的这个端点通信:
@views.route("/delete-note", methods = ["POST"])
def delete_note():
#pylint: disable = no-member
note = json.loads(request.data)
noteId= note['noteId']
note = Note.query.get(noteId)
if note:
if note.user_id == current_user.id:
db.session.delete(note)
db.session.commit()
return jsonify({})
我认为这是可能的原因是因为我可以通过为我的 html 按钮指定一个 'onclick' 属性来显式调用 javascript 函数,然后获取 api 与 /delete-note 端点 url 进行通信。我想要一种仅使用 python 语言来模拟此类功能的替代方法。
你真的应该 post 一些代码。否则我们就是在进行抽象的讨论。但我看不出有什么困难。如果我理解你的要求,你至少有两种可能。
选项 1:构建一个带有两个按钮的 HTML 表单。使用名称属性来区分它们。然后 Flask 可以知道按下了哪个。
选项 2::使用 两个 HTML 表单构建一个页面,每个表单都有自己的目标(和不同的 Flask 端点)和一个按钮。在网页中包含多个是完全有效的。这都是设计问题。
您可以:
if request.method=='POST':
if 'add_note_button' in request.form:
# do things
elif 'remove_note_button' in request.form:
# do things
用您在表单中声明的按钮名称替换我的按钮名称
我有一个网页,其中包含一个供用户输入文本的输入字段和一个用于将注释添加到数据库的按钮,我想添加一个用户可以删除这些注释的按钮。现在笔记的创建将发送一个 post 请求,我可以使用以下命令检查:
if request.method == "POST":
但是当另一个按钮将通过相同的 URL (POST) 发送相同的请求方法时,我该怎么办? 我怎样才能使我的程序区分用户单击 'add note' 按钮或 'delete note' 按钮的时间,而不是 运行 当用户仅发送 POST 方法?
我看到了一个使用 Javascript fetch api 的解决方案,点击按钮会在不同的端点下发送一个 POST 方法,但想知道是否有办法仅使用 python 即可。
我在想一些方法来使用 python 请求模块和 flask RESTful api 来处理数据库修改,但我无法将整个代码的功能拼凑在一起.
除非有人问,否则我不会 post 我的任何代码,因为无论如何我都不知道要 post 什么,因为这不是与错误相关的问题。我只是想知道如何处理同一网页上的多个 post 请求,以及服务器如何知道用户点击了两个按钮中的哪一个,因为它们都在使用同样的方法。
这是我的 'create note' 表格:
<form method = "POST" class = "pt-3">
<div class = "d-flex justify-content-center">
<textarea name = "text" id = "text"></textarea>
</div>
<br/>
<div class = "d-flex justify-content-center">
<button type = "submit" class = "btn btn-success" name = "addNote">Add Note</button>
</div>
<div class = "d-flex justify-content-end">
</div>
</form>
现在这是我使用 javascript fetch api 找到的解决方案,我将其存储在链接到我的 html 网页的单独 javascript 文件中:
function deleteNote(noteId){
fetch('/delete-note', {
method: 'POST',
body: JSON.stringify({ noteId:noteId }),
}).then((_res) => {
window.location.href = "/";
});
}
它与我的烧瓶文件中的这个端点通信:
@views.route("/delete-note", methods = ["POST"])
def delete_note():
#pylint: disable = no-member
note = json.loads(request.data)
noteId= note['noteId']
note = Note.query.get(noteId)
if note:
if note.user_id == current_user.id:
db.session.delete(note)
db.session.commit()
return jsonify({})
我认为这是可能的原因是因为我可以通过为我的 html 按钮指定一个 'onclick' 属性来显式调用 javascript 函数,然后获取 api 与 /delete-note 端点 url 进行通信。我想要一种仅使用 python 语言来模拟此类功能的替代方法。
你真的应该 post 一些代码。否则我们就是在进行抽象的讨论。但我看不出有什么困难。如果我理解你的要求,你至少有两种可能。
选项 1:构建一个带有两个按钮的 HTML 表单。使用名称属性来区分它们。然后 Flask 可以知道按下了哪个。
选项 2::使用 两个 HTML 表单构建一个页面,每个表单都有自己的目标(和不同的 Flask 端点)和一个按钮。在网页中包含多个是完全有效的。这都是设计问题。
您可以:
if request.method=='POST':
if 'add_note_button' in request.form:
# do things
elif 'remove_note_button' in request.form:
# do things
用您在表单中声明的按钮名称替换我的按钮名称