[SSAC X 코딩온] (2021.09.02) Django로 CRUD 구현하기_02

RyuSW·2021년 9월 4일
0
post-thumbnail

📚 지난 수업 Review


  • views.py 에서는 alert를 띄울 수 없다.

    • Alert함수는 자바스크립트 함수인데 views.py는 python문법만 적용 가능

    • views.py에서 alert에 상응하는 Python으로 처리를 하고 싶다!

      • 백엔드 코드 : 서버가 실행한다.

      • 프론트엔드 코드 : 클라이언트(Web브라우저)가 실행한다.

      • Django의 템플릿 언어는 백엔드 프로그램이기 때문에 백엔드 코드 언어이다.

      • 웹브라우저는 서버가 전달한걸 받은 다음에 해석 및 실행하는 것이다.

      • alert()같은 자바스크립트 언어는 프론트에서 쓰고 있고 코드를 받은 다음에 해석을 하기 시작한다. 따라서, 이미 서버는 자기가 할 거 다 한 다음에 모든 계산을 다 한 다음에 웹브라우저에 이렇게 변환한 결과를 넘겨버린다.

      • alert()는 자바스크립트 문법이고 실제로도 웹브라우저에 무언가 경고창을 띄우기 위한 용도이다. → 그런데, 자바스크립트는 프론트엔드잖아! 그리고 웹브라우저가 경고창을 띄운다는 거는 이미 웹브라우저 입장에서는 서버가 다 실행을 완료한 코드를 받은거잖아! → 그러면 서버 이후에나 실행될 무언가를 하고 싶기 때문에 alert를 쓰는거잖아. 그런데 views.py에서는 서버 단계에서 할 작업들이자나. 따라서 안된다.


  • 회원가입할 때 중복된 회원이 존재할때 다시 처음으로 돌아가게 하고 싶다면,

    • alert( { { err } } );

    그럼 저 signup.html 파일이 {% ... %} 없을땐 '클라이언트 코드'라고 불릴 수 있는 것이고 있으면 서버에서 먼저 수행하고 클라이언트로 전달해준다는 뜻이네요?


  • 라디오버튼이 왜 안넘어가는가

    • div태그에 id를 주면 안되고 input태그들에 모두 각각 주면 된다.

  • Makemigrationsmigrate 의 차이

    • makemigrations : DB 형상 관리에 대한 보고서를 작성한다.

      • 20210902 user테이블을 삭제하겠다. member테이블을 생성하겠다
    • migrate : 보고서 작성 내용을 그대로 실행시킴


  • DatetimeField가 안나온다면?

    • AutoTimeAdd는 왠만하면 거의 숨겨주고 데이터가 삽입되는 시점에서 임의로 바꾸게 된다면 데이터는 정확성을 보장할 수 있다.

  • post로 데이터 저장은 성공했습니다만, get으로 db의 데이터를 불러오는게 안됩니다.
    (= 브라우저에 값을 띄우는게 안됩니다.)
    integrityError at / dontgiveup / registered not null constraint failed : member_user.useird 해결도중 위와 같은 에러가 나서
    일단 models.pynull = true 를 넣어서 에러는 해결했고, admin 서버에 데이터는 들어가나, 브라우저에 값을 띄우는게 안되고 있습니다.

    • logged 화면에 {% for문 %}을 입력안하면 웹브라우저에 출력이 안되니 꼭 써줄 것!

    • filter는 조건에 대해 검색만 가능하다고 하는 것이지 조건을 필터링하는 것이 아니다.

    • 검색 조건을 갖고 오겟다는 뜻 해당하는 데이터만 검색해서 변수에 저장하는 것이지 조건을 저장하는 것이 아님.


  • 로그인을 한 사람은 한 사람밖에 없을것이다. 근데 그 한 사람을 위해서 for문을 돌리는 것이 타당한가? 안해도 되지 않나?

    • 데이터 처리는 view가 하는 것이다. 쿼리셋을 하나의 데이터로 분할하는 것은 view가 처리하는 것이다. 장고템플릿 언어에서 쿼리셋이 넘어왓을 때 각자의 쿼리셋 하나하나를 어떻게 처리하는건지 알고 싶다?


📡 형상관리란?


🎈 git (소스 형상 관리)

  • 그 날 그 날 작업한 것을 하나의 코드에 대해서 누가 작업했는 지 기록하는 역할을 수행함

  • 9월 1일에 프로그래밍을 했어, 근데 거기서 user라는 테이블을 쓰고 id,password 등을 구성했어,

  • 9월 10일이 되었는데 중간에 주번 수집하지 말라고 법이 바뀌면 수집한 주번 정보를 날려야댐. 따라서 DB를 바꿔야함.

  • 9월 15일이 되서 9월 1일의 DB를 다시 가져와야 함. 그럴 땐 소스를 이전 버전으로 돌리면 됨.


🎁 DB 형상관리

  • 변경 내역을 트래킹 해야하는데, DB의 경우 수정이 어렵기 때문에 이슈가 되는 과제


🔖 Django - CRUD 비밀번호 변경하기


  • 비밀번호 변경 :

    • UPDATE문 : 변경할 것을 변경한 후에 .save() 로 저장

    • get은 복수의 데이터에서 save나 delete는 사용할 수 없다.

    • object는 하나만 있어야 함

    • delete문이랑 save문은 앞에 있는 유저가 하나여야함

    • 복수개가 들어가게 되면 오브젝트를 못 씀


  • 복수 개를 지우기 위해서는 filter().delete()를 써주면 된다.

# 회원 비밀번호 수정, 삭제

def login(req):
    user = User.objects.get(username = '이상훈')
    user.password = 'qwerty'
    user.save()
    user.delete() # save, delete 앞에 있는 user가 오브젝트여야함
    return render(req, 'login.html')

  • pk : primary key, 한글로는 기본키

  • 기본키 : 하나의 레코드를 다른 레코드와 식별하게 해주기 위한 "고유값"

    연속적인 숫자로 하는 것이 일반적

    • 테이블을 설계할 때 기본키를 잡기 위한 행을 따로 둔다.

    • Django는 우리가 만들지 않아도 순번 같은 기본키를 알아서 생성해준다.

    • filter와 달리 get은 검색결과에 해당하는 하나의 객체만을 반환



✅ 실습 과제 - 비밀번호 변경, 회원 탈퇴 구현


views.py


# 비밀번호 변경 페이지
def chg_pw(req):
    return render(req, 'chgpw.html')


# 비밀번호 변경 완료 페이지
def chged_pw(req):
    change_passward = User.objects.get(password=req.POST.get('pw'))
    print(req.POST.get('id'))
    print(req.POST.get('pw'))
    
    change_passward.password = req.POST.get('new_pw')
    change_passward.save()

    return render(req, 'chgedpw.html', {'info1': req.POST.get('id')})


# 회원 탈퇴 페이지
def mem_out(req):
    return render(req, 'memout.html')


# 회원 탈퇴 완료 페이지
def mem_out_success(req):
    delete_user = User.objects.get(userid=req.POST.get('del_id'), password=req.POST.get('del_pw'))
    delete_user.delete()
    print('회원탈퇴 완료')
    return render(req, 'memout_success.html')

😫 수업 후기


profile
배운 것은 항상 그 때 문서화하자!

1개의 댓글

comment-user-thumbnail
2021년 9월 6일

상훈이형 벨로그 2개에요?

답글 달기