on
엘리스 AI 4주차 flask 기초
엘리스 AI 4주차 flask 기초
flask는 파이썬을 이용해서 서버를 만드는 것
# path param을 이용해서 값을 받고 사칙연산 api들을 만드세요 from flask import Flask,request app = Flask(__name__) # 적당한 url 을 정의하세요. @app.route("/sum//") def sum(a,b): result = a+b return str(result) @app.route("/mul//") 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/",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/",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인 객체가 삭제됐음을 알 수 있다.
from http://rightx2.tistory.com/58 by ccl(A) rewrite - 2021-07-12 19:26:24