Backend/Flask

flask 기초 I - 데이터 화면에 표현, GET, POST 등

yxemsy 2022. 2. 4. 14:38

1) Flask Framework

  • Framework(프레임워크)는 결과물을 만들기 위해 제공하는 틀이다. 미리 작성돼있는 함수 이상의 기능을 제공한다.
  • Flask Framework는 파이썬을 사용해서 웹 서버를 만들 수 있도록 도와준다.
  • 기능이 많은 Django와 비교했을 때, Flask는 기본적인 기능만 제공하기 때문에 개발이 자유롭다.

2) Flask로 웹 서버 만들기

from flask import Flask
app = Flask(__name__)

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

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

(1) flask패키지에서 Flask를 import
(2) @app.route() 는 서버에 접속가능한 url을 만듦

(3) def hello() 함수는 "/" url에서 실행할 함수

(4) if__name__ == "__main__"app.run()이 실행되도록 하는 기본 실행 코드 

 


3) URL을 연결하고 데이터를 화면에 나타내기

  • JSON 형식의 데이터
from flask import Flask, jsonify
app = Flask(__name__)

@app.route("/")
def name_json():
	data = {"name":"hayan"}
	return jsonify(data)

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

(1) jsonify를 import 해야함

(2) name_json() 함수 내에 내용을 jsonify() 괄호 안에 담아주어야 내용을 화면에 전달

 

 

  • HTML 형식의 데이터

html을 화면에 전달하기 위해서는, html 파일을 templates 라는 폴더에 담아야한다.

폴더 명은 반드시 templates 여야지만 작동한다. (Flask가 자동으로 찾아 연결함)

 

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

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

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

(1) render_template를 import 해야함

(2) html() 함수 내 render_template() 함수 괄호 안에 리턴하고싶은 html파일명 작성

 

 

  • @app.route("url주소")

app.route를 이용하여 다음 예시와 같이 다양한 url 연결이 가능하다.

@app.route("/user/<name>") # name 값을 받아와서
def user(name):				# user 함수의 매개변수에 저장
	user_name = {"name": name} # 딕셔너리의 value로 넘어옴
    return jsonify(user_name)  # 딕셔너리 출력

 


4) REST API

  • HTTP URL을 통해 데이터의 자원을 표현하고, HTTP Method를 통해 데이터를 다루는 방법을 의미한다.
  • POST, GET, PUT, DELETE를 통해 자원에 대한 CRUD 연산을 적용

Crate

Read

Update

Delete

 


5) HTTP Method

  • GET

데이터를 url 뒤에 ?와 함께 사용

EX) http://사이트의주소?데이터=123

 

import 코드와 실행코드는 생략하겠다.

@app.route("/", methods=["GET"])
def hello():
	name = request.args.get('name')
    	result = "Hello" + name
    	return result

(1) request.args 는 get 방식에서 데이터를 가져오는 방법이다.


  • POST 

특정 양식에 데이터를 넣어 전송

POST방식은 데이터를 숨겨서 서버에 전송한다. 그래서 그런지 주소도 기본 url과 똑같다.

 

다음과 같은 index.html 파일이 있다고 한다.

<html>
<body>
	<form action='/login' method='post'>
    	<p>	
        아이디: <input type='text' name='id'>
        </p>
        <p>	
        패스워드: <input type='password' name='pwd'>
        </p>
        <button type='submit' />
     </form>
</body>
</html>

 

그럼 다음과 같이 post 적용 가능

@app.route("/login" , methods=["POST"] ) 
def post():
    id= request.form['id']
    pwd= request.form['pwd']
    if id == 'hayan' and pwd= '1234':
    	return "Hi! hayan!"
    else:
    	return "ERROR"