2017-10-29 8 views
1

청사진 내에 일부보기 기능이 있습니다. 그들은 다음과 같다 :플라스크 테스트 클라이언트가 메소드로 잘못된보기 기능을 선택 함

@app.route('/panel/<int:id>', methods=['GET']) 
def get_panel(id): 
    panel = Panel.query.filter_by(id=id).first() 
    return jsonify(panel.getJson()) 


@app.route('/panel/<int:id>', methods=['POST']) 
def post_panel(id): 
    panel = request.get_json().get('panel') 
    # code for saving the data in database 
    return jsonify({"message": "Saved in database"}) 

내가보기 기능 post_panel()을 테스트 할 때, 그것은 어떻게 든 get_panel()을 선택합니다. 두 함수의 URL이 같고 문제가 원인이라고 생각합니다.

어떨까요?

답변

1

GET 및 POST를 별도로 처리하는 두 가지 기능을 선언 할 수 없습니다. 그래서 당신은 쓸 수

@app.route('/login', methods=['GET', 'POST']) 
def login(): 
    if request.method == 'POST': 
     do_the_login() 
    else: 
     show_the_login_form() 

: 당신은 docs이 예제와 같이, 을 무엇을 결정하는 하나의 함수, 및 조건을 사용해야합니다

@app.route('/panel/<int:id>', methods=['GET', 'POST']) 
def handle_panel(id): 
    if request.method == 'POST': 
     return post_panel(id) 
    else: 
     return get_panel(id) 

def get_panel(id): 
    panel = Panel.query.filter_by(id=id).first() 
    return jsonify(panel.getJson()) 

def post_panel(id): 
    panel = request.get_json().get('panel') 
    # code for saving the data in database 
    return jsonify({"message": "Saved in database"}) 
1

동일한 API 끝점에 대해 다른 요청 유형을 처리하는 올바른 방법이 아닙니다. 아래 접근 방법을 시도하십시오

from flask import request  

@app.route('/panel/<int:id>', methods=['GET', 'POST']) 
    def get_panel(id): 
     if request.method == 'GET': 
      panel = Panel.query.filter_by(id=id).first() 
      return jsonify(panel.getJson()) 

     elif request.method == 'POST':   
      panel = request.get_json().get('panel') 
      # code for saving the data in database 
      return jsonify({"message": "Saved in database"})