[쪽지시험] 220927 #2

2022. 9. 28. 09:49스파르타코딩클럽[AI트랙 3기]/타임어택(쪽지시험 등)

▶내가 쓴 답안

손을 못댔다... 시작을 어떻게해야할지 모르겠음. 이해한 구조로 보면 흐름따라 차근차근하면 될 것 같고 어렵지 않다고 했는데 왜 그렇게 말했는지는 알 것 같다. 

 

▶풀이

0.문제에 대한 설명

로그를 남기는 것 : 자주 쓰이고 중요. 다양한 방식으로 사용. 로그는 장고에서 사용자 보는 것들이라고 볼 수 있음. 로그인 기록등은 마케팅자료, 사용자가 컴플레인 걸었을때 어떤 문제가 있는지 등 히스토리를 관리할 수 있음. 

1.model.py에 AccessLog 테이블 생성

1)*장고 설치(가상환경 세팅)

터미널에서 python -m venv venv >> venv\scripts\activate >>pip install django

잘돌아가는지 확인 : python manage.py runserver

2)models.py에 작업(필드를 2개 만들어줌)

class AccessLog(models.Model):
"""
1.default : 기본적으로 사용될 날짜를 사용자가 지정
2.auto_now : 데이터가 수정 될 때마다 갱신됨 > created_at =DateTimeField("생성시간", auto_now_add=True) +auto_now를 같이 쓰면 에러남.
3.auto_now_add : 데이터가 생성될 때 시간을 기록  updated_at =DateTimeField("접속시간", auto_now=True)
"""
  created_at = models.DateTimeField("접속 시간", auto_now_add=True) 
  location = models.CharField("접속 경로", max_length=50) #언제 어디로 접근했는지 확인하기 위함
  #user = 사용하면 로그인 연동하면 누가 접속했는지 까지 알 수 있음
  #모으고 수집하고 싶은 데이터를 자유롭게 작성 가능

2.생성된 테이블을 makemigrations/migtate 명령어를 통해 db에 반영

1)터미널에 입력

python manage.py makemigrations > create model Accesslog #그냥 파일을 생성하는 것, db에 테이블이 생기는 것이 아님.

python manage.py migrate > 데이터베이스에 마이그레이션 적용

+)sql lite viewr 익스텐션 사용

3.생성한 테이블을 admin.py에 등록

1)admin.py 에 적기

form introduce.models import AccessLog #introduce의 model에 있는 AccessLog 

admin.site.register(AccessLog)  #괄호안에는 모델이 들어가야함.

4. 사용자가 introduce 페이지에 접속했을 때, 접속 로그를 남겨주기

1)view.py  

from introduce.models import AccessLog

def introduce(request):
#case1 row 생성(access_log데이터) > access_log라는 변수에 AccessLog라는 클래스로 받아주고, 저장하기
access_log = AccessLog()
access_log.location = "introduce" #접속경로는 introduce이다.
aceess_log.save() #save가 있어야 저장됨.

#case2 >바로받아주기 
AccessLog.objects.create(
	location="introduce"
)

return render(request, 'introduce.html')

5.admin 페이지 접속해서 접속 기록 확인

+)admin 계정 만들기 :python manage.py createsuperuser

admin 계정으로 들어가면 몇번 페이지가 조회됐는지 확인가능

보기좋게 바꾸는 방법

def __str__(self):
 return f"{created_at}/ {self.location}" #언제, 어디에 접속했는지 확인 가능
 #f안에 "내가 쓰고 싶은 택스트"를 넣어서 보이게 할 수 있다.

 

 

*장고에서 field는 readonly 속성을 가짐.