Jinja 템플레이팅 언어와 API를 결합한 문제를 해결해보자.
이를 위해 두 웹사이트를 소개한다.
1. agify.io
위 사이트는 이름을 입력하면 나이를 예측해주는 API이다.
인증키, 회원가입이 필요 없어서 바로 api 주소를 가져와 사용하면 된다.
https://api.agify.io/?name=<이름입력>
데이터는 아래와 같이 Json 형태로 받는다.
age 값을 가져오기 위해 아래의 코드를 사용한다.
import requests
response = requests.get(url="https://api.agify.io/?name="+name)
data = response.json()
age = data['age']
또는
import requests
URL = f"https://api.agify.io/?name={name}"
response = requests.get(URL)
data = response.json()
age = data['age']
2. genderize.io
위 사이트는 이름을 보고 성을 예측해준다.
정확도가 꽤 높은 편이다.
https://api.genderize.io?name=<이름입력>
마찬가지로 json 형태로 받는다.
gender 값을 가져오기 위해 아래의 코드를 입력한다.
response_gender = requests.get(url= "https://api.genderize.io?name=" +name)
data_gender = response_gender.json()
gender = data_gender['gender']
3. 라우트 만들기
1) 이름 name
- 변수생성하기
라우트 안에 < >을 넣어 변수를 만든다.
그리고 quiz 함수의 파라미터로 위의 변수를 넣는다.
이 quiz 함수가 @app.route 데코레이터 메소드를 통과하면서
quiz의 파라미터인 name에 라우트 안의 < >의 값을 준다.
@app.route('/guess/<name>')
def quiz(name):
-title()
이름의 앞 문자를 대문자로 처리하는 함수이다.
name.title()
@app.route('/guess/<name>')
def quiz(name):
return render_template("name.html",person_name =name.title())
2) 나이 age, 성별 gender
@app.route('/guess/<name>')
def quiz(name):
response = requests.get(url="https://api.agify.io/?name="+name)
data = response.json()
age = data['age']
response_gender = requests.get(url= "https://api.genderize.io?name=" +name)
data_gender = response_gender.json()
gender = data_gender['gender']
return render_template("name.html",person_name =name.title(), age=age, gender=gender)
4. html 파일 만들기
- 진자 템플레이팅 언어를 이용하여 name, age, gender을 넣는다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>{{person_name}}은 나이는 {{age}}이고, 성별은{{gender}}일 것이다.</h3>
</body>
</html>
<main.py 최종 코드>
from flask import Flask, render_template
import requests
app= Flask(__name__)
@app.route('/')
def home():
return "hello"
@app.route('/guess/<name>')
def quiz(name):
response = requests.get(url="https://api.agify.io/?name="+name)
data = response.json()
age = data['age']
response_gender = requests.get(url= "https://api.genderize.io?name=" +name)
data_gender = response_gender.json()
gender = data_gender['gender']
return render_template("name.html",person_name =name.title(), age=age, gender=gender)
if __name__ == "__main__":
app.run(debug=True)
<최종화면>
'웹개발 > Flask' 카테고리의 다른 글
flask, url_for, URL 구축하기 (0) | 2022.11.17 |
---|---|
여러 문장 진자 코드, for, if문 jinja, npoint, Jinja, {{ }}, {% %}, endfor, endif, npoint, json API (0) | 2022.11.17 |
flask, Jinja, 진자, 템플레이팅 언어, templating language, {{ }}, 예제 (0) | 2022.11.17 |
flask, css 배경색깔, css파일 정적 파일, 캐시, 강력한 새로고침, shift+새로고침 (0) | 2022.11.12 |
플라스크를 활용한 웹개발, static file, 정적 파일, flask 이미지 파일 안보일 때, URL 주소 일괄 바꾸기 (0) | 2022.11.12 |