본문 바로가기

대학생활

[Django] User에 포인트 추가하기

account model에서 생성한 User에 point 속성을 넣었다. 

 

projectname/account/models.py

class User(AbstractBaseUser, PermissionsMixin):

    points = models.PositiveIntegerField(default=0, verbose_name="points")

    username = models.CharField(
        verbose_name=_('Username'),
        max_length=30,
        unique=True
    )

 

로그인을 하면 포인트 5점이 추가되게 하려고 HTML파일에 함수를 하나 추가했다.

 

projectname/templates/login.html

<script type="text/javascript">
    var a = {{ user.profile.point }}
    a += 5
    {{ user.profile.point }} = a
</script>

 

당연히 예상했지만.. 다시 user에게로 값이 전달이 안된다.. javascript로 post하는 방법은 모르기 때문에 model에서 함수를 정의했다. 정의된 함수가 어떤 특정 클래스가 실행될 때 나올 수 있도록 구성했다.

 

projectname/account/models.py

class User(AbstractBaseUser, PermissionsMixin):
    
    ...
    
    def modify_points(self, added_points):
        self.points += added_points
        self.save()
        
    ...

 

projectname/projectname/views.py

def login(request):
    if request.method == 'POST':

        ...

        if user is not None:
            auth.login(request, user)
            try:
                points = 5
            except KeyError:
                points = 0
            request.user.modify_points(points)
            return redirect(to='login_done')
		
        ...

 

이렇게 하면 url 패턴에서 함수를 작동시켜 자동으로 로그인 시 포인트가 적립된다.

urlpatterns = [

    ...

    path('login/', login, name='login'),
    
    ...
    
]

 

 

비단 로그인뿐만 아니라 다른 view나 model에도 User 객체를 임포트하여 적용이 가능하다!

'대학생활' 카테고리의 다른 글

Docker란 무언인가.. (What is Docker??)  (1) 2022.10.03
[C++] Static Polymorphism & Dynamic Polymorphism  (0) 2022.09.26
DB 관련 개념 정리  (0) 2022.09.18
터미널 git 다루면서 어려웠던 점  (0) 2022.08.24
[C++] auto 타입  (0) 2022.08.07