restful example python rest flask lxml

python - example - Ejemplo de matraz con POST



python suds (3)

Este es el ejemplo en el que puede encontrar fácilmente la forma de usar el método Post, GET y la misma forma de agregar otras operaciones de cuajada también.

#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''])<br> 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.g`enter code here`et(''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....... :)

Supongamos que la siguiente ruta accede a un archivo xml para reemplazar el texto de una etiqueta específica con una xpath dada (? Clave =)

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

Entonces, usaría cURL así:

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

listOfUsers/user1 expreesion listOfUsers/user1 debería acceder a la etiqueta <user1> para cambiar su texto actual a "John".

No tengo idea de cómo lograr esto porque apenas estoy empezando a aprender Flask y REST y no puedo encontrar ningún buen ejemplo para este caso específico. Además, me gustaría usar lxml para manipular el archivo xml ya que ya lo sé.

¿Podría alguien ayudarme y dar un ejemplo para guiarme?


Solo pon doble comillas en la URL, como esta:

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


Antes de responder realmente a su pregunta:

Los parámetros en una URL (por ejemplo, key=listOfUsers/user1 ) son parámetros GET y no debe usarlos para las solicitudes POST . Una explicación rápida de la diferencia entre GET y POST se puede encontrar here .

En su caso, para hacer uso de los principios REST, probablemente debería tener:

http://ip:5000/users http://ip:5000/users/<user_id>

Luego, en cada URL, puede definir el comportamiento de diferentes métodos HTTP ( GET , POST , PUT , DELETE ). Por ejemplo, en /users/<user_id> , desea lo siguiente:

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>

Entonces, en su ejemplo, desea hacer una POST a /users/user_1 con los datos de la POST siendo "John" . Luego, la expresión XPath o cualquier otra forma en la que desee acceder a sus datos debe estar oculta para el usuario y no estar estrechamente relacionada con la URL. De esta manera, si decide cambiar la forma en que almacena y accede a los datos, en lugar de cambiar la URL, simplemente tendrá que cambiar el código en el lado del servidor.

Ahora, la respuesta a su pregunta : A continuación se muestra un semisudocódigo básico de cómo puede lograr lo que mencioné anteriormente:

@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 . . .

Hay muchas otras cosas a considerar, como el tipo de contenido de solicitud POST , pero creo que lo que he dicho hasta ahora debería ser un punto de partida razonable. Sé que no he respondido directamente la pregunta exacta que hacías, pero espero que esto te ayude. También haré algunas ediciones / adiciones más tarde.

Gracias y espero que esto sea de ayuda. Por favor, hágame saber si me he equivocado de algo.