ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 21.09.17. 4-1~5강 (Flask 서버 만들기)
    일기 2021. 9. 17. 22:22

    [폴더 만들기]

     

    - 통상적으로 flask 서버를 돌리는 파일 이름은 app.py라고 많이 지으니 웬만하면 통일

     

     

     

    [Flask 프레임워크]

     

    - 프레임워크 안 쓰면 태양초 빻아서 고추장 만드는 격

     

     

    *flask 시작 코드

     

    from flask import Flask
    app = Flask(__name__)

    @app.route('/')
    def home():
       return 'This is Home!'

    if __name__ == '__main__':  
       app.run('0.0.0.0',port=5000,debug=True)

     

     

    ->run 하고 http://localhost:5000/ 가보면 'This is Home!' 뜸

       =>localhost:5000으로 내가 지금 내 컴퓨터에서 서버를 돌리고 있는 것

           그리고 내가 지금 내 컴퓨터에서 다른 브라우저를 열어서 거기에 접속한 것

     cf>5000은 port. 바깥 인터넷 세상에 뚫어놓은 항구? 문? 넘버.

         바꿀 수도 있지만 거의 대부분 이미 정해진 번호를 갖고 있으니 웬만하면 변경X

     

     

     

    from flask import Flask
    app = Flask(__name__)

    @app.route('/')
    def home():
    return '나의 첫 서버!!!'

    @app.route('/mypage')
    def mypage():
    return 'mypage입니다'

    if __name__ == '__main__':
    app.run('0.0.0.0',port=5000,debug=True)

     

     

    =>http://localhost:5000/mypage 가보면 'mypage입니다' 뜸 (꼭 앱 루트, 디파인 둘다 바꿔주기)

     

     

     

     

    from flask import Flask
    app = Flask(__name__)

    @app.route('/')
    def home():
    return '<button>나는버튼이다</button>'

    if __name__ == '__main__':
    app.run('0.0.0.0',port=5000,debug=True)

     

     

    =>return에 html을 쓰면 서버 페이지에 그대로 표시되는 것!

        이 작업을 간단히 하기 위해 프레임워크 사용!

     

     

     

    *정해진 폴더 구조

     

    +스펠링 그대로 쓰기!

    - static : CSS이미지 파일 담아둘 때 사용

    - templates : html 파일들을 담아둘 때 사용

     

     

    from flask import Flask, render_template
    app = Flask(__name__)

    @app.route('/'=>local:5000/ 접속하면 여기로 들어옴
    def home():       =>들어와서 해당 함수 실행
    return render_template('index.html') =>html 템플릿을 리턴함

    if __name__ == '__main__':
    app.run('0.0.0.0',port=5000,debug=True)

     

     

    =>render_template이라는 flask에서 이미 정해둔 함수를 이용하면 위의 형식처럼 간단하게 만 써도

       자동으로 temlates 폴더 안에 있는 index.html 파일을 가져다 클라이언트에 제공

     

     

     

     

    [API 만들기]

     

    - 은행 창구와 같은 개념

    - 클라이언트가 요청하는 '방식'

     

    ┌ GET : 통상적으로! 데이터 조회(Read)를 요청할 때                   ex) 영화 목록 조회

    │         데이터 전달: URL 뒤에 물음표 붙여 key=value로 전달      ex) google.com?q=북극곰

    └ POST : 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때  ex> 회원가입, 탈퇴, 비번 수정

                  데이터 전달: 바로 보이지 않는 HTML body에 key:value 형태로 전달

     

    - API를 만들고, 클라이언트에서 Ajax로 콜 해보기!

     

     

     

     

    *GET 요청 API

     

    @app.route('/test', methods=['GET'])
    def test_get():
       title_receive = request.args.get('title_give')
       print(title_receive)
       return jsonify({'result':'success', 'msg': '이 요청은 GET!'})

     

     

     

    from flask import Flask, render_template, request, jsonify
    app = Flask(__name__)

    @app.route('/')
    def home():
    return render_template('index.html')

    @app.route('/test', methods=['GET'])
    def test_get():
    title_receive = request.args.get('title_give'=>'title_give'로 가져온 값 한번 찍어줘 봐
    print(title_receive)
    return jsonify({'result':'success', 'msg': '이 요청은 GET!'})

    if __name__ == '__main__':
    app.run('0.0.0.0',port=5000,debug=True)

     

     

     

     

    *GET 요청 확인 Ajax코드

     

    $.ajax({
        type: "GET",
        url: "/test?title_give=봄날은간다",
        data: {},
        success: function(response){
           console.log(response)
        }
      })

     

     

     

     

    localhost5000/ 접속 -> Console창에 위의 코드 입력

     

    =>

    {msg: '이 요청은 GET!', result: 'success'}
    msg: "이 요청은 GET!"                       
    result: "success"

    =>console.log(response)를 직었기 때문에 나오는 값.

        response: 서버에서 내려주는 값 (return 부분)

     

     

     

    *POST 요청 API

     

    @app.route('/test', methods=['POST'])
    def test_post():
       title_receive = request.form['title_give']
       print(title_receive)
       return jsonify({'result':'success', 'msg': '이 요청은 POST!'})

     

     

     

    from flask import Flask, render_template, request, jsonify
    app = Flask(__name__)

    @app.route('/')
    def home():
    return render_template('index.html')

    @app.route('/test', methods=['GET'])
    def test_get():
    title_receive = request.args.get('title_give')
    print(title_receive)
    return jsonify({'result':'success', 'msg': '이 요청은 GET!'})

    @app.route('/test', methods=['POST'])
    def test_post():
    title_receive = request.form['title_give']  =>'title_give'로 가져온 값 한번 찍어줘 봐
    print(title_receive)
    return jsonify({'result':'success', 'msg': '이 요청은 POST!'})

    if __name__ == '__main__':
    app.run('0.0.0.0',port=5000,debug=True)

     

     

     

     

    *POST 요청 확인 Ajax코드

     

    $.ajax({
        type: "POST",
        url: "/test",
        data: { title_give:'봄날은간다' }, =>GET과 값을 가져가는 방식이 좀 다름
        success: function(response){
           console.log(response)
        }
      })

     

     

    cf) INTERNAL SERVER ERROR: 서버에 에러가 났다는 말. 해당 파이썬 파일에 뜬 KeyError를 확인해야 함

Designed by Tistory.