Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带POST的烧瓶示例_Python_Rest_Flask_Lxml - Fatal编程技术网

Python 带POST的烧瓶示例

Python 带POST的烧瓶示例,python,rest,flask,lxml,Python,Rest,Flask,Lxml,假设以下路径访问xml文件,用给定的xpath(?key=)替换特定标记的文本: 然后,我会像这样使用cURL: curl -X POST http://ip:5000/resource?key=listOfUsers/user1 -d "John" xpath表达式应访问标记,将其当前文本更改为“John” 我不知道如何做到这一点,因为我刚刚开始学习烧瓶和休息,我找不到任何关于这个具体案例的好例子。另外,我想使用lxml来操作xml文件,因为我已经知道它了 在实际回答您的问题之前,有人能帮助

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

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

curl -X POST http://ip:5000/resource?key=listOfUsers/user1 -d "John"
xpath表达式应访问标记
,将其当前文本更改为“John”

我不知道如何做到这一点,因为我刚刚开始学习烧瓶和休息,我找不到任何关于这个具体案例的好例子。另外,我想使用lxml来操作xml文件,因为我已经知道它了


在实际回答您的问题之前,有人能帮助并提供一个例子来指导我吗?

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

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

http://ip:5000/users
http://ip:5000/users/<user_id>
因此,在您的示例中,您希望对
/users/user_1
执行
POST
,POST数据为
“John”
。然后,XPath表达式或您希望访问数据的任何其他方式应该对用户隐藏,而不是与URL紧密耦合。这样,如果您决定更改存储和访问数据的方式,而不是更改所有URL,则只需更改服务器端的代码即可

现在,回答您的问题: 下面是一个基本的半伪代码,说明如何实现我上面提到的目标:

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
        .
        .
        .
从烧瓶导入烧瓶
从烧瓶进口请求
app=烧瓶(名称)
@app.route('/users/',methods=['GET','POST','DELETE'])
def用户(用户id):
如果request.method==“GET”:
“”“返回“”的信息”
.
.
.
如果request.method==“POST”:
“”“修改/更新的信息”“”
#您可以使用,这是一个str,但可以
#更改为int或任何您想要的,以及
#利用您的lxml知识,完成所需的
#变化
data=request.form#包含POST数据的多目录
.
.
.
如果request.method==“DELETE”:
“”“删除ID为的用户”“”
.
.
.
其他:
#不允许POST错误405方法
.
.
.
<> >有很多其他事情要考虑,比如<代码> POST >代码>请求内容类型,但我认为到目前为止我所说的应该是一个合理的起点。我知道我没有直接回答你问的问题,但我希望这对你有所帮助。稍后我也将进行一些编辑/添加


谢谢,我希望这是有益的。如果我出错了,请务必告诉我。

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

#libraries to include

import os
from flask import request, jsonify
from app import app, mongo
import logger
ROOT_PATH = os.environ.get('ROOT_PATH')<br>
@app.route('/get/questions/', methods=['GET', 'POST','DELETE', 'PATCH'])
    def question():
    # request.args is to get urls arguments 


    if request.method == 'GET':
        start = request.args.get('start', default=0, type=int)
        limit_url = request.args.get('limit', default=20, type=int)
        questions = mongo.db.questions.find().limit(limit_url).skip(start);
        data = [doc for doc in questions]
        return jsonify(isError= False,
                    message= "Success",
                    statusCode= 200,
                    data= data), 200

# request.form to get form parameter

    if request.method == 'POST':
        average_time = request.form.get('average_time')
        choices = request.form.get('choices')
        created_by = request.form.get('created_by')
        difficulty_level = request.form.get('difficulty_level')
        question = request.form.get('question')
        topics = request.form.get('topics')

    ##Do something like insert in DB or Render somewhere etc. it's up to you....... :)
#要包括的库
导入操作系统
从flask导入请求,jsonify
从应用程序导入应用程序,mongo
导入记录器
ROOT\u PATH=os.environ.get('ROOT\u PATH')
@app.route('/get/questions/',methods=['get','POST','DELETE','PATCH']) 定义问题(): #args用于获取URL参数 如果request.method==“GET”: start=request.args.get('start',默认值=0,类型=int) limit\u url=request.args.get('limit',默认值=20,type=int) questions=mongo.db.questions.find().limit(limit\u url).skip(start); 数据=[doc for doc in questions] 返回jsonify(isError=False, message=“成功”, 状态代码=200, 数据=数据),200 #request.form获取表单参数 如果request.method==“POST”: average\u time=request.form.get('average\u time')) choices=request.form.get('choices') created_by=request.form.get('created_by') 难度等级=request.form.get('难度等级') question=request.form.get('question') topics=request.form.get('topics') ##做一些类似于在DB中插入或在某处渲染等的事情。这取决于您……)
您是否需要采取特殊措施才能使邮件正确返回?我已经设置了/competitions/setup,但是当POST发生时,它会将POST发送到/competitions,因此我的POST处理逻辑永远不会到达。
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
        .
        .
        .
#libraries to include

import os
from flask import request, jsonify
from app import app, mongo
import logger
ROOT_PATH = os.environ.get('ROOT_PATH')<br>
@app.route('/get/questions/', methods=['GET', 'POST','DELETE', 'PATCH'])
    def question():
    # request.args is to get urls arguments 


    if request.method == 'GET':
        start = request.args.get('start', default=0, type=int)
        limit_url = request.args.get('limit', default=20, type=int)
        questions = mongo.db.questions.find().limit(limit_url).skip(start);
        data = [doc for doc in questions]
        return jsonify(isError= False,
                    message= "Success",
                    statusCode= 200,
                    data= data), 200

# request.form to get form parameter

    if request.method == 'POST':
        average_time = request.form.get('average_time')
        choices = request.form.get('choices')
        created_by = request.form.get('created_by')
        difficulty_level = request.form.get('difficulty_level')
        question = request.form.get('question')
        topics = request.form.get('topics')

    ##Do something like insert in DB or Render somewhere etc. it's up to you....... :)