찾으시려는 내용은 ctrl + f or cmd + f 를 이용해 주세요 :)
[TIL/100일차/12.05]bulk_create() 시 유의사항ft. 내배캠
bulk_create() 시 유의사항
이미 정해져있는 인스턴스를 저장해야하기 때문에 Model() 인스턴스를 직접 만들어주어 pk값이 지정되게 한다
기존
1
2
3
4
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)
변경 후
1
2
3
4
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 validateft. 내배캠
타이머 만들기
1
2
3
<div class="pie-timer" style="box-shadow: 0 2px 5px 0px;">
<div id="center-timer"></div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.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%);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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' : ['yellow', '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 이미지 확장자 유효성 검사
1
2
3
4
5
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] 백엔드 리팩토링 & 회원 프론트 로직 & UIft. 내배캠
- 오늘 한 일
- 백엔드 리팩토링 : APIView에서 ViewSet으로 바꿔 코드를 줄임
- 회원 인증과 관련된 프론트 UI와 로직 구현
[TIL/104일차/12.09] channels ASGI import error, Js confirm true/falseft. 내배캠
- ASGI import error가 난 경우에는 경로가 확실하고 설정이 잘 된 경우 웹소켓을 다루는 파일에서(consumer.py 등) import한 라이브러리를 잘 확인해 보아야합니다.
1
2
3
4
5
6
7
<script>
if (!confirm("확인(예) 또는 취소(아니오)를 선택해주세요.")) {
// 취소(아니오) 버튼 클릭 시 이벤트
} else {
// 확인(예) 버튼 클릭 시 이벤트
}
</script>
[WIL]내일 배움 캠프 15주차ft. 내배캠
- 회고
- 마지막 최종 프로젝트를 진행하고 있는게 신기하면서도, 불안, 기쁨, 힘듦 여러가지의 감정이 느껴진다. 백엔드를 더 딥하게 파고 싶지만 프론트 없이 프로젝트를 하다보니 그 부분은 어려운 점은 아쉽지만 캠프가 끝나고도 이력서를 넣으면서 공부할 생각에 뭔가 설레기도 한다. 프로젝트 파이팅!
블로그를 야무지게 채울 생각에 셀렘 가득 ㅎㅋ