- TIL. 최종프로젝트(26) isinstance와 AnonymousUser 목차
[오늘 한일]
- 최종 발표 자료 제출
- 코드 복습
[오늘 배운점]
발표에 필요한 자료는 모두 제출했다.
남은 시간동안은 코드를 돌아봐야 할것같다.
파이썬, 장고
<isinstance X 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.objects.get(id=user_id)
except:
return AnonymousUser()
하지만 우리는 비로그인 사용자의 웹소켓 통신 연결을 아예 배제했기때문에,
이 부분을 생략해줬다.
그런데 이 request.user와 anonymousUser를 이용한 유용한 사용법 하나를 배우게되었다.
class View():
if not isinstance(request.user, AnonymousUser):
isinstance로 request.user와 anonymousUser를 검사하는것이다.
이 작성법으로 request.user가 로그인한 유저인 경우만 조건문을 만족시키도록 할수있다.
비로그인 유저가 바로 이 인스턴스라는 부분도 아주 유용한 발견이고,
간결하지만 유용한 작성법인 것 같다.
지난번 나는 request.user를 쓰는것 만으로,
로그인한 지금의 요청 유저를 가져올수 있다고 배운점을 적었었다.
그때 나는 이런 구문없이 request.user가 없으면 없는대로 에러가 발생하고,
이 에러가 또한 권한없는 사용자에 대한 막는 처리가 된다고 정리했었다.
하지만 위처럼 적어준다면 에러를 만나게 하는게 아닌, 백엔드 동작을 배제 시켜줄수 있겠다.
유저는 에러를 안만나도 되고, 코드는 조건문 분기를 통과해가니 동작이 적합하다.