개발일지 <내일배움캠프> 20230407 TIL

임재훈·2023년 4월 7일
0

개인과제인 무신사 제품관리 페이지를 만들어 봤다

로그인 페이지

페이지 디자인은 장고기초강의 의 html 파일을 그대로 가져왔다
그냥 강의를 들을때는 그저 쉽게 진행했던 부분인데 직접 진행하려하니 생각보다 로그인 , 회원가입기능부터 버벅거렸다

일단 , 폼을 사용해서 만들으라는 과제내용에 따라 폼으로 유저정보를 받아오는 방법을 배우는데 시간이 오래 걸렸다

class UserForm(UserCreationForm):
    email = forms.EmailField(label="이메일")

    class Meta:
        model = User
        fields = ("username", "password1", "password2", "email")

위 클래스는 기본적으로 강의안에 있던 내용인데 이메일을 추가했다

회원가입 페이지

회원가입페이지에는 개인과제의 요구사항인 유저 네임 , 비밀번호 , 비밀번호 확인 , 이메일을 입력받아 저장하게했다

def log_in(request): # 함수 이름을 변경
    if request.method == "POST":
        form = LoginForm(request.POST)
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('../')
        else:
            return HttpResponse('로그인 실패. 다시 시도 해보세요.')
    else:
        form = LoginForm()
    return render(request, 'users/log_in.html', {'form': form})

회원가입후 로그인하면 나오는 기본 페이지이다

#홈으로 사용할기능 홈으로 가기위한 함수
def home(request):
    if request.user.is_authenticated:
        return redirect('product-list')
    else:
        return redirect('/log_in') 

로그인이 되어있으면 장고의 템플릿태그를 사용해서 "<<사용자의이름>> 님 안녕하세요" 와 "로그아웃을 출력하게했다"
회원가입이 안되있는상태면 리스트 페이지에는 접근이 안되고 상단에는 로그인, 로그아웃을 출력한다

일단 나는 기본페이지를 이 리스트 페이지로 정하고 기준은 로그인이 되어있는가 아닌가로 판단해서 로그인이 되어있다면 product_list 페이지로 이동하게 했고 로그인이 되있지 않으면 로그인페이지로 이동하게 했다 장고 기본 기능인 로그인기능을 이용해서 @login_required 를 사용하면 로그인이 되어있어야만 해당 함수가 실행된다

#재고 리스트 함수
@login_required
def product_list_view(request):
    products = Product.objects.all()
    context = {
        'products': products
    }
    return render(request, 'product/product-list.html', context)

제품 등록 페이지

제품을 등록하기 위한 페이지다 여기서 등록한 제품을 입고 , 풀고를 관리할 수 있게 만들어두었다
제품의 이름,제품코드,제품설명,사이즈,가격을 입력받아 데이터베이스에 저장할수있게 만들었다

class Product(models.Model):
    code = models.IntegerField()
    name = models.CharField(max_length=256)
    description = models.CharField(max_length=256)
    price = models.IntegerField()
    stock_quantity = models.IntegerField(default=0)
    sizes = (
        ('S', 'Small'),
        ('M', 'Medium'),
        ('L', 'Large'),
        ('F', 'Free'),
    )
    size = models.CharField(choices=sizes, max_length=1)
    
    def __str__(self):
        return str(self.code)
    
#제품을 저장하는 메소드
    def save(self, *args, **kwargs):
        if not self.pk:  # 새로운 상품이 생성될 때
            self.stock_quantity = 0  # stock_quantity를 0으로 초기화
        super().save(*args, **kwargs)

제품 입고 페이지


제품 입고를 위한 페이지인데 버튼 하나로 입고 , 출고를 나눌껄 이라는 생각은 다 만든 뒤에 생각해내서 다음에 해봐야겠다고 생각한다
제품 코드의 코드로 제품을 선택하고 Product 클래스의 stock_quan 으로 quantity 갯수를 저장한다

@login_required
def inbound(request):
    if request.method == 'POST':
        form = InboundForm(request.POST)
        if form.is_valid():
            inbound = form.save(commit=False)
            inbound.product.stock_quantity += form.cleaned_data['quantity']
            inbound.product.save()
            inbound.save()
            return redirect('product-list')
    else:
        form = InboundForm()
    context = {
        'form': form
    }
    return render(request, 'product/inbound.html', context)

제품 출고 페이지

위의 제품입고와 거의 비슷하다 더하기 빼기이다 ..

#제품을 출고하는 함수
@login_required
def outbound(request):
    if request.method == 'POST':
        form = InboundForm(request.POST)
        if form.is_valid():
            product = form.cleaned_data['product']
            quantity = form.cleaned_data['quantity']
            stock_quantity = product.stock_quantity - quantity
            if stock_quantity < 0:
                stock_quantity = 0
            product.stock_quantity = stock_quantity
            product.save()
            Outbound.objects.create(product=product, quantity=quantity)
            return redirect('product-list')
    else:
        form = InboundForm()
    context = {
        'form': form
    }
    return render(request, 'product/outbound.html', context)

오늘은 이렇게 까지 만들었는데 만드는 과정에서 정말 무수한 에러들을 겪었다 urls.py 에 오타가 있어서 페이지가 정상적으로 이동이 안된다던지, html 파일에 password 를 views.py 에 있는 password1과 다르게썻다던지 이런 어이없는 경우도 많이있었지만

내가 모르는 기능을 기본적으로 사용을 했기때문에 구글링을 해가면서 어떤점이 잘못됬는지 찾는 과정이 정말많았다 사실 로그인 기능 , 회원가입기능에서 제일 많았던거같다 아마 폼을 처음 사용해봐서 그런거같다
마이그레이션 하는과정에서도 오류가생겨서 데이터베이스 파일을 지우고 새로 마이그레이션도 했고 입고 , 출고를하면 두번씩 저장이되서 10개를 저장하면 20개가 되는 오류도 있었다 이건 save 를 두번써서 그랬다
이렇게 많은 오류를겪고 해결해 나가는 과정이 많이 부족하고 검색하고 해겨했다고 해서 다음에 다시 그 문제를 만났을때 아 ! 이거 하고 해결해낼 자신이 솔찍히 아직은 없다 대신 다음에 이런 오류들을 만났을때 지금처럼 당황해하지는 않을것 같다 .

0개의 댓글