Express와 상당히 유사합니다.
간단한 웹 서버 작성
from flask import Flask
# 플라스크 앱의 이름을 정해줍니다.
app = Flask("job scrapper")
# decorator(@)는 곧바로 아래의 함수를 찾습니다.
@app.route("/")
def home():
return "Hello"
# 도메인의 변수를 사용하기 위해서는 <>로 감싸고, 함수의 파라미터로도 넣습니다.
@app.route("/<username>")
def contact(username):
return f"hello {username}"
# 플라스크 웹 서버를 가동합니다.
app.run(host="0.0.0.0")
render_template으로 HTML 렌더링하기
플라스크의 규칙에 따라 반드시 templates 폴더 내부에 html을 작성해야 합니다. 자동으로 templates 폴더를 찾기 때문입니다.
# flask
from flask import Flask, render_template
app = Flask("job scrapper")
@app.route("/")
def home():
return render_template("home.html")
app.run(host="0.0.0.0")
requests로 쿼리 arguments 가져오기 + 템플릿으로 변수 넘기기
렌더링한 html
<form action="/report" method="get">
<input type="text" place="What job do you want?" required name="search" />
<button>submit</button>
</form>
input작성 후 나온 도메인. 여기에서 ?(쿼리) 이후 부분을 추출하고 싶다면 flask의 request를 사용하면 됩니다.
https://flaskjobscapper--....repl.co/report?search=react
from flask import Flask, render_template, request
app = Flask("job scrapper")
@app.route("/")
def home():
return render_template("home.html")
@app.route("/report")
def report():
# 도메인 쿼리부분을 dict 형태로 가져옵니다.
word = request.args.get("search")
return f"you search {word}"
app.run(host="0.0.0.0")
렌더링할 템플릿에 변수를 넘기고 싶다면 다음과 같이 템플릿을 렌더링하는 두번째 인자로 넣어주고,
템플릿에서는 {{}} 안에 넣어서 사용하면 됩니다.
@app.route("/report")
def report():
# 도메인 쿼리부분을 dict 형태로 가져옵니다.
word = request.args.get("search")
return render_template("report.html", searchingBy=word)
<body>
<h1>Search Results</h1>
<h3>You are looking for {{searchingBy}}</h3>
</body>
Redirect
간편하게 redirect를 보낼 수 있습니다.
@app.route("/report")
def report():
# 도메인 쿼리부분을 dict 형태로 가져옵니다.
word = request.args.get("search")
if word:
word = word.lower()
else:
# "/"로 redirect 시킵니다.
return redirect("/")
return render_template("report.html", searchingBy=word)
send_file
return send_file("jobs.csv", mimetype='text/csv', as_attachment=True)
'Django, Flask > 🌶️ Flask' 카테고리의 다른 글
flask가 requests를 핸들링하는 방법 (1) | 2020.06.05 |
---|---|
flask가 렌더링하는 html 내에서 python 코드 돌리기 {% %} (Jinja2) (0) | 2020.06.02 |