<질문>
특정 태그의 텍스트를 주어진 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....... :)
'개발 > Python' 카테고리의 다른 글
[파이썬] S3에서 파일을 다운로드할 때 AWS Lambda의 "Read-only file system" 오류 (0) | 2022.10.10 |
---|---|
[파이썬] 유니코드 정규화 (0) | 2022.10.09 |
[파이썬] 문자열의 find와 index의 차이점 (0) | 2022.10.09 |
[파이썬] 클래스 개체에서 새 인스턴스를 만드는 방법 (0) | 2022.10.09 |