TIL 240415

hyeo71·2024년 4월 15일
0

2024 내배캠 AI 트랙

목록 보기
74/108

sparta market

Required

  • 회원가입
  • 로그인
  • 로그아웃
  • 프로필 페이지(username, 가입일, 내가 등록한 물품, 찜한 물건들의 목록, 팔로우, 팔로워) △
  • 물건 목록 리스트
  • 물건 상세 페이지
  • 물건 등록하기
  • 등록한 물건의 정보 수정하기
  • 등록한 물건 삭제하기
  • 찜하기
  • ERD △
  • README

Optional

  • 프로필 사진
  • 각 물건의 찜수, 조회수
  • 최신순, 인기도 순 물건 정렬
  • 해시태그
  • 물건 검색하기(제목, 설명, 회원, 해시태그)

ERD


manytomanyfields 값을 따로 테이블로 그릴지 생각중

회원 기능

views.py

@require_http_methods(["GET", "POST"])
def signup(request):
    if request.method == "POST":
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            auth_login(request, user)
            return redirect("profile")
    else:
        form = CustomUserCreationForm()
    context = {"form": form}
    return render(request, "accounts/signup.html", context)


@require_http_methods(["GET", "POST"])
def login(request):
    if request.method == "POST":
        form = AuthenticationForm(request.POST)
        if form.is_valid():
            auth_login(request, form.get_user())
            next_url = request.GET.get("next") or "index"  # 메인 페이지: 추후 생성 예정
            return redirect(next_url)
    else:
        form = AuthenticationForm()
    context = {"form": form}
    return render(request, "accounts/login.html", context)


@require_POST
def logout(request):
    if request.user.is_authenticated:
        auth_logout(request)
    return redirect("index")  # 메인 페이지: 추후 생성 예정

상품

views.py - list, create, update, delete는 제외

def product_detail(request, pk):
    product=get_object_or_404(Product, pk=pk)
    product.hits+=1
    product.save()
    context={'product':product}
    return render(request, 'products/product_detail.html', context)
    
@require_POST
def product_wish(request, pk):
    if request.user.is_authenticated:
        product=get_object_or_404(Product, pk=pk)
        if product.wish.filter(pk=request.user.pk).exists():
            product.wish.remove(request.user)
        else:
            product.wish.add(request.user)
        return redirect('products:detail')
    return redirect('accounts:login')
    

조회수는 detail 페이지에 들어올 때 cnt를 올리는 것으로 구현
찜목록은 이미 해당 값에 유저가 있다면 찜을 한 상태, 아니면 반대의 경우를 가지고 구현

0개의 댓글