Flask 웹 프로그래밍

Alex·2021년 1월 19일
0

flask

목록 보기
1/2

Flask

  • 간단한 웹 사이트, 간단한 API 서버를 만드는 데에 특화 되어있는 Python Web Framework
  • Micro Web Framework
    : Micro - 가벼운 기능 제공, 가볍게 배우고 가볍게 사용할 수 있으며 확장성이 넓음
    : Framework - 이미 작성된 코드의 모임인 라이브러리 그 이상의 의미, 어플리케이션을 개발하기 위한 일정한 틀을 제공해주는 기술
  • 소규모의 어플리케이션을 빠르게 만들 수 있고, 배포 환경에 따라 대규모 어플리케이션의 기능 확장의 역할을 하기 쉬운 장점이 있음
  • ORM 기능이 제공되지 않음


Simple Web Server 띄우기

  • flask 패키지에서 FLASK를 임포트
  • FLASK 객체 app을 선언
  • __name__: 코드가 실행되면 해당 모듈명이 대입되는 변수, 즉 __main__이 대입
  • route()를 사용해 웹페이지와 해당 페이지에서 작동할 함수를 매칭
  • @app.route(): 라우팅이라고 부르며, 해당 웹 페이지의 주소로 접속했을 경우 실행하는 함수를 표기할 때 사용
  • '/'에 매칭되는 함수 hello_elice()를 만들고 route() 밑에 작성
  • 모듈명이 main일 때만 실행하도록 조건문을 추가


URL Routing

  • 서버에서 특정 URL에 접속했을 시 보여줄 페이지를 정해줌
  • 특정 URL을 일부 작업을 수행하기 위한 관련된 기능과 Mapping하는 데 사용

    예시:
    https://academy.elice.io/explore 로 접속했을 때 홈화면을 보여주고 https://academy.elice.io/courses 로 접속했을 때 수강할 수 있는 과목들을 볼 수 있음

URL 매핑

  • 웹사이트 주소를 간략하게 치환하는 과정

    예시:
    home/randing.html 폴더에 홈 화면을 구성했다면, URL Mapping을 통해 접속할 수 있는 주소를 바꿀 수 있음
    기존 경로: https://academy.elice.io/home/randing.html
    URL 매핑 경로: https://academy.elice.io/explore

  • 보안성, 편의성 향상에 도움
  • 보안성: URL 주소를 가리므로 보안성이 향상
  • 편의성: 주소를 간결하게 함으로 편의성이 향상
  • 더 자세한 내용은 여기에서!

Flask에서 URL 매핑하는 방법

  • @app.route('/')를 사용하여 각 주소별로 다른 함수를 실행
  • @를 통해 선언하는 방식을 decorator라고 부름

  • @app.route('/')index()라는 함수를 매칭 했으며 초기 도메인에서 “Index Page”를 리턴
  • @app.route('/hello')hello()라는 함수를 매칭 했으며 “/hello” 도메인에서 “Hello Elice!”를 리턴

  • 그대로 실행 시 Index Page 리턴

  • /hello 입력 시 Hello Elice 리턴

  • 정의되어있지 않은 /elice 입력 시 404 발생


