TIL 240416

hyeo71·2024년 4월 16일
0

2024 내배캠 AI 트랙

목록 보기
75/108

Required

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

Optional

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

게시 기능

views.py

def product_list(request):
    products = Product.objects.all()
    paginator = Paginator(products, 9)
    current_page = request.GET.get("page")
    if current_page is None:
        current_page = 1
    page = paginator.page(current_page)
    context = {"page": page}
    return render(request, "products/product_list.html", context)


@login_required
def product_create(request):
    if request.method == "POST":
        form = ProductForm(request.POST, request.FILES)
        if form.is_valid():
            product = form.save(commit=False)
            product.author = request.user
            product.save()
            return redirect("products:detail", product.pk)
    else:
        form = ProductForm()

    context = {"form": form}
    return render(request, "products/product_create.html", context)

목록은 게시물의 개수가 많을수록 스크롤을 하는 시간이 길어지기 때문에 paginator를 사용하여 9개씩 나눠서 page를 구성

중고거래의 게시물이기 때문에 사진을 필수로 지정하고 사진은 Form에 데이터를 넣을 때 request.POSTrequest.FILES도 같이 넣어서 Form을 작성, 이는 html form에서도 enctype="multipart/form-data"을 사용해야한다.

<form action="{% url 'products:create' %}" method='POST' enctype="multipart/form-data">
        ...
    </form>

0개의 댓글