728x90
반응형

Q&A with 튜터님


  • 내가 이해한 로직
    1. url 연결
    2. url에 연결되는 views 작업
    3. views가 띄워주는 html 작업 (forms 등)
    4. html의 input으로 입력받은 걸 db에 넘겨준다.
    5. url 요청
    6. url에서 호출하는 views 호출
    7. views 중에서도 호출된 함수 수정
    8. 함수에서 render로 사용자한테 html을 띄워준다
  • 튜터님 스타일
  • views에선 템플릿 가져오는 렌더링 작업 또는 다른 모델을 가져와서 작업한다는 식으로 그때그때 무슨 작업을 할지 따라간다. 로직을 외우기보다는 만들어 가면서 익혔다.

타임어택


  1. mutable과 immutable의 차이 : 변수를 할당해주고 값을 바꿨을 때 차이 발생
  2. numbers가 들어온 걸 고려 못하고 for문의 리스트 자리에 range로 작성한 게 아쉬웠다.
  3. 마지막 문제 정답률 낮은데 맞춘 건 좋은데, 굳이 /4는 왜 했는지 아직도 의문
  4. list(filter(람다, 리스트))
  5. pprint 플래그
    • width : pprint할 때 가로 길이를 얼마나 줄 건지 결정
    • sord_dicts=False : pprint는 원래 자기가 알아서 딕셔너리의 키값을 기준으로 알파벳순으로 정렬하는데, 그걸 못하게 한다.
  6. sort와 sorted의 차이 : 원본이 남냐 안 남냐
  7. 리스트 생성시 list() vs. []
  8. : 전자는 형변환이 가능하지만 후자는 형변환이 불가능하다. 하지만 빈 리스트를 만들 때는 후자의 빈도가 높다.

기타


  1. venv는 깃헙에 업그레이드 하지 않는다. 보안성 문제도 있고, 가져가는 사람의 패키지와 버전이 맞지 않을 수 있다.
  2. git 명령어에서 -r : recursive, 폴더와 연관되어있으면 -r을 적어야 하는데, 폴더의 폴더의 폴더의 폴더를 재귀적으로 돌면서 반복적으로 적용하기 때문이다.

흐름 익히기 위해 흐름 위주로 작성!

회원가입 기능 만들기


💡 회원가입 데이터가 user와 관련돼 있으니 user 앱에서 진행한다.

  1. user앱의 **views.py**의 singe_up_view 함수에 HTTP 요청 방식이 GET인지 POST인지 구분해 코드를 작성한다.
  2. **signup.html**의 **<form>** 태그의 속성에 method와 action을 추가하고, 보안을 위해 **{% csrf_token %}**를 작성해준다.
    • <form> : 화면에 있는 데이터를 서버로 전송할 때 사용하는 태그
    • action : 어떤 url로 전달해줄 건지 적어준다. 마지막에 꼭 / 적어주기.
    • <form> 안에 <button> : 해당하는 해당 url로 form을 실행시켜 POST 방식으로 데이터를 보낼 수 있게 도와준다.
  3. singup.html의 <inpu>에 입력했던 데이터들이 name에 따라 views의 **sing_up_view()** 함수에 들어가게 된다.
  4. UserModel 임포트하고 request.POST.get(’데이터명’, None) 작성. request.POST.get을 통해 데이터베이스에서 해당 데이터를 가져온다.
  5. 패스워드가 일치하지 않을 때 render로 회원가입 페이지를 띄우는 html을 띄운다.

로그인 기능 만들기


💡 session은 사용자의 정보를 저장한다.

  • 이어주는 url을 이미 작업했으니 url과 연결되는 views를 작업한다.
  • 화면에 글자를 띄우기 위해 from django.http import HttpResponse를 해준다.
  • method가 POST 방식일 때 return HttpResponse (”로그인 성공!”)
  • signin.html의 form 태그에 action과 method 속성을 추가한다. 밑줄에는 보안을 위해 **{% csrf_token %}**를 작성해준다.
  • 흐름
    • form 태그 실행
    • 설정해 놓은 url로 method에 정의한 방식대로 요청 with username과 같이 html에서 넘겨주는 데이터
    • 해당 데이터를 가지고 url에서 호출하는 views의 함수 실행
  • 로그인은 데이터베이스에 존재하는 사용자만 할 수 있으므로 사용자 데이터베이스 모델인 UserModel을 사용해 사용자를 불러온다. 이때 UserModel은 이미 데이터베이스와 연결돼있는 객체로, UserModel에서 어떤 데이터를 가지고 올 건지 괄호 안에 적어준다.→ 결과적으로 me에는 회원가입한 사용자들의 데이터가 담긴다.
  • ⇒ me = UserModel.objects.get(username=username)
  • 저장된 패스워드와 입력된 패스워드가 동일할 경우 세션에 사용자의 이름을 저장한다.사용자를 세션에 추가해 로그인 상태로 만들어 주고, 아니면 로그인 화면을 다시 띄워준다.
  • if me.password == password: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교 request.session['user'] = me.username # 세션에 사용자 이름 저장 return HttpResponse("로그인 성공!") else: # 로그인이 실패하면 다시 로그인 페이지를 보여주기 return redirect('/sign-in')
반응형

'Programming > TIL and WIL' 카테고리의 다른 글

220926 Today I Learned (TIL)  (0) 2022.09.26
WIL  (1) 2022.09.26
220922 Today I Learned (TIL)  (1) 2022.09.23
220921 Today I Learned (TIL)  (0) 2022.09.22
220920 Today I Learned  (1) 2022.09.20

+ Recent posts