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 |