meaningful_life
meaningful life
meaningful_life
전체 방문자
오늘
어제
  • 분류 전체보기 (28)
    • Programming (28)
      • Backend (25)
      • Machine Learning (1)
      • Infrastructure (2)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 자바의신
  • stringbuilder
  • ufw
  • kubectl
  • git
  • docker
  • Database
  • flask
  • 백준
  • 자바
  • ubuntu
  • error
  • 쿠버네티스
  • 머신러닝
  • python
  • Spring
  • install
  • java
  • Kubernetes
  • linux

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
meaningful_life

meaningful life

5.Flask sqlalchemy - get, create
Programming/Backend

5.Flask sqlalchemy - get, create

2022. 5. 29. 22:32
728x90

5.Flask sqlalchemy - get, create

controller 부터 service 그리고 dao를 작성하여 get과 create를 구현 해보겠습니다.

https://github.com/kschoi93/flask-example

 

Controller 작성

example_create_model = example.model('create', {
    'name': fields.String
})

@example.route('/name/<name>')
class ExampleRouteGetId(Resource):
    def get(self, name: str) -> json:
        result = example_services.example_route_get_id(name)
        return {'message':'성공',
                'result':result}, 200

@example.route('/create')
@example.param('name', 'Create User')
class ExampleRouteCreate(Resource):
    @example.expect(example_create_model, validate=True)
    @example.marshal_with(example_create_model)
    def post(self) -> json:
        result = example_services.example_route_create(request.data)
        return {'message':'성공'}, 200'

 

ExampleRouteGetId에 대한 api 문서

Id를 가져오는데, get 요청 시 path에 있는 name으로 데이터를 받아오도록 서비스로 넘겨주는 역할을 합니다.

@example.route('/name/<name>')
class ExampleRouteGetId(Resource):
    def get(self, name: str) -> json:
        result = example_services.example_route_get_id(name)
        return {'message':'성공',
                'result':result}, 200

 

 

ExampleRouteCreate에 대한 api 문서

post로 받은 데이터를 유요한 데이터인지 확인하고 서비스로 넘기도록 합니다.

@example.route('/create')
@example.param('name', 'Create User')
class ExampleRouteCreate(Resource):
    @example.expect(example_create_model, validate=True)
    @example.marshal_with(example_create_model)
    def post(self) -> json:
        result = example_services.example_route_create(request.data)
        return {'message':'성공'}, 200'

 

except와 marshal_with에 사용되는 모델

example_create_model = example.model('create', {
    'name': fields.String
})

@example.expect(example_create_model, validate=True)
@example.marshal_with(example_create_model)

 

 

Service 작성

dao 객체를 생성하고 해당 dao 객체에서 get과 create를 하도록 작성합니다.

def example_route_get_id(name: str) -> str:
    dao = ExampleDAO()
    return dao.get(name=name)

def example_route_create(data: bytes):
    create_data = json.loads(data)

    name: str = create_data['name']
    dao = ExampleDAO()
    result: int = dao.create(name=name)

 

Dao 작성

각각 get과 create를 작성합니다.

class ExampleDAO(object):
    def __init__(self):
        pass

    def get(self, name: str) -> str:
        user = ExampleUser.query.filter_by(name=name).first()
        return user.name

    def create(self, name: str):
        user = ExampleUser(name=name)
        db.session.add(user)
        db.session.commit()

 

Create 테스트

다음과 같이 http://127.0.0.1:5000/api/example/create 경로로 body에 json을 실어 보냅니다.

database를 확인하면 다음과 같이 admin이 생성되어 있습니다

 

get 테스트

admin이 있는지 path param으로 실어 보내 테스트하면 다음과 같은 결과가 나타납니다.

728x90

'Programming > Backend' 카테고리의 다른 글

7.Flask 회원가입, 로그인 암호화 및 JWT + Redis  (2) 2022.06.08
6.Flask error, exception general handling  (0) 2022.05.29
4.Flask restx 적용 + Swagger  (0) 2022.05.29
3.Flask Database 연결 + Config 설정  (0) 2022.04.30
2.Flask MVC 패턴 환경 구축과 Blueprint  (0) 2022.04.22
    'Programming/Backend' 카테고리의 다른 글
    • 7.Flask 회원가입, 로그인 암호화 및 JWT + Redis
    • 6.Flask error, exception general handling
    • 4.Flask restx 적용 + Swagger
    • 3.Flask Database 연결 + Config 설정
    meaningful_life
    meaningful_life
    하루하루가 의미 있고 가치 있는 삶이 될 수 있길. 그리고 나의 추억과 각종 지식의 기록과 이를 공유함으로써 다른 사람에게도 도움이 되길...

    티스토리툴바