flask는 파이썬을 이용해서 서버를 만드는 프레임워크다.
# path param을 이용해서 값을 받고 사칙연산 api들을 만드세요
from flask import Flask,request
app = Flask(__name__)
# 적당한 url 을 정의하세요.
@app.route("/sum/<int:a>/<int:b>")
def sum(a,b):
result = a+b
return str(result)
@app.route("/mul/<int:a>/<int:b>")
def mul(a,b):
result = a*b
return str(result)
@app.route("/div")
def div():
a =int(request.args['a'])
b =int(request.args['b'])
result = a/b
return str(result)
# 뺄셈, 곱셈, 나눗셈 api 들도 만드세요.
if __name__ == '__main__':
app.run(debug=True)
: sum과 mul은 매개변수를 url 경로로 받는 방법이다.
sum/2/3 으로 접근하면 화면에 5가 출력이 되고 mul/2/3으로 접근하면 화면에 6이 출력된다.
반면 div는 쿼리 스트링으로 매개변수를 받는 방법이다. div?a=10&b=5으로 접근한다면 화면에 2가 출력이 된다.
쿼리스트링으로 인자를 받을 때는 인자의 개수를 가변적으로 접근할 수 있다.
쿼리스트링으로 인자를 전달한다면 request.args에 key-value 값으로 사전에 저장된다.
from flask import Flask,request,jsonify
app = Flask(__name__)
# 직원 데이터를 추가하세요.
people = [
{
"employee_number": 1,
"name": "john",
"age": 21,
"job": "programmer",
"height": 180,
"salary": 40000000,
},
{
"employee_number": 2,
"name": "james",
"age": 12,
"job": "model",
"height": 154,
"salary": 30000000,
},
{
"employee_number": 3,
"name": "mike",
"age": 26,
"job": "programmer",
"height": 168,
"salary": 1000000000,
},
{
"employee_number": 4,
"name": "nick",
"age": 26,
"job": "firefighter",
"height": 181,
"salary": 4000000000,
}
]
# query string 을 통해 해당하는 사람의 정보만 뽑아 응답하세요.
@app.route("/employee",methods=["GET"])
def find_employee():
print("find_employee")
ans = []
age = request.args.get("age")
name = request.args.get("name")
job = request.args.get("job")
print(age,name,job)
# 쿼리와 일치하는 people이 있을 때 list에 추가한다.
for p in people:
print(p["age"],age)
if (age is None or p["age"]==int(age)) and (name is None or p["name"]==name) and (job is None or p["job"]==job):
ans.append(p)
return jsonify(ans)
# 직원을 추가하는 api를 만드세요.
@app.route("/employee",methods=["POST"])
def add_employee():
print(request.form)
print("add_employee")
people.append( {
"employee_number": int(request.form.get("employee_number")),
"name": request.form.get("name"),
"age": int(request.form.get("age")),
"job": request.form.get("job"),
"height": int(request.form.get("height")),
"salary": int(request.form.get("salary")),
})
return jsonify(people)
# 직원을 삭제하는 api를 만드세요.
@app.route("/employee/<int:employee_number>",methods=["DELETE"])
def fire_employee(employee_number):
print("fire_employee")
for p in people:
if p["employee_number"] == employee_number:
people.remove(p)
return jsonify(people)
if __name__ == '__main__':
app.run(debug=True)
people 리스트에 각 사람의 정보를 담은 dict가 추가되어있다.
이번 실습을 통해 GET, POST, DELETE의 요청을 받았을 때 서버단에서 처리하는 API를 만들었다.
1. GET
@app.route("/employee",methods=["GET"])
def find_employee():
print("find_employee")
ans = []
age = request.args.get("age")
name = request.args.get("name")
job = request.args.get("job")
print(age,name,job)
# 쿼리와 일치하는 people이 있을 때 list에 추가한다.
for p in people:
print(p["age"],age)
if (age is None or p["age"]==int(age)) and (name is None or p["name"]==name) and (job is None or p["job"]==job):
ans.append(p)
return jsonify(ans)
GET은 클라이언트에서 서버에 정보를 요청할 때 사용되는 메소드다.
GET을 통해 전달되는 parameter들은 쿼리스트링을 통해 전달되며 하나도 전달이 안될 수도 있고 모두 전달 될 수도 있다. 개수는 가변적이다. 쿼리스트링을 통해 전달된 parameter를 서버단에서 받을 때 request.args.get("name")과 같이 받을 수 있다.
예를 들어 /employee?age=26&job=programmer의 URL을 GET메소드로 요청했을 때
request.args.get("age") == 26, request.args.get("job") == "programmer, request.args.get("name")==None 과 같이 값이 저장된다. list를 JSON형태로 바꿔 전달하기 위해 jsonify 함수를 사용해야 한다.
클라이언트가 GET요청을 서버에 보낼 때 어떠한 파라미터도 전달되지 않는다면 다음과 같이 모든 객체가 JSON형태로 전달된다.
클라이언트가 GET요청을 서버에 보낼 때 parameter로 name값에 mike를 담아 전달하면 다음과 같이 name이 mike인 객체가 JSON형태로 전달된다.
2. POST
def add_employee():
print(request.form)
print("add_employee")
people.append( {
"employee_number": int(request.form.get("employee_number")),
"name": request.form.get("name"),
"age": int(request.form.get("age")),
"job": request.form.get("job"),
"height": int(request.form.get("height")),
"salary": int(request.form.get("salary")),
})
return jsonify(people)
POST는 클라이언트가 정보의 추가를 요청할 때 사용되는 메소드다.
POST메소드를 이용할 때는 body에 객체의 정보를 담아 전달할 수 있다. postman 앱을 사용하면 다음과 같이 form-data에 정보를 담아 전달할 수 있다. form-data로 받은 parameter는 request.form.get("name")을 사용하여 접근할 수 있다.
POST 메소드로 요청을 하면 다음과 같이 정상적으로 객체가 추가됨을 확인할 수 있다.
3. DELETE
@app.route("/employee/<int:employee_number>",methods=["DELETE"])
def fire_employee(employee_number):
print("fire_employee")
for p in people:
if p["employee_number"] == employee_number:
people.remove(p)
return jsonify(people)
DELETE는 클라이언트가 서버에 정보 삭제를 요청할 때 사용하는 메소드다.
URL에 파라미터를 직접 매핑해서 전달했을 때는 def fire_employee(employee_number) 처럼 메소드의 매개변수로 받아 사용해야된다.
DELETE 메소드로 요청하면 다음과 같이 employee_number가 5인 객체가 삭제됐음을 알 수 있다.
'앨리스 AI' 카테고리의 다른 글
엘리스 AI 3주차 HTML/CSS (0) | 2021.07.05 |
---|---|
앨리스 AI 트랙 1주차 리눅스 기초 (0) | 2021.06.23 |
앨리스 AI 트랙 1주차 GIT (0) | 2021.06.22 |
댓글