# NBC

94개의 포스트

2023-07-06 TIL

[drf] 이메일 관련 테스트 코드 작성 이메일 인증과 비밀번호 초기화 관련 테스트 코드를 작성해봤다. 이것저것 import해와서 쓰는게 많아서 좀 버벅였다... 🔎 전체 코드 🔧 회원가입 테스트 코드 리팩토링 회원가입 이후 추가 인증이 필요없던 기존의 코드와 다르게, 이메일 인증의 경우 이메일이 잘 전송됐는지, 받는 이메일 주소가 올바른지, 제목은 제대로 갔는지를 확인해줘야 한다. 확인을 위해 django.core에서 mail을 import해온다. 우리는 .send() 메소드를 실행했을 때 저장되는 Django의 내장 메일 메시지를 보관하는 리스트 outbox를 사용해 줄 것이다. 메일이 잘 전송됐는지 길이를 체크해준다. 그러고 받는 이메일 주소가 맞는지와 제목을 체크해준다. 🔧 이메일 인증 테스트 코드 먼저 setUp에서 저장해준 uidb64랑 token 값을 들고온

2023년 7월 6일
·
0개의 댓글
·

2023-07-05 TIL

[js] 이벤트 리스너와 익명 함수 참고 문서 ❓ 이벤트? 이벤트 리스너? js 코드를 살펴보다보면 addEventListener라는 친구를 심심찮게 볼 수 있다. 이벤트 리스너는 뭐고, 또 JS에서 이벤트는 뭘 말하는걸까? 💬 이벤트 > (우리가 지금) 프로그래밍하고 있는 시스템에서 일어나는 사건이나 발생 event라는 기존 사전적 의미와 크게 다르지 않다. 💬 이벤트 리스너 > 이벤트가 발생되면 실행되는 코드 블럭. 이벤트 핸들러라고 부르기도 함 이런 이벤트 리스너를 특정 동작을 할 때 실행시켜주는 게 addEventListener다! 이런식으로 특정 object에 어떠한 event를 발생시켰을 때, 특정 코드가 동작하게 지정해주는 것이다

2023년 7월 5일
·
0개의 댓글
·
post-thumbnail

2023-07-04 TIL

[django] 퀴즈 타임스탬프 기능 퀴즈 싱글플레이 부분에서 콘솔창을 이용해서 점수를 우다다 올리는 경우가 생겼는데 ^.^... 프로젝트가 바닐라 JS기도 하고 사실 그런 코드 자체를 원천적으로 막을 방법은 지금 상황에서는 없다고 판단, 대신 퀴즈 타임 스탬프 기능을 만들었다. ❓ 타임 스탬프 타임스탬프라 함은 시간 표기는 특정한 시각을 나타내거나 기록하는 문자열이라고 한다. 그럼 현 프로젝트에서 타임 스탬프가 무슨 기능을 하나! 퀴즈를 받아오고 풀어서 서버에 제출할 때 마다 하나의 타임스탬프 기록을 생성해 DB에 저장한다. 비정상적으로 많은 요청이 들어오는 걸 한눈에 파악 가능하게 만들어주는 거다. ✅ 코드 👀 백엔드 퀴즈 정보를 기록해 줄 model을 만들어주자. 퀴즈 정보 처리를 끝낸 뒤, isinstance로 AnonymousUser(비로그인) 구분을 해주고

2023년 7월 4일
·
1개의 댓글
·
post-thumbnail

2023-07-03 TIL

