웹개발/Flask

flask, Jinja 템플레이팅 언어, API 결합, title(), <>, 변수

Olivia-BlackCherry 2022. 11. 17. 08:32

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)

 

<최종화면>