왁왁s 2021. 6. 7. 06:48 이번 글에서는 쇼핑몰에서 클라이언트가 주문한 내용을 데이터베이스에 저장하고, 다시 클라이언트에게 보여주는 것을 해볼 것이다. 그 전에 쇼핑몰에 대한 기본 틀이 있어야 한다. 직접 만들어도 좋지만 예전에 만들어둔 것이 있다. 쇼핑몰 기본 틀 가져오기/ 아래 클릭▼ 웹 / 쇼핑몰 기능 추가하기 / Ajax와 jQuery로 쇼핑몰에 환율추가 해보기/ 환율 API 활용한 쇼핑몰 웹 / 쇼핑몰 기능 추가하기 / Ajax와 jQuery로 쇼핑몰에 환율추가 해보기/ 환율 API 활용한 쇼핑몰 이전에 HTML, CSS, JavaScript에 요소들로만 제작하였던 웹 쇼핑몰(?) 비스무리한 것을 다시 한번 더 활용해보고자 한다. HTML, CSS, JavaScript와 함께 이전 글에서 쭉 다뤄왔던 Ajax와 jQuery를 사용해서 쇼핑 parkjh7764.tistory.com 해당 쇼핑몰에 대한 기본 틀은 위 링크를 통해 가져온 코드를 나타내겠다. 맨 아래 코드를 index.html 파일에 복사 붙여넣기 하고 크롬을 통해 열어보면 아래와 같은 단순한 쇼핑몰 형태의 웹이 나타날 것이다. 쇼핑몰 기본 골격 HTML 코드 이전에 만들어 놓은 환율 적용한 웹 쇼핑몰 html 골격 코드
그럼 이전 글에서부터 다뤄왔던 데이터베이스(DB)와 서버를 쇼핑몰에도 적용해보겠다. 그전에 프로젝트 세팅을 해주자. 프로젝트 세팅하기 shoppingmal 이라는 새 프로젝트를 생성하고 static 폴더, templates 폴더, index.html 파일, app.py 파일을 생성해준다. 그리고 app.py 파일에는 서버를 구동하고, API를 제공하기 위한 코드를 작성해야 한다. 기본 틀은 제공하겠다. 기본 틀을 복사 붙여넣기 해주고 필요한 부분을 고쳐서 작성하면 된다. app.py 파일 / 서버 구동, API 제공하기 위한 기본 골격 코드
API 설계하기 우선 API를 클라이언트가 사고싶은 상품을 주문하는 것(POST 방식)과 주문한 내역을 보는 것(GET 방식)으로 나눌 수 있다. POST 방식그러면 우리가 클라이언트로부터 받아야할 것은 Order 부분으로, 주문자의 이름, 주문수량, 주소, 전화번호를 받아야 한다. 그리고 받은 데이터를 데이터베이스(DB)에 저장해준다. GET 방식주문한 내역을 페이지를 로딩할 때 하단에 보이도록 한다. 이때 데이터베이스(DB)에 저장된 주문자의 정보를 가지고 온 후에 양식에 맞게 웹에 업로드 해줘야 한다. 클라이언트로부터 주문 정보 받아서 데이터베이스에 저장하기 (POST 방식) 서버에서는 어떤 코드를 작성해줘야 할까? 서버에서는 클라이언트가 입력한 주문자의 이름, 주문수량, 주소, 전화번호를 받아와서 데이터베이스에 저장해주는 코드를 작성하면 되는 것이다. POST 방식이기 때문에 request.args.get(' ')가 아닌, request.form[' '] 형태로 데이터 전송을 해야 한다. 4가지 변수를 선언해 4개의 데이터를 받아오고, 딕셔너리 형태로 구성해 'shoppingmal'이라는 DB 컬렉션에 삽입해준다. app.py 파일 / 주문하기 (POST) API 코드
그러면 클라이언트 부분에서는? 제이쿼리를 사용해 사용자가 입력한 데이터 값을 .val( )로 받아와 변수에 넣는다. ajax로 키(key) : 값(value)의 형태로 서버에 넘긴다. 그리고 해당 order( ) 함수는 [주문하기] 버튼이 눌렀을 때 실행이 된다. window.location.reload( ); 를 작성하여 주문하기 버튼을 눌렀을 때 새로고침이 되는 기능을 추가한다. index.html 파일 / 주문하기 버튼을 눌렀을 때 실행되는 함수 코드 (POST 방식)
데이터베이스(DB)에 저장된 주문 정보를 불러와 리스팅하기 (GET 방식) 서버 파일(app.py)부터 살펴보자. 서버에서 해줄 일은 데이터베이스(DB)에 저장된 클라이언트의 주문정보를 찾아서 ajax에서 활용할 수 있도록 키(key) 값으로 제공해주는 것이다. app.py 파일 / 데이터베이스(DB)에 저장된 주문정보 가져오기
클라이언트(index.html) 부분을 살펴보자. 여기도 어렵지 않다. 서버에서 보내준 데이터를 'all_orders'라는 키(key) 값으로 받아서 우리가 원하는 정보를 분류하기 위해 for 반복문을 돌린다. 주문자 이름(name), 주문수량(quantity), 주소(address), 전화번호(phone) 변수를 두어 데이터를 분류시킨다. 그리고 ` ` (백틱)을 활용해 [표] 형태로 만들어 주면 끝이다. 표 형태의 html 코드를 제이쿼리 .append 함수를 통해 해당 부분에 붙여넣기 해주면 된다 !
정상 작동되는지 확인하기 자 그러면 정상적으로 작동이 되는지 살펴보자. localhost:5000으로 서버에 접속하면 아래와 같은 화면이 나온다. 사용자가 주문한 목록을 볼 수 있도록 Client Order 부분을 추가해놨다. 이는 맨 아래에 완성된 코드로 남겨놓을테니 필요하면 복사하자. 자 그러면 주문을 해보자. 이름과 수량, 주소, 전화번호를 입력한 후에 [주문하기] 버튼을 눌러보자. 그러면 '주문이 완료되었습니다.'라는 알림창(alert)이 뜬다. Client Order 부분에 내가 입력한 주문 정보가 추가된 것을 확인할 수 있다. wow!!! 자 그러면 신나게 주문을 해보자. 김부자는 부자여서 그런지 맥북 프로 노트북을 9개나 주문했다. 그러면 주문 정보에 대한 데이터를 관리하고 있는 데이터베이스도 확인해보자. Robo 3T를 통해 mongoDB를 확인해보면 4명의 주문자 정보가 저장된 것을 확인할 수 있다. |