개발/Python

[파이썬] POST를 사용한 Flask 예제

MinorMan 2022. 10. 9. 04:05
반응형

<질문>

특정 태그의 텍스트를 주어진 xpath(?key=)로 대체하기 위해 xml 파일에 액세스하는 다음 경로를 가정합니다.

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

그런 다음 다음과 같이 cURL을 사용합니다.

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

xpath 표현식listOfUsers/user1 태그에 액세스해야 합니다.<user1> 현재 텍스트를 "John"으로 변경합니다.

Flask와 REST를 막 배우기 시작했고 이 특정한 경우에 대한 좋은 예를 찾을 수 없기 때문에 이것을 달성하는 방법에 대해 전혀 모릅니다. 또한 이미 알고 있기 때문에 lxml을 사용하여 xml 파일을 조작하고 싶습니다.

누군가 나를 도와주고 모범을 보여 줄 수 있습니까?


<답변1>

질문에 실제로 답변하기 전에:

URL의 매개변수(예:key=listOfUsers/user1) 이다GET 매개변수를 사용하면 안 됩니다.POST 요청. GET과 POST의 차이점에 대한 빠른 설명을 찾을 수 있습니다.here.

귀하의 경우 REST 원칙을 사용하려면 다음이 필요합니다.

http://ip:5000/users
http://ip:5000/users/

그런 다음 각 URL에서 서로 다른 HTTP 메서드의 동작을 정의할 수 있습니다(GET,POST,PUT,DELETE). 예를 들어,/users/<user_id>, 다음을 원합니다.

GET /users/ - return the information for 
POST /users/ - modify/update the information for  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/ - delete user with ID  

따라서 귀하의 예에서 다음을 수행하고 싶습니다.POST 에게/users/user_1 POST 데이터는"John". 그런 다음 XPath 표현식 또는 데이터에 액세스하려는 다른 방법은 사용자에게 숨겨져야 하며 URL에 밀접하게 연결되지 않아야 합니다. 이렇게 하면 모든 URL이 변경되는 대신 데이터를 저장하고 액세스하는 방식을 변경하기로 결정한 경우 서버 측에서 코드를 변경하기만 하면 됩니다.

이제 귀하의 질문에 대한 답변: 아래는 위에서 언급한 것을 달성할 수 있는 방법에 대한 기본적인 준 의사 코드입니다.

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/users/', methods = ['GET', 'POST', 'DELETE'])
def user(user_id):
    if request.method == 'GET':
        """return the information for """
        .
        .
        .
    if request.method == 'POST':
        """modify/update the information for """
        # you can use , 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 """
        .
        .
        .
    else:
        # POST Error 405 Method Not Allowed
        .
        .
        .

처럼 고려해야 할 사항이 많이 있습니다.POST request content-type 하지만 지금까지 말한 것이 합리적인 출발점이 되어야 한다고 생각합니다. 나는 당신이 묻는 정확한 질문에 직접 대답하지 않았다는 것을 알고 있지만 이것이 도움이되기를 바랍니다. 나중에 수정/추가도 할 예정입니다.

감사합니다. 도움이 되었기를 바랍니다. 제가 잘못 알고 있는 것이 있다면 알려주세요.


<답변2>

다음은 Post, GET 방식을 사용하는 방법을 쉽게 찾을 수 있는 방법과 같은 방법으로 다른 커드 연산을 추가하는 예제입니다..

#libraries to include

import os
from flask import request, jsonify
from app import app, mongo
import logger
ROOT_PATH = os.environ.get('ROOT_PATH')
@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....... :)
반응형