使用POST的Flask示例

问题描述 投票:29回答:3

假设以下路由访问xml文件以使用给定的xpath(?key =)替换特定标记的文本:

@app.route('/resource', methods = ['POST'])
def update_text():
    # CODE

然后,我会像这样使用cURL:

curl -X POST http://ip:5000/resource?key=listOfUsers/user1 -d "John"

xpath表达式qazxsw poi应该访问标签qazxsw poi以将其当前文本更改为“John”。

我不知道如何实现这一点,因为我刚刚开始学习Flask和REST,我找不到任何关于这个具体案例的好例子。此外,我想使用lxml来操作xml文件,因为我已经知道了。

有人可以帮助并提供一个指导我的例子吗?

python rest flask lxml
3个回答
44
投票

在实际回答您的问题之前:

URL中的参数(例如listOfUsers/user1)是<user1>参数,您不应该将它们用于key=listOfUsers/user1请求。快速解释GET和POST之间的区别可以找到GET

在您的情况下,要使用REST原则,您可能应该:

POST

然后,在每个URL上,您可以定义不同HTTP方法的行为(herehttp://ip:5000/users http://ip:5000/users/<user_id> GETPOST)。例如,在PUT上,您需要以下内容:

DELETE

所以,在你的例子中,你想要/users/<user_id>GET /users/<user_id> - return the information for <user_id> POST /users/<user_id> - modify/update the information for <user_id> by providing the data PUT - I will omit this for now as it is similar enough to `POST` at this level of depth DELETE /users/<user_id> - delete user with ID <user_id> ,POST数据是POST。然后,应该向用户隐藏XPath表达式或您想要访问数据的任何其他方式,而不是紧密耦合到URL。这样,如果您决定更改存储和访问数据的方式,而不是更改所有URL,则只需更改服务器端的代码即可。

现在,回答你的问题:下面是你如何实现我上面提到的基本的半伪代码:

/users/user_1

还有很多其他的事情需要考虑,比如"John"请求内容类型,但我认为到目前为止我所说的应该是一个合理的起点。我知道我没有直接回答你问的确切问题,但我希望这对你有帮助。我稍后会做一些编辑/补充。

谢谢,我希望这是有帮助的。如果我弄错了,请告诉我。


0
投票

下面是一个示例,您可以轻松找到使用Post,GET方法的方法,并使用相同的方法添加其他curd操作。

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/users/<user_id>', methods = ['GET', 'POST', 'DELETE'])
def user(user_id):
    if request.method == 'GET':
        """return the information for <user_id>"""
        .
        .
        .
    if request.method == 'POST':
        """modify/update the information for <user_id>"""
        # you can use <user_id>, which is a str but could
        # changed to be int or whatever you want, along
        # with your lxml knowledge to make the required
        # changes
        data = request.form # a multidict containing POST data
        .
        .
        .
    if request.method == 'DELETE':
        """delete user with ID <user_id>"""
        .
        .
        .
    else:
        # POST Error 405 Method Not Allowed
        .
        .
        .

-3
投票

只需在URL中加双引号,如下所示:

POST
© www.soinside.com 2019 - 2024. All rights reserved.