TIL 2022.12.05 ~ 12.11

김경민·2022년 12월 30일
0

TIL

목록 보기
7/15
post-thumbnail

[TIL/100일차/12.05] bulk_create() 시 유의사항 ft. 내배캠

bulk_create() 시 유의사항

이미 정해져있는 인스턴스를 저장해야하기 때문에 Model() 인스턴스를 직접 만들어주어 pk값이 지정되게 한다

기존

instance = Goods.objects.create(**validated_data)
image_set = self.context['request'].FILES.getlist('goodsimage_set')
image_list = [{'goods' : instance, 'image' : image}  for image in image_set]
GoodsImage.objects.bulk_create(image_list)

변경 후

instance = Goods.objects.create(**validated_data)
image_set = self.context['request'].FILES.getlist('goodsimage_set')
image_list = [GoodsImage(goods = instance, image = image) for image in image_set]
GoodsImage.objects.bulk_create(image_list)

'dict' object has no attribute 'pk' when using Django bulk_create() function

[TIL/101일차/12.06] CSS/JS 타이머 만들기, Django image validate ft. 내배캠

타이머 만들기

<div class="pie-timer" style="box-shadow: 0 2px 5px 0px;">
    <div id="center-timer"></div>
</div>
.pie-timer {
            position: relative;
            display: inline-block;
            width: 200px;
            height: 200px;
            border-radius: 50%;
            transition: 0.3s;
        }

        #center-timer {
            background: #fff;
            display: block;
            position: absolute;
            top: 50%;
            left: 50%;
            width: 190px;
            height: 190px;
            border-radius: 50%;
            text-align: center;
            line-height: 100px;
            font-size: 20px;
            transform: translate(-50%, -50%);
        }
async function startTimer(time) {

    let totalSecond = time

    let x = setInterval(function () {
        let min = parseInt(totalSecond / 60)
        let sec = totalSecond % 60
        let perTime = totalSecond / (60 * 20) * 100
        let percolor = perTime <= 10 ? 'red' : ['blue', 'blue', 'purple'] [parseInt(perTime / 40)] // 테두리 색상 설정

        document.getElementById('center-timer').innerHTML = min + "분" + sec + "초";
        $('.pie-timer').css({
            "background": "conic-gradient(" + percolor + " 0% " + perTime + "%, #ffffff " + perTime + "% 100%)"
        });
        totalSecond--;

        if (totalSecond < 0) {
            clearInterval(x);
            document.getElementById('center-timer').innerHTML = '종료';
        }
    }, 1000);
}

Django 이미지 확장자 유효성 검사

from django.core.validators import validate_image_file_extension

class GoodsImage(models.Model):
    goods = models.ForeignKey(Goods, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='goods/',validators=[validate_image_file_extension])

[TIL/102일차/12.07] 프로젝트 프론트엔드 로직 & UI, 백엔드 개인 경고 메시지, 경매 참여 인원 저장 로직 ft. 내배캠

  • 오늘 한 일

    • 프로젝트 프론트엔드 로직 & UI
    • 백엔드 개인 경고 메시지
    • 경매 참여 인원 저장 로직
    • 전 기수 취업자 면담
    • 팀원 코드 병합
  • 회고

    • 시중에 내놓았을 때, 사용자들이 편하고 올바르게 사용을 할 수 있게끔. 로직을 세세하게
    • 짜는 것이 재밌지만 전반적인 진행률도 신경을 써야한다.
    • 백엔드에 집중하면 좋긴하지만 프론트엔드를 통해 리프레쉬도 돼서 낫밷이기도 하다.(좀 많이 시간이 걸리는 것은 함정)
    • 힘들지만 재밌다. 배포할 생각에 설레버려 ㅋㅋ 파이팅

[TIL/103일차/12.08] 백엔드 리팩토링 & 회원 프론트 로직 & UI ft. 내배캠

  • 오늘 한 일
    • 백엔드 리팩토링 : APIView에서 ViewSet으로 바꿔 코드를 줄임
    • 회원 인증과 관련된 프론트 UI와 로직 구현

[TIL/104일차/12.09] channels ASGI import error, Js confirm true/false ft. 내배캠

  • ASGI import error가 난 경우에는 경로가 확실하고 설정이 잘 된 경우 웹소켓을 다루는 파일에서(consumer.py 등) import한 라이브러리를 잘 확인해 보아야합니다.
<script>
    if (!confirm("확인(예) 또는 취소(아니오)를 선택해주세요.")) {
        // 취소(아니오) 버튼 클릭 시 이벤트
    } else {
        // 확인(예) 버튼 클릭 시 이벤트
    }
</script>

[WIL] 내일 배움 캠프 15주차 ft. 내배캠

  • 회고
    • 마지막 최종 프로젝트를 진행하고 있는게 신기하면서도, 불안, 기쁨, 힘듦 여러가지의 감정이 느껴진다. 백엔드를 더 딥하게 파고 싶지만 프론트 없이 프로젝트를 하다보니 그 부분은 어려운 점은 아쉽지만 캠프가 끝나고도 이력서를 넣으면서 공부할 생각에 뭔가 설레기도 한다. 프로젝트 파이팅!

블로그를 야무지게 채울 생각에 셀렘 가득 ㅎㅋ

profile
적은 대로 된다.

0개의 댓글