ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4주차 - Day 1. Web Application with Flask
    교육/프로그래머스 인공지능 데브코스 2021. 5. 13. 13:27
    728x90

    1. Flask1 - Flask 설치하기

    Flask란?

    Python기반 마이크로 웹 프레임워크

    로컬환경엔 다양한 모듈이 설치되어있음->가상환경으로 목적에 따른 모듈만 환경을 구축,관리

    #파이썬 가상환경 모듈 설치
    pip install virtualenv
    #현재 디렉토리에 새 virtualenv 가상환경 만들기
    virtualenv <가상환경 이름>
    
    #가상환경 모듈 설치
    pip install virtualenv
    #Success~~~
    #venv라는 이름의 가상환경 생성
    virtualenv venv
    #가상환경 실행
    venv/Scipts/activate.bat 
    #현재 환경에 설치된 파이썬 모듈들을 보여주는 명령어
    pip freeze
    #방금 가상환경을 만들었기 때문에 아무것도 안 나옴(아무것도 설치 안 했으니까)
    
    #flask 설치
    pip install flask

    위의 과정을 거친 후 왼쪽 사진에서 보이는 경로에 app.py파일을 생성해주고 파이참으로 아래의 소스코드 작성을 해주었다

     

     

     

     

     

     

    from flask import Flask
    
    #flask에 이름을 app으로 넣어준다
    app=Flask(__name__)
    
    #'/'주소를 입력받았을 때 아래에 있는 함수를 실행
    @app.route('/')
    def hello_flask():
        return "hello world!"
    
    #name space가 main인 경우 즉, app.py를 직접적으로 실행한 경우 app.run()을 실행
    #app이 모듈로써가 아니라 직접적인 실행파일로 실행될 때 해당 로직을 사용
    if __name__=='__main__':
        app.run()

    이후 cmd창으로 돌아와 C:\Users\사용자이름\programmers\flask-proj에서 dir을 하면 app.py가 만들어진 것을 확인할 수 있음

    flask run 을 입력해주면 Running on http://~~ 하면서 주소가 뜨는데 긁어서 브라우저 주소창에 복붙하면 hello world가 뜬다!

    짜잔

    2. Flask2 - 인터넷과 웹

    인터넷

    전 세계 컴퓨터를 하나로 합치는 거대한 통신망

    인터넷에 연결된 사용자들이 정보를 공유할 수 있는 공간(인터넷 위에 있음)

    클라이언트(정보 요청)와 서버(정보 제공) 사이의 소통

    웹의 동작방식

    1. 클라이언트가 서버에 정보 요청

    2. 서버는 요청받은 정보에 대한 처리를 진행

    3. 서버가 클라이언트에게 요청에 대한 응답

    3. Flask 3 - REST API

    API

    프로그램들이 서로 상호작용하는 것을 도와주는 매개체

    RESTful

    =Representational State Transfer

    웹 서버가 요청을 응답하는 방법론 중 하나

    데이터가 아닌 자원(Resource)의 관점으로 접근

    REST API

    HTTP URI를 통해 자원을 명시

    HTTP Method를 통해 해당 자원에 대한 CRUD 진행

    ex)HTTP Method(GET, POST, PUT, DELETE...) + Resource(/order)

    특징 : Stateless함->클라이언트의 Context를 서버에서 유지하지 않음

    예제

    from flask import Flask, jsonify, request
    
    app=Flask(__name__)
    
    menus=[
           {'id':1,'name':'Espresso','price':3800},
           {'id':2,'name':'Americano','price':4000},
           {'id':3,'name':'CafeLatte','price':4500},
    ]
    
    #'/'주소를 입력받았을 때 아래에 있는 함수를 실행
    @app.route('/')
    def hello_flask():
        return 'Hello World'
    
    #GET/menus : 자료를 가지고 온다.
    @app.route('/menus')
    def get_menus():
      return jsonify({"menus":menus})
    
    #POST/menus : 자료를 자원에 추가한다.
    @app.route('/menus', methods=['POST'])
    def create_menu():
      #전달받은 자료를 menus자원에 추가
      request_data=request.get_json() #{"name":..., "price":...}
      new_id=len(menus)
      new_menu={
          'id':new_id+1,
          "name":request_data['name'],
          "price":request_data['price'],
      }
      menus.append(new_menu)
      return jsonify()
    
    #PUT /menu/<int:id> : 해당하는 id에 해당하는 데이터를 갱신합니다. (HTTPRequest의 Body에 갱신할 내용이 json으로 전달됩니다.)
    @app.route('/menus/<int:id>', methods=['PUT'])
    def update_menu(id):
      request_data=request.get_json()
      for i in menus:
        if i['id']==id:
          i['name']=request_data['name']
          i['price']=request_data['price']
          return jsonify(i)
      return '없지롱'
    
    #DELETE /menu/int:id: 해당하는 id에 해당하는 데이터를 삭제합니다.
    @app.route('/menus/<int:id>',methods=['DELETE'])
    def delete_menu(id):
        request_data=request.get_json()
        for i in menus:
            if i['id']==id:
                return jsonify(menus.pop(i))
        return '없지롱'
    
    #name space가 main인 경우 즉, app.py를 직접적으로 실행한 경우 app.run()을 실행
    #app이 모듈로써가 아니라 직접적인 실행파일로 실행될 때 해당 로직을 사용
    if __name__=='__main__':
        app.run()
        app = Flask(__name__)

    댓글

Designed by Tistory.