구방문방구 | 상품목록 페이지네이션(offset, limit), 검색
·
wecode
1. 페이지네이션 상품 리스트를 구현하면서 카테고리에 해당하는 모든 상품의 데이터를 보내도록 구현했는데 상품이 아주 많을 경우에 대비해서 한번에 보내는 데이터의 양을 offset, limit으로 제한을 하는 방식으로 수정을 했다.(추가구현) limit과 offset은 sql에서 페이징할때 사용하는 용어인데 offset은 시작위치, limit은 가져올 열의 수이다. 이걸 파이썬 리스트 슬라이싱에 활용하면 list[offset : offset+limit]으로 쓸 수 있다. 쿼리셋은 리스트처럼 인덱스로 슬라이싱을 할 수 있으니까 기존 상품목록에 슬라이싱만 하면 되는데 아직 프론트에서 상품목록이 완성이 되지 않아서 offset, limit값이 없으면 전체상품을 출력하는 방법으로 구현을 했다. 기본값: 전체페이지..
구방문방구 | 상품목록 정렬하기(query parameter)
·
wecode
정렬기준 배민문방구 홈페이지에는 추천순(기본)/최신순/높은가격순/낮은가격순 네 가지의 정렬 방법이 있는데 추천순은 구현이 안되어있어서 기본정렬은 정렬을 안했을때 나오는 순서인 등록순(id)순으로 했다. 쿼리 파라미터 쿼리 파라미터의 키는 원래 사이트를 참고해서 sorting으로 했다. producs/?sorting=BASIC 이렇게 들어오는 쿼리 파라미터에서 정렬 기준인 BASIC값을 받고 싶으면 request.GET.get('sorting', None) 이렇게 사용하면 된다. 뒤의 None은 기본값인데 sorting이라는 키가 쿼리에 없으면 None이 반환된다. 기본값으로 None을 줘서 정렬기준을 요청하지 않으면 기본순인 id순서대로 나오도록 했다. order_by 정렬은 쿼리셋에 order_by(기..
구방문방구 | 메인페이지, 상품상세페이지 api
·
wecode
1. MainPageView 우리팀은 메인페이지에서 신상품 ,베스트 상품, 친환경 상품(그린)을 각각 8개씩 보여주기로 했다. 신상품은 이력관리용으로 넣어놓은 created_at 컬럼을 활용하고, 베스트와 그린은 직접 지정했기 때문에 그냥 필터로 뽑아내고 최신순으로 정렬해서 8개씩 슬라이싱해서 보내주는 것으로 했다. 메인페이지를 다른 앱으로 분리해서 만들어야 하나 고민을 했는데 메인에서도 결국 상품에 관련된 데이터만 활용하기 때문에 상품리스트와 상세페이지와 같은 product의 views.py에 정의했다. 그리고 세 가지 리스트 모두 반환해주는 값이 같기 때문에 get_list라는 함수를 정의해서 각 리스트를 반환했다. class MainPageView(View): def get(self, request..
구방문방구 | 전체/카테고리별 상품리스트 api
·
wecode
1. ProductListView 처음 구현과정 배민문방구 홈페이지처럼 path parameter로 카테고리별 상품목록을 나타내고 싶었는데 path parameter 사용법을 알아보기 전에 바로 할 수 있는 전체상품 리스트부터 만들었다. 그리고 카테고리별 리스트를 만들려고 하다가 이걸 하나의 뷰로 만들지 나눠서 각각의 뷰로 만들어야 하는지 고민을 했는데 -> 전체상품과 카테고리별 상품은 전부 전체/카테고리의 모든 상품들을 같은 형태로 반환하는 기능=같은 기능이기 때문에 하나의 뷰로 통합시켰다. 그리고 카테고리별 뷰를 일단 request.body에 카테고리 id를 담아서 받는 식으로 구현했다가, path parameter를 사용하는 법을 익히고 다시 수정을 했다. 카테고리 아이디가 없이 ProductLis..
git | 추적 중지시키기 git rm --cached -r
·
git & GitHub
깃으로 프로젝트 관리를 하면서 이런 캐시파일들은 깃으로 추적이 되지 않도록 .gitignore에 추가해서 진행하는데 초기세팅을 여러번 하는 과정에서 .gitignore파일이 없는채로 메인에 머지가 됐다. 그래서 해당 폴더의 파일들이 계속 깃으로 추적되고있었는데 캐시파일이라서 쉘만 껐다 켜도 파일이 업데이트돼서 계속 커밋하라고 떴다. 깃은 한번 추적한 파일을 계속 추적하기 때문에 뒤늦게 .gitignore에 추가해도 계속 추적한다. 그래서 untracking작업이 필요한데 그때 쓰는 명령어가 git rm --cached 이다. 파일 추적 중지 git rm --cached git rm --cached 위 명령어는 깃 추적만 삭제하고 파일은 삭제하지 않는다. 폴더 추적 중지 git rm -r --cached ..
구방문방구 | 데이터베이스 모델링
·
wecode
필수구현사항 커머스 사이트에서 유저의 기본 플로우를 따라서 메인페이지 - 회원가입/로그인 - 상품리스트 - 상세페이지 - 장바구니까지 구현을 하기로 했다. 결제도 하면 좋지만 어렵기때문에.. 그리고 시간이 남는다면 추가구현으로는 상품검색, 결제(api 사용하지 않고 가입시 포인트를 주고, 구매시 포인트 차감형식으로)기능을 하기로 했다. 기간안에 주문까지 구현이 될지 모르지만 필수구현후 추가구현을 위한 모델링을 다시하는 등의 작업을 하지 않고 모델링을 최대한 변경하지 않기 위해 주문테이블까지 모델링을 했다. 다루는 데이터의 종류에 따라 앱을 3가지로 나누었다. users : users products : categories, products, product_images, products_options, o..
Httpie | HTTP요청 보내기
·
기타
서버에 http요청을 보내기 위해 httpie를 이용해보자 다운로드 brew install httpie Headers에 담아서 보내고 싶은 data {'authorization': 'abcde'} Body에 담아서 보내고 싶은 data { "id" : 1 "menu" : "음료", "category" : "콜드브루", "product" : "맛있는 콜드브루" } Http요청 보내기(장고서버) http -v POST 127.0.0.1:8000/product 'authorization:abcde' id:=1 menu='음료' category='콜드브루' product='맛있는 콜드브루' * 따옴표 안에 !가 들어간다면 쌍따옴표를 쓰면 안된다 ->작은따옴표를 쓰거나, !앞에 백슬래시를 붙인다 # http -v..
[Mission 6] 로그인 JWT 발급
·
wecode
merge된 main git pull로 update후 새로운 브랜치를 내서 작업 로그인 로직 변경 회원가입 할 때 비밀번호를 암호화해서 저장했기 때문에 로그인 할때 입력된 비밀번호를 똑같이 암호화 해서 암호화된 비밀번호와 비교하는 작업을 해야 한다. 비밀번호 비교는 bcrypt의 checkpw 메서드를 이용할거라서 기존에 filter로 이메일, 비밀번호를 동시에 비교했던 코드를 수정해야 한다. 회원이 아닐때 로직 변경 # 기존 코드 # try: # if not User.objects.filter(email=email, password=password).exists(): # return JsonResponse({"message": "INVALID_USER"}, status=401) # 변경 # email과..
반응형