flask 왕초보

황지원·2024년 2월 5일
post-thumbnail

1. flask 설치를 위한 가상환경 만들기

python3 -m venv .venv
source .venv/bin/activate

(.venv) 현재파일 위치

2. app.py 파일 생성

3. flask 모듈 설치

pip3 install flask

4. python interpreter venv 선택

5. app.py 서버 구축

from flask import Flask

app = Flask(__name__)

6. flask 서버 구축을 위한 개발 환경 설정

python 활용을 좀 더 편리하게 해주기 위함
1) ANACONDA 필수
2)Visual Studio Code

7. _ _main__ 및 실행방법

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 으로 바뀌는 것을 확인할 수 있다.
이는 어떤 모듈에서 사용되고 있는지를 보는 것..!

8. flask 실행

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)

9. Routing

서버로 이동시켜주는 라우팅

@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 요청 날리는 법>>

  1. postman
  2. requests ( pip3 install requests )
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}"

9. 렌더링

렌더링을 통해서 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 값을 변경해주면 됨

profile
개발 광기를 드러내보쟈..

0개의 댓글