마이허니트립 | 프로젝트 회고
·
wecode
마이허니트립(myhoneytrip) 마이허니트립 - myhoneytrip 2nd-myhoneytrip.s3-website.ap-northeast-2.amazonaws.com 1. 프로젝트 개요 마이허니트립은 마이리얼트립을 모티브로 허니문 항공권 예약과 관련된 사용자의 소셜 로그인(kakao)과 검색결과 기반 상세페이지, 항공권 예약, 마이페이지까지 이어지는 커머스 사이트의 기본적인 Flow 기능을 구현한 사이트입니다. 짧은 기간 진행하는 프로젝트이기 때문에 허니문 여행전문이라는 컨셉으로 기획을 잡고 허니문 여행지 4곳의 항공권을 예약하는 사이트를 구현했다. 배포 주소 마이허니트립 (클릭!)(요금부과때문에 삭제) 개발 기간 2022.08.01 ~ 2022.08.12 (12일) 개발 인원 프론트엔드 4명, ..
마이허니트립 | 예약목록 api : annotate를 이용한 정렬
·
wecode
마이리얼트립의 내 여행 페이지를 보면 다음과 같이 예약 목록이 나온다. 왕복여행을 예약했으면 같은 예약번호로 가는편 오는편 일정이 편도처럼 따로 뜨고 각각 날짜에 따라서 정렬돼서 뜬다. 필요한건 비행편수 하나당 예약번호, 예약상태, 출발날짜, 출발지, 도착지, 항공사이름, 항공사로고이미지인데 모델링이 이렇게 생겼다. 비행기가 왕복이면 가는편 오는편 둘다 각각 가져와야되고 편도면 하나만 가져와야하는데 티켓에는 인원수 * (가는편+오는편)이 다 있고 가는편 오는편을 따로 보려면 부킹 전체 목록을 가지고 하나씩 확인하면서 승객 테이블에 접근해서 해당 예약 승객 아무나 한명이 가지고 있는 티켓을 확인해서 그 티켓(들)을 이용해서 날짜, 장소, 항공사정보 등을 뽑았어야 했다. 그래서 이걸 각 부킹의 무조건 첫번째..
마이허니트립 | 예약 api transaction.atomic() 적용
·
wecode
유저가 예약을 하면 bookings에 레코드가 생성되고 해당 예약에 해당되는 승객이 생기고 각 승객별로 티켓이 생성된다. booking = Booking.objects.create( ... ) passenger_list = [Passenger( ... for passenger in passengers] Passenger.objects.bulk_create(passenger_list) [Ticket.objects.create( ... for passenger in Passenger.objects.filter(booking_id = booking.id) for detail in flight_details] 그래서 순서대로 Booking, Passenger, Ticket객체를 생성하는데 이 과정은 하나의 트랜..
마이허니트립 | 예약페이지 승객정보 bulk_create
·
wecode
예약을 하면 생기는 데이터 로그인을 하고 예약을 하면 해당 유저에게 예약이라는 테이블이 생기고, 같은 예약 안에 승객이 한명 혹은 여러명 생기고 한 승객당 하나(편도) 혹은 두개(왕복)의 티켓이 생기게 된다. 예약 생성 booking = Booking.objects.create( booker_name = data['booker_name'], booker_email = data['booker_email'], booker_mobile_number = data['booker_mobile_number'], booking_status = BookingStatus.objects.get(id = upcoming), user = user, booking_number = uuid4() ) 바디에 받아온 데이터들로 예약을..
마이허니트립 | 예약상태 지정에 Enum사용하기
·
wecode
+----+------------------+ | id | name | +----+------------------+ | 1 | An upcoming trip | | 2 | Last trip | | 3 | Canceled trip | +----+------------------+ 예약상태 데이터베이스는 이렇게 들어가있고 예약을 하면 예약상태를 1번 예정된 여행으로 지정을 해야 한다. booking = Booking.objects.create( ... booking_status = BookingStatus.objects.get(id = 1), ... ) 그래서 이렇게 작성을 했는데 id=1을 해버리면 데이터에 뭐가 들어있는지 아는 사람만 알아볼 수 있는 코드가 된다. 그래서 id=1 이 An upcomin..
마이허니트립 | 카카오 로그인 api : 카카오 인가코드로 토큰발급받기
·
wecode
프론트에서 1번까지 해서 인가 코드를 받은 후 백엔드에 넘겨주면 백엔드에서 그 코드를 가지고 카카오 토큰을 발급받는 방법 프론트엔드에서 카카오 인가코드 받기 kakao_authorize_code = json.loads(request.body)['authorize_code'] 프론트엔드에서 헤더의 authorization에 카카오에서 발급받은 인가코드를 보내주면 코드를 authorize_code 변수에 담는다. 헤더의 'Authorization'키는 보통 토큰을 받을때 쓰는데 카카오 인가코드는 요청할때마다 바뀌는 값이라서 이렇게 받는게 적합하지 않다. 그래서 바디에 'authorize_code'로 받는 것으로 변경했다. 이 코드를 카카오에 보내면서 프론트에서 코드를 받을때 사용한 redirect_uri를 ..
마이허니트립 | 카카오 로그인 api : 카카오 토큰으로 유저정보 받아서 회원가입, 로그인 시키기
·
wecode
카카오 로그인 api를 이용해서 로그인을 구현하는데 코드나 토큰을 가지고 카카오에 정보를 요청해야 한다. 그동안은 요청을 받고 응답을 보내주는 것만 해봐서 요청을 보내는 법을 알아봤는데 requests라는 라이브러리를 사용하면 된다. 카카오 토큰 발급받기 인가코드를 이용하지 않아도 아래 페이지로 들어가면 토큰을 받을 수 있다. https://developers.kakao.com/tool/rest-api/open/get/v1-user-access_token_info 카카오 토큰을 가지고 카카오 유저정보 요청하는법 https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#req-user-info-sample requests 라이브러리 설치하기 pip ..
마이허니트립 | 데이터베이스 모델링
·
wecode
2차 프로젝트 참고 사이트는 마이리얼트립이다. 숙소는 빼고 항공권 부분만 구현하기로 했다. 앱은 users, flights, bookings세개로 나누었다. users 로그인/회원가입은 카카오 소셜 로그인을 이용해서 구현하기로 했는데 항공권 예약할때 예약자 정보와 탑승객 정보를 따로 받기 때문에 회원가입때는 많은 정보를 받을 필요가 없어서 이름(카카오 닉네임), 이메일만 회원정보에 저장하기로 했다. 그런데 이메일은 카카오에서 필수선택으로 지정할 수 없게 돼있어서(검수가 필요하다) 유저의 이메일값은 null=True속성을 주었다. 그리고 카카오 로그인을 하면서 유저가 회원인지 확인할 때는 카카오의 id값으로 구분하기로 했다. 그래서 kakao_id라는 컬럼을 추가했다. 나중에 추가적으로 결제를 구현할 경우..
반응형