프로그래밍/PYTHON

flask

msh1307 2022. 6. 2. 21:49

기본적인 코드다.

1
2
3
4
5
from flask import *
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def index():
    return "<h1>hello<h1>"
cs

메소드를 지정해줄 수 있고, html 코드를 리턴해줄 수 있다.

1
2
3
4
5
from flask import *
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def index():
    return render_template('index.html')
cs

templates 경로가 디폴트라서 거기 기준으로 index.html을 리턴해줄 수도 있다.

 

1
2
3
4
5
6
7
8
from flask import *
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def index():
    if(request.method == 'GET'):
        return render_template('index.html')
    else:
        return render_template('NOP.html')
cs

request.method로 메소드 구별도 가능하다.

 

1
2
3
4
5
6
7
8
9
10
11
12
from flask import *
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def index():
    if(request.method=='GET'):
        cookie = request.cookies.get('id')
        return f"<h1>{id}</h1> <form action = '/' method='post'><input type='text' name = 'id'><input type='submit' value = 'submit'></form>"
    elif(request.method =='POST'):
        id = request.form.get('id')
        resp = make_response(f'<script>location.replace(document.referrer);</script>')
        resp.set_cookie('id', id)
        return resp
 
cs

request.form.get으로 post의 body부분의 파라미터를 받아올 수 있다.

request.args.get으로 url에서 파라미터도 받을 수 있다. 

form태그에서 action으로 path 지정해주고, 메소드를 지정할 수 있다. 

text로 입력받고 name이 키 값인 상태로 전달해줄 수 있다. 

submit이 눌러지면 form태그는 요청을 보낸다.

 

make_response로 잡아두고 쿠키를 설정해주고 리턴했다. 

쿠키는 request.cookies.get()으로 받아올 수 있다.

 

1
2
3
4
5
from flask import *
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def index():
    return render_template('index.html',var='hi')
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html lang = "en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hallow!</title>
</head>
 
<body>
    <h1>{{var}}</h1>
</body>
</html>
 
cs

index.html을 보면 {{}}를 통해 변수의 값을 출력해줄 수 있다. 

jinja2가 알아서 {{var}}을 'hi'로 렌더링해준다.

1
2
3
4
5
from flask import *
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def index():
    return render_template('index.html')
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang = "en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hallow!</title>
</head>
 
<body>
    {% for i in range(10) %}
    <h1>{{i}}</h1>
    {% endfor %}
</body>
</html>
 
cs

for문도 쓸 수 있다. 

객체를 넘겨받았을 때 for문에서 len()을 사용하려면 

{% for i in range(obj | length) %} 처럼 사용해야 한다.

1
2
3
4
5
from flask import *
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def index():
    return render_template('index.html')
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hallow!</title>
</head>
<body>
    {% if in == 'hi~' %}
    <h1>hello!</h1>
    {% elif in == 'no hi~' %}
    <h1>bye!</h1>
    {% else %}
    <h1>hallo!</h1>
    {% endif %}
</body>
</html>
 
cs

if도 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hallow!</title>
</head>
<body>
    <script src="{{url_for('static',filename='JS/app.js')}}"></script>
</body>
</html>
 
cs

css나 js를 가져오려면 url_for을 사용하면 된다. 

기본적으로 static이라서 바꾸면 안 된다.

'프로그래밍 > PYTHON' 카테고리의 다른 글

flask와 sqlite3  (0) 2022.06.02