Variable Rules

  • <variable_name> 섹션을 만듬으로써 varibale section을 URL에 추가할 수 있음
  • 함수는 <variable_name>을 매개변수로 받음
  • <converter:variable_name>: 선택적으로 변수의 타입을 명확하게 하기 위해 컨버터를 쓸 수 있음
  • route()를 사용해서 url path의 값을 활용
  • 문자열: 사용할 변수명을 <변수명>으로 감싸주면 함수에서 전달받은 값을 활용
  • 정수: <int:변수명> 형태로 사용
  • 서브경로: <path:subpath> 형태로 사용이 가능

  • /user/원하는 username 입력 시 'User %s' % username 리턴

  • /post/원하는 post id 입력 시 'Post %s' %post_id 리턴

  • /subpath/원하는 subpath 입력 시 `"Subpath %s" % subpath 리턴


데이터 반환하기

  • 데이터를 json 파일 형식으로 데이터를 교환
  • json 파일 형식은 웹 사이트 상에서 정보를 주고 받는 파일의 형식으로 Dictionary(사전형) 형태와 유사한 구조임
  • jsonify(): 데이터를 json 형식으로 바꿔줌

  • 딕셔너리 형태로 데이터 반환


REST

POST

  • HTTP 메소드 중 POST는 요청을 처리하기 위해 사용자(클라이언트)로부터 특정 양식(form)의 데이터를 암호화하여 서버로 전송하는 방법
  • 서버는 POST 방식으로 전달 받은 데이터를 통해 특정 동작을 수행
  • POST 요청은 눈에 파라미터가 보이는 GET 요청과 달리 전달하려는 정보가 HTTP body에 포함되어 전달
  • 전달하려는 정보는 Form Data, Json strings 등이 있음

  • hello()함수는 index.html 파일을 rendering 하여 반환

  • templates/index.html 파일에서 가장 핵심적인 구문은 <form> 태그

  • request.form['변수명']
    : post로 전달받은 값은 request.form['변수명']을 사용하면 html의 form에서 해당 변수명에 맞는 값을 사용

- value = request.form['input'] 없이 실행했을 때 이름을 입력하고 제출 버튼을 누르면 위와 같은 화면이 뜸
- value = request.form['input'] 입력 후 실행했을 때 아래의 코드가 정상적으로 실행

@app.route("/post", methods=['POST'])
def post():
    #1번을 해보세요!
    value = request.form['input']
    
    msg = "%s 님 환영합니다." % value
    return msg

GET

  • GET 요청 또한 사용자(클라이언트)로부터 특정 양식(form)의 데이터를 서버로 전송하는 방법
  • 가장 큰 차이는 정보를 URL에 붙여서 보내게 되고, 암호화되지 않는다는 점
  • 로그인과 같이 정보를 가려야할 때는 POST 방식을 사용하고 그렇지 않을 때는 GET 방식을 사용
  • GET 또는 POST로 전달받은 정보를 request모듈을 사용하여 활용
  • GET 방식의 경우 모든 파라미터를 URL로 보내 요청하는 방식
  • request 모듈에는 GET 방식으로 URL의 인자를 'key = value' 형태로 전달했을 때 다음 방식으로 활용
  • number = request.args.get('key`, 초기값)
  • 초기값은 key값으로 아무 값도 넘겨받지 못했을 때 활용되는 값이며, 이후에는 URL을 통해 /?key=value 형태로 key 값을 전달받으면 해당 값을 사용
  • 여러개의 key와 값을 전달받으려면 & 기호를 입력하여 추가할 수 있음

    예시:
    https://주소.com/?key=1&value=2
    key의 값은 1, value의 값은 2

  • get방식으로 word1 key에 대한 값을 받아 변수 temp1에 저장 (기본 값 “Elice”)
  • get방식으로 word2 key에 대한 값을 받아 변수 temp2에 저장 (기본 값 “Hello”)
  • get 방식을 사용하는 주소에서 값을 지정하지 않는다면 서버 에러(500)가 발생하므로 이때 초기값을 설정하면 서버 에러 발생을 막을 수 있음

GET&POST

  • GETPOST를 동시에 사용하여 웹 페이지를 동작
  • methodGET이라면 이름을 입력받는 웹 페이지를 동작
  • methodPOST라면 입력 같은 값을 포함하는 문장을 출력

  • 요청된 methodPOST라면 전달받은 input 변수를 value에 저장
  • 요청된 methodGET이라면 index.html을 반환


출처

K-Digital Training x 엘리스, 인공지능 서비스 기획 1기
https://stackoverflow.com/questions/1279613/what-is-an-orm-how-does-it-work-and-how-should-i-use-one
https://flask-docs-kr.readthedocs.io/ko/latest/quickstart.html
https://tools.ietf.org/html/rfc2616#section-10
https://searchapparchitecture.techtarget.com/definition/REST-REpresentational-State-Transfer

0개의 댓글