본문 바로가기

Programming/python

flask를 이용해서 웹 서버 구현하기 근데 갖가지 모듈을 곁들인

728x90
반응형

파이썬으로 작성된 웹 프레임워크 "Flask"

 

플라스크는 파이썬을 이용해 웹 페이지나, 웹 서비스를 개발할 수 있게 해주는 웹 프레임워크다.

 

자 여기서 웹 프레임 워크란?

 

웹 프레임워크(web framework, WF) 또는 웹 애플리케이션 프레임워크(web application framework, WAF)는 동적인 웹 페이지나, 웹 애플리케이션, 웹 서비스 개발 보조용으로 만들어지는 애플리케이션 프레임워크의 일종이다. 웹 페이지를 개발하는 과정에서 겪는 어려움을 줄이는 것이 주 목적으로 통상 데이터베이스 연동, 템플릿 형태의 표준, 세션 관리, 코드 재사용 등의 기능을 포함하고 있다.

출처: https://ko.wikipedia.org/wiki/%EC%9B%B9_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC

 

우선 간단한 코드로 살펴보자.

from flask import Flask 	#1
app = Flask(__name__) 		#2

@app.route("/") 		#3
def hello():			#4
    return "Hello World!"

if __name__ == "__main__": 	#5
    app.run()
  1. 먼저 flask를 import 해준다. (flask는 "python -m pip install flask"를 cmd에 입력해 미리 다운 받아준다.)

  2. 변수 app에 Flask를 담아 인스턴스를 생성해준다.
    이때 매직 메소드 혹은 스페셜 메소드인 __name__ 변수를 사용하는데
    __name__ 의 역할은 현재 사용하고 있는 모듈의 상태를 나타낸다.

  3. @ <-- '데코레이터'로 app 인스턴트의 route함수의 기능을 바로 밑줄에 작성한 hello 함수에 붙여서 꾸며준다
    (그래서 데코레이터)
    그리고 "/"라는 매개변수를 통해서 HTTP에 요청을 처리한다.

  4. 간단한 함수로, 요청 발생 시 문자열 "Hello World!"를 반환한다.

  5. app.run()을 통해 app 객체가 실행된다.

 

 

실행 시 이런 문구가 뜬다면 성공이다.

결과로 출력된 문장에서 Running on http://127.0.0.1:5000/ 이라는 문구가 보인다.
그 문구에서 "http://127.0.0.1:5000/"를 복사해 웹 브라우저에 붙여 넣기 해주면

 

짜잔

우리가 원하는 대로 Hello World! 가 출력된 모습을 볼 수 있다.

 


 

또는 플라스크를 이용해 직접 파이썬 코드로 작성된 함수 내에 HTML을 작성해 출력할 수도 있다.

from flask import Flask 	
app = Flask(__name__) 		

@app.route("/") 		
def hello():			
    return '''<!DOCTYPE HTML><html>
  <head>
    <title>My First Flask</title>
  </head>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>'''

if __name__ == "__main__":
    app.run()

짜잔~ HTML 직접 입력도 가능!

하지만 이 방법은 많은 코드가 작성되면 복잡하고 가독성이 떨어질 거 같다.

 

따라서 하위 폴더를 하나 만들어 주고
그 안에 작성한 html 파일을 출력하는 방법을 쓰는 것이 효율적일 것이다.

 

바로 그것을 가능하게 해주는 모듈이 render_template 모듈이다.

 

우선 render_template 모듈을 import 해준다.

 

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

@app.route("/") 		
def hello():			
    return 

if __name__ == "__main__":
    app.run()

 

그 후 모듈을 실행하기 위해서는 templates라는 하위 폴더를 만들어줘야 하고
그 안에 원하는 html 페이지를 만들어 넣어준다.

 

이런 식으로

 

나는 index.html에 이런 코드를 넣어주겠다.

<!DOCTYPE HTML><html>
  <head>
    <title>for template module</title>
  </head>
  <body>
    <h1>Hey everyone can you hear me?</h1>
  </body>
</html>

 

그다음은 아까 main.py에 작성한 코드 hello 함수 안 리턴 값을 추가해준다
다음과 같이.

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

@app.route("/") 		
def hello():			
    return render_template("index.html")

if __name__ == "__main__":
    app.run()

 

 

그리고 실행시켜주면?

 

안녕 모두 내 말 들리니?

내가 의도한 대로 잘 나온다.


다음은 jsonify 모듈을 이용해 html 페이지를 돌려받는 것이 아니라
json 형식으로 작성된 데이터를 받아오자.

 

 

왜 json 파일을 써야 함?

 

xml보다 더 적은 용량으로 데이터를 주고받을 수 있기 때문에!

 

 

 

우선 모듈이기 때문에 역시 import를 해준다.

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

 

다음 원하는 데이터 값을 딕셔너리 형태로 저장하여 리턴해준다.

 

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

@app.route("/") 		
def hello_json():
    data = {'name': 'Mc Gregor', 'status': 'injury'}			
    return data

if __name__ == "__main__":
    app.run()

그다음 실행하면?

 

맥그리거,, 지못미

이와 같이 입력한 데이터 값이 브라우저에서 출력이 되는 모습을 확인할 수 있다.

 


 

이번에는 http 메소드를 활용하여 get 방식을 구현해 보자.

 

일단 get 방식을 쓰는 이유는 서버에서 어떤 정보를 받아와 조회하기 위해서 쓴다. 

 

 

우선 request 모듈을 실행하자. 실행할 거 개 많네

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

 

그다음 @app.route의 매개변수로 methods=['GET']을 입력
(POST 방식으로 쓰고 싶으면 methods=['POST'] 아니면 둘 다 사용 가능하다.)

 

 

request.args를 이용해 서버에서 데이터를 받게 하자.

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

@app.route("/", methods=['GET']) 		
def hello_request():
    data = request.args.get('data')			
    return jsonify(data)

if __name__ == "__main__":
    app.run()

 

그리고 실행하면 

 

null 값이 뜨는 데 이는 get을 이용해 아직 데이터를 조회하지 않았기 때문이다.

 

한번 url 뒤에 ?data=galaxy 를 넣어보자.

 

줄게 내 갤럭시~(feat.이재용)

그러면 galaxy라는 값이 잘 출력하게 된다.

728x90
반응형