TIL. 최종프로젝트(26) isinstance와 AnonymousUser [오늘 한일] 최종 발표 자료 제출 코드 복습 [오늘 배운점] 발표에 필요한 자료는 모두 제출했다. 남은 시간동안은 코드를 돌아봐야 할것같다. 파이썬, 장고 팀원분이 작성해주신 코드에서 새로 배운점이 있었다. from django.contrib.auth.models import AnonymousUser 장고에는 anonymousUser라는 클래스가 있는데 비로그인한 알수없는 유저를 취급하는 클래스이다. 해당 클래스의 인스턴스로 request.user 인스턴스가 지정된다. 지난번 consumer부분을 작성하다가 처음 보게된 클래스이다. consumer에서 사용했었던 코드는 이렇다. @database_sync_to_async def get_user(self, user_id): try: return User... TIL. 최종프로젝트(25) git stash [오늘 한일] - 피드백, 버그수정 최종 반영후 참여 재 독려 [오늘 배운점] git git stash는 그다지 어려운 기능은 아니다. 로컬 작업사항을 임시 백업하면서 작업 사항을 비워버린다. 그리고 원할때 작업사항을 다시 불러올수 있다. 가장 흔하게는 pull을 받을때 작업내역을 비웠다가 다시 적용하는 용도로 사용한다. 내 로컬에만 존재해야하는 변경 내역이 있을때 유용하다. 레파지토리의 최신 내역을 로컬로 pull 받는데 사용했다. 또한, 배포 서버에서 배포용으로 수정한 내용이 있을때도 이 방법이 좋다. 커밋을 만들지 않아도 수정 내용을 계승시키면서 최신 내역을 반영할수 있다. 반면, 커밋을 임시로 만들었다가 리셋하는것도 방법이다. 이는 stash와 거의 비슷한 역할을 해주게 된다. 한편, 단순히 작업.. TIL. 최종프로젝트(24) 정답 중복 입력 막기 [오늘 한일] - 피드백 & 버그 내용 수정 [오늘 배운점] 유저들에게 서비스를 시작하고 나니까, 여러가지 피드백과 문제점들이 속출했다. 특히 함께 겨루기 부분이 이슈가 많았다. - 겨루기가 다 끝나고 마지막 정답 입력하면 퀴즈 결과처리가 반복되는 문제 - 전체적으로 버벅이고 버튼이 종종 죽는 문제 - 채팅이 두번씩 입력되는 문제 - 배틀방에서 나가도 방이 삭제 안되고, 방을 다시 못만들게 되던 문제 팀원분께서 배틀페이지.js파일을 싹 리팩토링 해주시고 js코드를 정렬해주셔서 대부분 위 문제들이 해결 되었다. 채팅이 두번 쳐지는 문제는 addEventListener 유형을 keydown에서 keypress로 변경하셨다. 리팩토링을 통해 퀴즈 종료도 확실히 되고, 어떤식으로든 방을 나가면 방이 확실히 지워.. WIL. 최종프로젝트(23) js switch [이번주 배운점] 팀원분께서 배틀페이지 js를 리팩토링 해주셨는데 거기서 배운점이다. 그동안 배운점이 한두개가 아니긴하다. module파일, addEventLisner, function(e) Then 등 많다. JS 오늘은 switch case문에 대해 작성을 배우게 되었다. JS를 사용하며 그동안 갑갑한 부분이 꽤 된다고 생각했는데, 이 switch case문은 꽤나 간결하고 스마트해서 좋다. switch(key) { case 'value1': (중략) break; case 'value2': (중략) break; default: (중략) } 이런식으로 작성하면, 마치 파이썬에서 딕셔너리를 이용해 메소드 조건 분기를 만들 듯이 key에 대한 value값 분기를 만들수 있다. default는 필수는 아니지.. TIL. 최종프로젝트(22) 비동기 DB처리 [오늘 한일] 배틀 초대하기 기능 작성 [오늘 배운점] 장고 channels 장고 channels를 사용하게되면, 비동기식으로 동작하는 컨슈머를 작성하게된다. (동기식도 있긴하다) 이 컨슈머 안에서는 모델을 통해 DB를 가져올때 동기처리를 비동기에 넣어주는 동작이 필요하다. 이때 사용하는 기능이 from channels.db import database_sync_to_async 위의 모듈이다. 이는 별도 함수에 데코레이터로 부여할수도 있고 모듈 그대로 메소드처럼 사용할수도 있다. 그리고 모든 연산 등 처리 앞에는 await를 붙여줘야 한다. @database_sync_to_async def get_notification(self): (중략) 혹은 await database_sync_to_async(Not.. TIL. 최종프로젝트(21) 웹소켓 프론트연결 [오늘 한일] - 서비스 배포준비 [오늘 배운점] 백엔드처럼 프론트에서도 3대동작이 중요하다. socket= new websocket()이 연결을 담당하고, socket.onmessage()는 수신을 담당한다. 이 두부분을 백엔드에 작성한 것에 맞춰 작성해준다. socket.send로 메세지를 전송한다. 한편, 페이지가 벗어나는걸 감지한뒤 socket.close()로 소켓 연결을 끊어줄수도 있다고한다. 페이지에서 벗어나는건 onbeforeunload로 감지한다. 하지만 이부분은 작성하지 않아도 페이지를 벗어날때 소켓연결을 알아서 잘 해제한다. 그래서 별도로 작성해주지는 않았다. 페이지가 이동되더라도 연속성있게 웹소켓을 연결할수 있진 않을까도 고민해봤다. 인터넷에 찾아봤더니 js에서는 불가능하다고 한다. .. 이전 1 2 3 4 ··· 19 다음