카카오 소셜 로그인 시 undefined 오류 🚫 문제 발생 사이트에서 카카오 로그인 시도 시 undefined 오류가 발생한다. 근데 이게 모든 경우에 이런 문제가 발생하는 건 아니고 일부 아이디만 이런 오류가 발생하고 있다. 서버 로그를 살펴보자. 이런식으로 callback 요청이 갔을 때 finish가 제대로 안되는 모양이다. 로컬 환경에서 확인해도 동일하게 로그인이 안됐다. 🔎 원인 찾기 먼저 로그인에 들어갔을 때 오류가 생기는 것 같아서 print문으로 확인해봤다. 항상 저 User.objects.get(email=request.data["email"])에서 걸리길래 email이 잘 찍히는지 먼저 확인해봤다. ![](https://velo

2023년 7월 3일
·
0개의 댓글
·
post-thumbnail

2023-06-30 TIL

[Django] django admin action 👉 Django 공식문서 ❓ action이 뭐야? Django Admin에서는 action이라는 친구를 제공한다. 간단하게 말하자면 같은 작업을 여러군데에 일괄적으로 해줘야 할 때 쓰는 django 내장 기능이다. 여기 보이는 action이 그 예! 기존에는 오브젝트 들어가서 체크하고 세이브하고 다시 나와서 다음 오브젝트 들어가고 반복하고... 이렇게 진행했다면 이 과정을 한번에 처리해준다!! ✅ 그래서 어떻게 적용시키는데? 전체 코드를 함께 보자. @admin.action이라

2023년 6월 30일
·
0개의 댓글
·
post-thumbnail

2023-06-29 TIL

django migrations 폴더의 소중함 기존에는 django로 작업을 하다 migrate 오류가 발생하면 migrations 폴더를 날려주는 식으로 작업했다. 이런식으로 0001_ㅁㅁㅁ하고 붙는 친구들이 DB에 적용시킬 때 필요한 파일들이다. 원래는 얘네를 날려주고 했는데... 그러면 문제가 생긴다!! ❓ django_migrations 테이블 django에서는 사용자가 migrate를 실행할 때 마다 이를 기록해주는 django_migrations 테이블이 있다. 이렇게

2023년 6월 29일
·
0개의 댓글
·

2023-06-28 TIL

[Django channels] 프론트에서 받아온 receive 값을 처리하기 기본적으로 프론트에서 웹소켓을 통해 send한 값들은 receive로 들어오게 된다. 받아오는 유형이 채팅 메세지 말고도 여러가지가 있어서, 딕셔너리를 사용해 구분해주기로 했다. 이런식으로, 받아온 text_data를 json.loads로 python에서 사용할 수 있게 변환시켜주고 그 안의 type의 value값 유형을 딕셔너리로 처리했다. 그러고 각 함수로 넘겨준다. 받아온 메세지를 토대로 그룹 전체에게 뿌려주는 건 groupsend와 sendmessage 메소드를 이용했다. 넘어온 event에서 message 값은 담아주고, method라는 새로운 key value쌍으로 프론트에서 유형을 구분해서 처리할 수 있게 담아준다. 그리고 그 데이터 값을 group_send로 그룹에 속해있는 모든 유저들에게 뿌려준다.

2023년 6월 28일
·
0개의 댓글
·

2023-06-27 TIL

[Python] getattr 🚫 문제 발생 프론트에서 receive로 받아오는 메세지중에서, type이 존재할 때 그 type의 value값과 이름이 일치하는 함수로 요청을 보내버리려는 게 목적이었다. 근데 이렇게 하면 안돼서 찾아보니까 getattr이라는 python 내장 함수가 있었다. 🔎 getattr : 객체의 속성을 동적으로 가져와줌 > getattr(object, name[, default]) 형식은 위와 같다. 맨 첫번째에 가져올 객체, 그 다음에 이름을 담는다 그리고 default 값을 설정해줄 수 있는데, 이는 객체 값이 없을 때 예외 처리를 하기에 유용하다. ✅ 코드에 적용 receive에 이런식으로 메세지가 가고 있다고 가정하면, 이런식으로 호출해버리는 거다! [channels] group_send와 send의 차이

2023년 6월 27일
·
0개의 댓글
·

2023-06-26 TIL

[Django] channels에서 routing과 consumer channels로 웹소켓 서버를 만들다보면 우리가 기존에 잘 알던 views.py, urls.py외에도 새롭게 routing.py, consumers.py를 사용하게 된다. 이 둘의 차이가 헷갈려서 정리해보려고 한다. urls.py와 routing.py urls.py URL 패턴을 정의 해당 URL에 대해 어떤 view 함수를 실행할지 결정 일반적인 HTTP 요청과 관련된 URL 라우팅을 처리 routing.py 웹소켓 연결 및 다른 프로토콜 연결을 처리 웹소켓 연결을 통해 들어오는 메시지 및 이벤트를 처리할 컨슈머를 지정 웹소켓 프로토콜과 관련된 URL 라우팅을 처리 views.py와 consumers.py views.py 일반적인 HTTP 요청을 처리하는 뷰 함수 또는 클래스를 정의 클라이언트의 HTTP 요청을 받아 처리 후 해당 요청에

2023년 6월 26일
·
0개의 댓글
·

내일배움캠프 15주차 WIL

drf 프로젝트 han : 한글 게임 스피너 만들기 👉링크

2023년 6월 26일
·
0개의 댓글
·
post-thumbnail

2023-06-23 TIL

[Python] Docstring (독스트링) 독스트링은 Python에서 클래스, 함수, 메소드 등을 설명하기 위해 사용하는 문자열이다. 다른 언어에서도 사용할 수 있지만, 보통은 Python에서 많이 쓰이고 있다. ❓ 주석과의 차이? 1. 줄바꿈 독스트링과 주석의 가장 큰 차이라고 하면 줄바꿈을 꼽을 수 있다. 2. (vscode에서) 함수 설명 독스트링을 적용하고 싶은 클래스 / 함수 / 메소드에 써주면 vscode에서는 커서를 댔을 때 독스트링 설명이 그대로 따라붙는다! 이

2023년 6월 23일
·
2개의 댓글
·

2023-06-22 TIL

[drf] permission class 곰식 문서 django rest framework에는 permissions 이라는 권한 관리 기능을 제공하는 라이브러리가 있다. 간단하게 말하자면 POST 등 서버로 요청을 보낼 때, 권한을 요구하게 만들어준다! 🔎 사용법 사용법은 간단하다. 이렇게 사용할 뷰 사이에 permission_classes을 넣어주면 된다. permissions. 옆에 붙는 것은 권한 설정 옵션이다. 💡 설정 가능한 권한 > AllowAny : 모든 권한을 허용. IsAuthenticated : 인증 된 유저만 통과 IsAdminUser : admin 유저만 통과 IsAuthenticatedOrReadOnly : 인증 된 유저를 제외하면 ReadOnly 🔎 요청을 보

2023년 6월 22일
·
0개의 댓글
·
post-thumbnail

2023-06-21 TIL

했는데 이렇게 뜸. 릴레이션이 이미 있어서 안된단다... 기존에 fk로 연결해뒀던 필드가 삭제되어서 그런가? ㅠㅠ## [Django] migrate가 안될 때 분명히 모델의 변경사항도 있고, makemigrations해서 새로운 파일도 만들어줬는데 migrate하니까 적용이 안된다. 오류가 뜨는거면 모르겠는데, 아예 적용자체가 안되니까.... migration폴더 안에 있는 걸 삭제해주고 했는데도 안된다 🔎 시도 한 방법 1. 특정 앱만 초기화 [이 글](https://velog.io/@zero

2023년 6월 21일
·
0개의 댓글
·
post-thumbnail

2023-06-20 TIL

[js] 로딩 중 표시 넣기 특정 페이지에 들어갔을 때, 해당 페이지에 필요한 js가 전부 로딩되기 전 까지는 로딩중을 띄워주고 싶다! 우선 해당 블로그 에서 이미지를 가져왔다. velog에서 자동으로 png형식으로 올려버려서 지금 안움직이는데, 원래는 gif 형식이라 잘 움직인다. 🔎

2023년 6월 20일
·
0개의 댓글
·
post-thumbnail

2023-06-19 TIL

[js] || 연산자 🚫 문제 발생 지금 코드 구성이 이렇게 되어있는데, quizzes를 받아왔을 때 quizzes["oneoftwo"], quizzes["meaning"], quizzes["fillinthe_blank"] 같은 친구들이 아예 데이터에 존재하지 않을 경우가 생긴다. 그럼 iterable 하지 않다는 오류를 뱉어버린다. 근데 우리는 없는 경우에도 넘어갈 수 있게 처리를 해줘야 한다! 그럴 때 쓰는게 || 연산자다. 💡 논리 연산자 || [참고 글](https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Expressionsandoperators#%EB%85%BC%EB%A6%AC_

2023년 6월 19일
·
0개의 댓글
·

내일배움캠프 14주차 WIL

drf 프로젝트 han : 한글 게임 [django] 국립국어원 한국어 기초 사전 다루기 💡 타임라인 DB에 데이터 저장 후 추출 vs API로 호출해오기 : 둘 중 더 효율적인 것은? -> 바로가기 DB에 데이터 저장하는 방법 고안 & 초기 세팅 -> 바로가기 json 값에서 원하는 정보

2023년 6월 19일
·
0개의 댓글
·
post-thumbnail

2023-06-16 TIL

[js] 로컬스토리지 토큰 디코딩하기 이때까지의 프로젝트에서는 유저 정보를 담아주는 payload값을 로컬 스토리지에 저장했는데, 이번 프로젝트에서는 그게 빠지면서 user_id를 들고 올 방법을 고안했어야했다. 프로젝트 토큰이 커스텀 되어서 정보가 담겨있기 때문에, 이걸 디코딩하면 될 것 같았다. 토큰의 header, payload, signature가 .으로 3등분 되어있다는 걸 응용해서 split으로 잘라준 뒤, 1번째(0번부터 시작) 값을 들고온다. 그리고 파싱해서, 거기서 user_id를 찾는 방식이다. 아이디가 잘 찍힌다!! 근데 토큰도 디코딩이 이렇게 쉽게 되면.. 보안성에 문제가 있을 수도 있지 않나? 보안을 강화시킬 수 있는 방법을 더 생각해봐야겠

2023년 6월 16일
·
0개의 댓글
·
post-thumbnail

2023-06-15 TIL

[postman] post 요청이 완료됐는데도 계속 로딩이 이어질 때 vscode 터미널 상에서는 전송이 잘 됐는데, 포스트맨에서 테스트 할 때 로딩이 안 끝나는 경우가 있다 47초... 뭐지???? 대체 이렇게 오래 걸릴일인가? 애초에 터미널에서는 취소 요청이 잘 갔다 밑에 사진 보면 0.17초 만에 도착했다고 뜨는데 흠... 그니까 포스트맨 문제같다.. 뭐가 문제지? 시도 1 : 껐다 켜기 진짜 단순한 방법이긴 한데 껐다 켜보는 거다. 아까 아침에 vscode도 안돼서 재설치하니까 잘 돌아갔었는데 역시 프

2023년 6월 15일
·
1개의 댓글
·
post-thumbnail

2023-06-14 TIL

[django] QuizGenerator 범용적으로 사용 가능하게 refactorying 📃 기존 코드 기존에 팀원분께서 만들어주신 코드는 특정 모델에만 적용이 가능하게 되어있다. 이 코드를 다른 모델이 생겼을 때도 사용 가능하게 바꿔보면 어떨까? 🔧 이론을 기반으로 코드 리팩토링 generators.py 함수에서 model이라는 인자를 받아오게 고친 뒤, 기존 모델이 들어가는 부분을 전부 model로 고쳤다. 그리고, view에서 호출할 때 모델 값을 담아서 보내주면 될 것 같았다! ❓ 시리얼 라이저 고민 >1번 안 이왕이면 시리얼라이저도 하나로 바꿔주고 싶어서 함수 하나로 묶어봤는데 분리하는 게 더 나을 것 같기도 하고.... > 2번 안 (분리) 음!! 아무리 생각해도 2번이 훨씬 나을 것 같다. 무조건 메소드를 통일하는 게 정답은 아닌듯 함... views.py 각 모델에 따

2023년 6월 14일
·
0개의 댓글
·
post-thumbnail

2023-06-13 TIL

[PostgreSQL] 데이터베이스 일괄 삭제 이전에 django 내장 DB인 db.sqlite3을 쓸 때는 삭제할 때 파일 자체만 삭제해주고 migration을 해주면 됐다. 근데 PostgreSQL은 어떻게 해줘야하지? 🔎 시도 1. pgAdmin에서 테이블 drop 해주기 날릴 테이블을 drop 처리 해주고 migration을 해주면 될 것 같았다. 날릴 테이블 오른쪽 클릭 > Delete/Drop 이렇게 하고 명령어를 입력해줬다! 근데... 흐음.. 실행을 하니 릴레

2023년 6월 13일
·
0개의 댓글
·