1115 TIL

looggi·2022년 11월 15일
2

스파르타 내배캠 AI-3

목록 보기
67/130

🌞 아침퀴즈

🔎 회원가입 코드 테스팅

본 프로젝트의 user.views.UserView.as_view()를 호출하면 아래와 같은 응답을 받게 됩니다. user app의 test.py에 테스트 클래스 및 메서드를 적절히 작성하여
올바르게 회원가입이 완료되었을 때 “가입 완료!!”라는 문자열이 제대로 뜨는지 확인하는 테스트를 작성하세요.
➡️ user/urls.py 에서 userview에 해당하는 url_name을 만들어주고 reverse에 넣어서 경로를 읽어올 수 있게한다
➡️ response.data는 딕셔너리니까 key값인 message로 value를 불러와서 "가입완료!!"값이랑 비교한다

from django.urls import reverse
from rest_framework.test import APITestCase

class UserRegistrationTest(APITestCase):
    def test_registration(self):
        url = reverse('userview')
        user_data = {
            "username":"test",
            "fullname":"테스터",
            "email":"test@testuser.com",
            "password":"password",
        }
        response = self.client.post(url,user_data)
        self.assertEqual(response.data['message'],"가입 완료!!")

❌ 오류

  • 처음에 fullname, email을 넣지 않은 채로 python manage.py test를 했더니
AssertionError: "${'email': [ErrorDetail(string='This fie[110 chars]')]}" != '가입 완료!!'
- ${'email': [ErrorDetail(string='This field is required.', code='required')], 'fullname': [ErrorDetail(string='This field is required.', code='required')]}
+ 가입 완료!!

이렇게 에러 메세지가 나왔다.
models.py에 보면 4가지 필드가 모두 빈칸 허용을 안해서 required field라고 하는 것 같다
*models.py의 REQUIRED_FIELDS = [] 이 부분이랑은 무관함

✔️fullname 필드를 blank=True 하면 "fullname":"", 또는 해당 필드 자체를 쓰지않아도 된다.
✔️근데 필드에 blank=True와 함께 null=True를 추가하면 NOT NULL constraint failed라고 나오는데 이게 널값으로 저장되지 못하게 하는 거 아닌가?? ➜ 맞는데 이건 마이그레이션을 안해서 발생한 문제였다 모델에 변경이 생기면 무족권.. 마이그레이션을 하자!!!

✔️참고로 blank=True 는 사용자가 입력시 빈칸으로 둬도 된다는 뜻이고 null=True는 DB에 저장될 때 NULL로 저장되는 것을 허용한다는 뜻
✔️그리고 USERNAME_FIELD = 'username'이 부분은 인증할 때 저걸 쓰겠다는 말

  • 내 깃 리포랑 연결하려고 했더니 튜터님 깃이랑 연결되어있다고 해서 git remote remove origin해줬는데 튜터님 os가 mac이라 crlf 알러트가 떴다 다음 명령어를 입력해서 해결했고 --gloabal은 전역이니까 프로젝트에만 적용하려면 빼야된다!
git config --global core.autocrlf true

🐇 안토끼반

☘️ 음양 더하기

➡️ 내 답

def solution(absolutes, signs):
    answer=0
    for abs,sign in zip(absolutes,signs):
        if sign == False:
            abs=abs*(-1)
        answer+=abs
    return answer
  • 불리언 값은 첫글자가 대문자당
  • 지난번에 봤던 짝지어주는 메소드 zip 기억하기
  • enumerate 메소드를 사용하면 인덱스와 값 모두 취할 수 있다 ➜ for i, j in enumerate(list) 이렇게 사용

➡️ 멋있는 답 공부해보기

def solution(absolutes, signs):
    return sum(absolutes if sign else -absolutes for absolutes, sign in zip(absolutes, signs))
  • absolutes라고 깔끔하게 써도 되는구나 참 ㅎㅎ
  • 그리고 signs에 값들이 불리언이니까 그냥 if sign이렇게 쓰면 된당

🐢 거북이반 JS기초 CRUD 6~8강

🌱 투두리스트 만들기

  1. 투두리스트 클릭했을 때 취소선 css 적용하기
    <head></head> 사이에 <link rel="stylesheet" href="todolist.css" /> 추가해서 css파일 추가
function handleSingleClick(e) {
    console.log("handleSingleClick")
    console.log(e)
    const singleItem = document.getElementById(e.id)
    singleItem.classList.toggle('mystyle2')
}
  1. mystyle2라는 클래스이름은 클릭할때마다 생김
    클릭할때마다 취소선이 생겨야하므로 mystyle2에 css 적용
.mystyle2{
    text-decoration: line-through;
}
  1. 인풋태그, 버튼태그 만들어서 div로 묶기
<div>
     <input type="text" placeholder="값을 입력해주세요" id="input-value" />
     <button onclick="addItem()">버튼</button>
</div>
  1. 버튼태그에 클릭시 실행되는 함수 만들기
    함수 만들면 꼭! 콘솔로 html-js 연결되는지 확인먼저하기!
function addItem() {
	console.log('addItem 함수 실행중')
}
  1. 인풋태그에 입력받은 값 콘솔에 찍어보기
function addItem() {
	const itemvalue = document.getElementById('input-value').value
    console.log(itemvalue)
}
  1. 입력받은 값을 페이지에 출력하기
function addItem() {
  	const itemvalue = document.getElementById('input-value').value
    const myList = document.getElementById('my-list')
    // html에서 id=my-list인 요소를 선택 
    const newList = document.createElement('li')
    // 리스트를 만든다
    newList.innerText = itemvalue
    myList.append(newList)
  	// newList를 myList에 붙인다
}
  1. 인풋박스 내부 값 지우기
itemvalue.value = ''
  1. 인풋 값이 없으면 알러트 띄우기
const content = itemvalue.value
if (content) {
        console.log('conetent o')
} else {
      console.log('content x')
      alert('값을 입력해주세요')
}
  1. 입력받은 값으로 만든 리스트에도 취소선 적용시키기
    id값은 고유해야하기때문에 순서를 정해서 id값을 할당해줌
    프로젝트에선 백엔드에서 id값을 받기때문에 상관없음
//리스트의 길이
console.log(myList.getElementsByTagName('li').length)
//리스트 번호
let list_number = myList.getElementsByTagName('li').length +1
//새로운 리스트 생성 및 속성 부여
const newList = document.createElement('li')
newList.innerText = content
newList.setAttribute("onclick","handleSingleClick(this)")
newList.setAttribute("id",'id-'+`${list_number}`)
profile
looooggi

0개의 댓글