python3 -m venv .venv
source .venv/bin/activate
(.venv) 현재파일 위치
pip3 install flask
from flask import Flask
app = Flask(__name__)
python 활용을 좀 더 편리하게 해주기 위함
1) ANACONDA 필수
2)Visual Studio Code
if __name__ == __main__:
app.run()
터미널에서 flask run 하는 방법도 있음
_ _name __ 이 의미하는 것은?
if __name__ == __main__:
print("__name__":, __name__)
app.run()
위 코드로 실행시키면
__name__ : __main__
으로 출력된다.
더 나아가 test.py 파일을 생성한 후
print(f'test.py => __name__ : {__name__}')
라고 실행시키면
test.py => __name__ : __main__
라고 출력되는 것을 확인할 수 있다.
app.py 파일로 돌아와서
import test
test 모듈을 불러오면
test.py => __name__ : test
__name__ : __main__
으로 출력되는 것을 확인할 수 있고, 다시 test.py에서 플라스크를 실행시키면
test.py => __name__ : __main__
name 은 다시금 main 으로 바뀌는 것을 확인할 수 있다.
이는 어떤 모듈에서 사용되고 있는지를 보는 것..!
python -m flask
flask run
flask --app app.py --debug run
디버그는
app.run(debug=True)
해줘도 된다.
호스트와 포트번호를 이용할 수도 있다.
host = '127.0.0.1'
port = '8000'
~
app.run(host:host, port:port)
서버로 이동시켜주는 라우팅
@app.route('/')
def home():
return "Hello"
실행시키면 서버에 Hello가 출력되는 것을 확인할 수 있다.
@app.route('/about')
def about():
return "Hello, This is the about Page!"
주소창에 /about 을 추가해서 입력하면
Hello, This is the about Page!
나오는 것을 볼 수 있다.
<< 동적으로 URL 파라미터 값을 받아서 처리해주는 방법 >>
# http://127.0.0.1:5000/user/jiwon
@app.route('/user/<username>')
def user_profile(username):
return f"Username : {username}"
Username : jiwon
이렇게 서버에 출력된다.
<< submit & methods => GET, POST, PUT, DELETE >>
import request
~
@app.route('/submit, methods=['GET', 'POST', 'PUT', 'DELETE'])
def submit():
print(request.method)
return ''
실행한 후 서버창에 /submit 을 하면 아무일도 일어난 것 같아보이지 않지만
GET
터미널에 GET 으로 출력된 걸 볼 수 있다.
<< POST 요청 날리는 법>>
import requests,Response
~
@app.route('/test')
def test():
url = 'http://127.0.0.1:5000/submit'
data = 'test data'
response = requests.post(url=url, data=data)
return response
요청을 날릴 때는 requests.post( ' url 이나 data 값을 넣으면 됨' )
요청을 하면 response가 반드시 오게 됨
~
@app.route('/submit, methods=['GET', 'POST', 'PUT', 'DELETE'])
def submit():
print(request.method)
if request.method == "GET":
print("GET method")
if request.method == "POST":
print("POST method")
return Response('Successfully submitted', status=200)
리스폰스를 사용해서 성공 메시지를 출력시켜줌
status code 는 뭔지 모르겠음
<<동적 파라미터 숫자 버전>>
@app.route('/number/<int:number>')
def number(number):
return f"number : {number}"
렌더링을 통해서 html로 데이터를 넘긴다.
이때,
import render_template
~
# rendering 할 파일명 입력
# html로 넘겨줄 data 입력
return render_template('index.html')
return을 사용하여 render_template이라는 함수를 호출한다.
render_template 함수를 사용하려면 해당 폴더에 templates라는 폴더를 생성해줘야한다.
templates 폴더안에 rendering 할 파일을 만들면 된다.
ex) index.html
9 . 1) html 에서 key -> value 로 타이틀 바꿔보기
html에서 data를 dict 형태로 받고 있으므로
{{ key 값}} 으로 변수를 만들어준다.
9 . 2) jinja
Hi~Hi~Hi~
{{ user }}
{% if is_admin %}
<p>You have admin priviliges.</p>
{% else %}
<p>You do not have admin priviliges.</p>
{% endif %}
9 . 3)
@app.route('/')
def index():
data = {
'title' : 'Flask Jinja Template',
'user' : 'satoru',
'is_admin' : True,
'items' : ["Item1", "Item2", "Item3"]
}
return render_template('index.html', data=data)
이 상태로 html과 잘 렌더링되려면
return render_template('index.html', data=data, title=title, is_admin=True)
이렇게 고쳐줘야하지만 이렇게 하기 귀찮으면
애초에 html 의 변수 부분에
{{data.title}}
{{data.user}}
{{data.is_damin}}
이라고 해줘야된다.
❗️ 오류
dict안에서의 items 라는 함수가 있는데 , key값으로 items를 넣어서 서로 충돌이 일어나는 것으로 판단
✅ key 값을 변경해주면 됨