포스트

[Flask] RESTful API 구현 <3>

5. 각각 다른 모델 적용시키기

내가 구상한 프로젝트에선 각각 다른 3개의 모델을 제공해야하기 때문에 각각 다른 곳으로 연결할 버튼 3개, 테스트 모델 3개로 늘려서 코드를 다시 작성해보았다.

5.1 app.py

변경점만 적어보자면 다음과 같다

  • 최초 실행 경로를 home() 으로 정의 후 버튼 3개를 누를 수 있도록 html을 작성했다.
  • 버튼 3개마다 다른 경로로 이동할 수 있도록 입력경로3개, 출력경로 3개를 작성했다.
  • 각기 다른 모델을 작성했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@app.route('/')
def home():
    return render_template('home.html')

@app.route('/food')
def food_input():
    return render_template('food_input.html') # 입력 app.route를 2개 더 정의했다.

@app.route('/food/result', methods = ['POST', 'GET'])
def food_result():
    if request.method == 'POST':
        userInput = request.form['input']
        returnedData = food_model.printData(userInput)
        return "주문하신 " + returnedData['name'] + "은(는) " + str(returnedData['price']) + "원 입니다."
    else:
        return "잘못된 입력입니다." ## 결과 app.route를 2개 더 정의했다.

## --- 이하 생략 --- ##

5.2 home.html

홈 경로에서 보여줄 버튼 3개를 나열한 html을 작성했다

1
2
3
4
5
6
7
8
9
10
11
<html>
   <body>
   
      <button type="button" class="food-button" onclick="location.href='/food'">Food</button>

      <button type="button" class="drink-button" onclick="location.href='/drink'">Drink</button>

      <button type="button" class="dessert-button" onclick="location.href='/dessert'">Dessert</button>
      
   </body>
</html>

이전 작성한 submit과는 다르게 button 타입으로 정의했고, onclick 에서 버튼을 누를 시 이동할 경로를 지정해주었다.


6. 로컬 서버 재실행

홈 경로. 깔끔하게 3개 버튼이 있는 것을 확인 가능하다.

Drink 버튼을 누를 시 이동하는 페이지. 경로가 입력한대로 (/drink) 나오는 것을 볼 수 있다..

Coke를 작성하고 제출 시 이동하는 페이지. 경로가 입력한대로(/drink/result) 나오는 것이 보이고, 출력 결과도 원하는대로 됐다.

7. 개선할만한 점

이 테스트를 하면서 특정 html을 자주 사용했다. 하지만 경로가 달라지기 때문에 각기 다르게 만들어주었다.

내 생각엔 주소 부분을 변수로 받아서 이 반복작업을 줄일 수 있을것 같은데 이건 다음에 알아보는걸로…



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.