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"