Skip to content

Squre-mall/django-restapi-squaremall

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

django-restapi-squaremall

React와 연동하기 위하여 구현한 Django Rest Framework(DRF)를 이용한 REST API

쇼핑몰을 주제로한 웹 앱 구현에 front-end는 React를, back-end는 Django를 사용하여 구현하기로 결정하고
back-end 부분을 맡아서 진행

image 🔗squaremall

Installation

pip를 이용하여 라이브러리 설치 Python Version: 3.8

pip install -r requirements.txt

Features

pythonanywhere 사이트에서 서버 생성하여 해당 앱 업로드 후 서버 실행

image image

*테스트를 위해 상품에 대한 데이터는 무신사스토어 사이트로부터 크롤링하여 DB에 저장

Models.py

Cloth 라는 의류 공통 테이블을 두고 의류의 상세 정보는 사이트마다 상이하기 때문에 사이트별로 테이블 새로 생성

  • 의류 테이블
    • 제품 번호, 브랜드명, 제품명, 의류 이미지 suffix, 가격, 카테고리, 생성시간, 수정시간
class Cloth(models.Model):
    # id = models.IntegerField(primary_key=True)
    productNo = models.CharField(max_length=200)
    brand = models.CharField(max_length=200)
    title = models.CharField(max_length=200)
    clothImgSuffix = models.CharField(max_length=300)
    price = JSONField(default=dict)
    category = models.CharField(max_length=100)
    created = models.DateTimeField(editable=False)
    modified = models.DateTimeField(editable=False)
  • 의류 상세 무신사 테이블(의류 테이블과 One-to-One 관계)
    • 설명, 시즌, 성별, 1개월 인기도, 추가정보(색상, 수입여부, ...)
class Cloth_Detail_Musinsa(models.Model):
    cloth = models.OneToOneField(
        Cloth,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    description = models.TextField(blank=True, null=True)
    season = models.CharField(max_length=100)
    gender = models.CharField(max_length=100)
    monthlyPopularity = models.CharField(max_length=100)
    color = models.CharField(max_length=100)
    importation = models.CharField(max_length=100)
    manufacturingYM = models.CharField(max_length=100)
    material = models.CharField(max_length=100)
    sizeNweight = models.CharField(max_length=100)
    manufacturer = models.CharField(max_length=100)
    manufactured = models.CharField(max_length=100)
    asdirector = models.CharField(max_length=100)
    precautions = models.CharField(max_length=500)
    warrantyBasis = models.CharField(max_length=200)

views.py

Generic API View를 이용하여 HTTP 요청 처리

class ListCloth(generics.ListCreateAPIView):
    queryset = Cloth.objects.all()
    serializer_class = ClothSerializer
    renderer_classes = [JSONRenderer, BrowsableAPIRenderer]
    filter_backends = [DjangoFilterBackend]
    filterset_fields = [a for a in ClothSerializer.Meta.fields if a != 'price']
    search_fields = [a for a in ClothSerializer.Meta.fields if a != 'price']
    ordering_fields = [a for a in ClothSerializer.Meta.fields if a != 'price']

    pagination_class = ClothPageNumberPagination

class DetailCloth(generics.RetrieveUpdateDestroyAPIView):
    queryset = Cloth.objects.all()
    serializer_class = ClothSerializer

serializers.py

ModelSerializer를 통해 JSON 형식으로 데이터 직렬화

class ClothSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ('id',) + tuple(a.name for a in Cloth._meta.get_fields())
        model = Cloth

Filtering, Pagination, JSON Field

  1. 각 테이블의 컬럼에 대한 필터링
  2. 성능 개선을 위한 페이징 처리
  3. 한 컬럼에 여러 데이터 저장하기 위해 JSON Field를 사용

image

Issue

Crawling

지정한 사이트로부터 데이터를 가져와서 파싱 후에 DB에 저장하는 것까지 구현하였으나
pythonanywhere 서버에서는 해당 코드 실행 불가

pythonanywhere 내에서 관리하는 white list에 추가되어야 해당 사이트로부터 request 가능

→ 로컬에서 실행한 후에 DB에 저장된 데이터를 txt로 저장하여 pythonanywhere 서버에 업로드하는 방식으로 진행

About

쇼핑몰을 주제로 React와 연동을 위한 REST API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages