2020.08.30_django_ sign_up, login, logout, user 탬플릿 태그 정리노트
오늘은 장고에서 제공하는 유저모델들을 통해 회원가입과 로그인 서비스를 구현해보자!!!
장고에서는 유저에 관한 것들을 지원하기 때문에 우리는 그것들을 우리가 만들었던 CRUD에 녹여보고, 앱마다 url을 관리해주기 위해 url 상속도 같이 포스팅 해볼 것이다.
그 때 보통 장고에서는 기능당 한 앱을 만든다고 했는데 왜?
-- 현재 프로젝트에서 기능별로 정리해두면 고치기도 쉽고, 나중에 똑같은 기능이 다른 프로젝트에서 필요하게 되면, 앱단위로 가져와서 쓸 수 있기 때문에 앱의 재사용성도 높일 수 있다.
자 이제 그럼 로그인과 회원가입을 담당할 account 앱을 만들어주자.
먼저 가상환경을 실행하고 manage.py 가 있는곳으로 경로를 바꿔주자.
가상환경 생성 및 실행 방법 , 경로 설정 등은 밑의 장고 첫 포스팅에 적혀져있으니 오늘은 설명 Xx ! 또한 장고는 연결 되는 내용이 많아서 같이 차근 차근 첫 포스팅 부터 같이 해보면서 따라해보면 좋을 거 같다.
korinkorin.tistory.com/3?category=938113
manage.py 가 있는 곳에서 python manage.py startapp account 명령어를 통해 앱을 만들어주자!
앱을 만들어주면 가장 먼저 해야할 일이 뭐였지!!
프로젝트에 있는 settings.py 에서 우리가 설치한 앱이름을 써서 알려주자!!!!!! 앱이름 뒤에 콤마쓰는 것은 그냥 다음에 서줄 것들을 대비해서 쓰는 거라 안써도 되지만 다음을 위해 쓰는 거 추천!
account 앱의 기능들을 먼저 써주기 전에, 앱 별로 url을 관리해주는 것 먼저 짚고 넘어가자.
URL 상속
말 그대로 url 상속은 지금 보면 사진처럼 프로젝트 밑에 있는 url을 각 앱별로 하나씩 만들어줘서 앱마다 쓰인 url을 정리해주기 위함이다! 그렇게 되면 수정할때도 그 기능 밑에 있는 url로 들어가 관리해줄 수 있기 때문에 훨씬 편하고 정돈된 느낌을 준다. 상속을 한번 해봅씨댜
프로젝트 url 에 가면 이런 문구가 path 위에 써져있다.
다른 urlconf 를 가져올 때에는 include라는 기능을 가져와 주고,
urlpatterns 에다가 path('blog/', include('blog.urls')) 라는 형식으로 써줘라. 라고 되어 있다. blog 라고 적힌 곳이 앱 이름이다! 그럼 차례대로 하면 앱별로 url을 관리해줄 수 있겠군 차례대로 ㄱㄱ
자 깔꼬롬하게 main 앱 관련 url은 잘라놓고 프로젝트 url에서는 include 를 불러와 path에다가도 main.urls 를 include 해줬다.
그 다음에는 main 앱 안에다가 urls.py 를 만들어주고,
복잡할 것 없이 우리가 써줬던 모든 url 들을 여기다가 잘라내서 붙이면 된다. 지금은 main 앱 관련 url 밖에 안써줘서 전부 일단 가져오고, 나중에는 해당 앱 기능들을 하는 url을 그냥 다 가져와서 이렇게 붙여주면 된다는 말씀!
그리고 뷰로 가져올 때 프로젝트 밑 전체 url 에서는 main.views 라고 가져왔지만, 그것은 main안에 있는 views 를 가지고 와라 였기 때문에 지금 main 앱 안에 있는 urls 에서는 main을 써줄 필요 없이 .views를 통해 현재 앱안에 있는 views를 가지고 와라고 하면 된다!
이렇게 써주고 python manage.py runserver 를 통해 서버를 실행 시켜주면,
짝짝 모든 기능들이 자동으로 연결되어 작동이 잘된다!
이제 본격적으로 회원가입, 로그인을 담당하는 account 앱으로 가서 기능을 만들어보자
우리는 먼저 회원가입을 만들건데 , 장고 admin으로 들어가보면,
이미 회원을 관리하는 user 모델이 장고에 있다! 그래서 우리는 장고에서 만들어진 회원가입 폼을 쓸거기 때문에 따로 모델로 만들어주지 않아도 바로 만들수가 있다.
장고 공식 깃허브에 들어가면,
AbstractUser 라는 것을 상속 받아서 만들어진 장고 user 모델을 볼 수가 있다. 우리는 오늘 이 모델을 써줄 것이다!
먼저 index.html 로 가서
여기 보이는 대로 맨 위에 회원가입 버튼을 만들어 준다.
와 정말 안이쁘게..^^ (css 에 밑에 글작성 박스 margin-top 30 정도 줬다. 넘어가도 될 거 같아서 뭐 적어만 놓게씀. )
버튼이 생성 되었지만 우리는 이 버튼을 누르면 회원가입이 되는 html로 넘어가면 될테니,
account 앱 안에 장고에서 html 파일을 담아놓는 폴더 templates 을 만들어주고, sign_up.html 을 하나 생성해주었다.
그러면 장고에서 만들어져 있는 폼을 가져온 뒤 우리는 연결을 시켜주고 착착 진행대로 하면 회원가입은 나름 간단...? 하게 된다.
차근차근 해보쟈.
먼저 뷰에서 장고의 UserCreationForm을 바로 들고와 주었는데,
워..^^ 우리는 감사하게 이 폼을 바로 가져와서 쓸거다.
하나하나씩 본다면, 주석처럼 먼저 regi_form 에 우리가 쓸 폼을 담아와주고 성공적인 데이터를 저장하기 위해 데이터유효성을 검사하는 함수를 작성해준 것이다. 이렇게 기능을 해줬으면?
연결들을 착착 시켜보자.
아까처럼 url을 연결시켜주려면 또 앱안에 있는 url이기 때문에
프로젝트 url 에서 다시 include 해주고,
account.urls.py 로 가서
이렇게 우리가 지금까지 해왔던 것처럼 뷰를 연결해주자! 흐어 경로가 처음할 때는 증맬 ... 헷갈리는 군 차근차근 다시 그럼 기능 함수도 작성해줬겠다. url 로 작성해줬겠다. 그러면!!!!! html 로 가서 이제 이 폼만 띄워주자아
쟌쟌쟌..띄워주자.. 그럼 성공일까나..
아 맞다 인덱스에서 버튼에 링크를 안걸어줬다..ㅎ main 앱에 있는 index.html 로 들어가서,
여기다가 장고 템플릿으로 html을 불러와 준다. ㅎㅁㅎ 그러면,
오.. 뭔가 엄청난 것들이 들어와있다.. 회원 가입 테스트테스트
회원가입이 유효한 데이터면, 인덱스로 돌아와지고, ( 회원가입 조건 생각보다 까다롭다.. 안넘어가고 새로고침 되는 것 같다면 조건을 잘 읽고 가입해보자! )
그러고 admin 에 들어가서 성공적으로 user 에 내가 가입한 것이 들어가 있는게 보인다!!!! 얄루 이제 로그인 , 로그아웃을 한번 해보자.
요번에는 회원가입은 폼을 들고와서 써줬다면, 로그인 로그아웃은 기능을 하는 뷰 자체를 들고 와줄 수가 있다. 이것도 장고에서 미리 만들어놓았기 때문이지..짝짝짝짜ㅏ짝
우리는 이 기능을 들고 올 것이다!! 뷰는 어떻게 들고오느냐
url 에서 써주면 되는데, account.urls 로 가서
로그인 로그아웃은 둘다 쉬워서 같이 들고 와봤다. 요롷게 써주게 되면 따로 뷰를 작성할 필요 없이 장고에서 제공해주는 뷰들을 들고와준다.
그리고 main 에 있는 index.html 에 가서 ( 흐어 경로 항상 잘 찾아가자 나는 고생함.. ++ 팁 컨트롤 + T 누르면 검색으로 찾을 수 있지만 우리는 흐름 익힐거니까 옆에서 앱별로 잘 찾아 들어가보시기 추천 )
이렇게 버튼을 만들어주고 들어가서 테스트를 하면,
ㅇㅎ html을 안적어 줬네... 근데 경로가 registration/login.html 로 적혀있다. 우리가 html 파일들을 templates 에 넣어줬던 것처럼 로그인은 registration 여기다 넣어주라고 정의 해준 거군!! 그래서 템플릿안으로 들어가서
요롷게 만들어주믄
요롷게 잘 들어간다! 그냥 로긘은 html 에 확인용으로 적어준 것 이제 폼을 띄워보자!!
form 이름은 그냥 form 으로 해주었따. 이렇게 하면,
폼이 이렇게 자동으로 잘뜬다 짝짝
로그인을 하게 되면,
어우어우... 증맬 어렵균... 쓰라는 방법이 참으로 많군뇨 맞춰줍씨다.. 다 만들어 주셨다는데 해야쥬..
(참고로 저는 맨 처음에 account 라고 해줬는데, 여기서는 accounts 라고 해줘서 s 를 settings.py 안에 있는
INSTALLED_APPS 과 url include 와 폴더명 전부 s 를 붙여 주었는데 안써줘도 상관은 없지만 s 붙이는 게 좋다네여 찝찝 하면 저처럼 고치삼! )
이렇게 깃허브를 주우우우욱 읽다보면,
settings 에 있는 LOGIN_REDIRECT_URL 여기로 보내줘라라고 뜨게 됨미다. 그래서 세팅스로 우리는 가서
후.. 이렇게 적어주면 인덱스 페이지로 넘어가겠지..이제는 젭알..
휴 인덱스로 잘 뜨게 되는데, 휴 일단 로그인이 되었는지 알길이 없지만, 표시는 밑에서 해주고 로그아웃 구현을 한번 적어봅씨다.
아까 우리가 뷰에서 적어줬으니 이번에는 어디로갈까나.... 한번 로그아웃 버튼을 눌러보겠음
....^^ 로그아웃 url 로 가는군여 얘도 마찬가지로 인덱스로 가야함미다 세팅스로 또 갑씨다..
자 요롷게 하며눈 잘 됨미다.. 근데 아무러ㅓㅓㅓㅓㄴ 표시도 없이 로그인이 되었는지 안되었는지는 모르니 이제 user 템플릿 태그르 활용을 해볼까여.
훠 복잡해 보이지만, 말그대로 인증된 유저라면 ( 로그인 된 유저라면 ) 로그아웃 버튼만 나오게 되고,
회원가입을 해야하거나, 로그인을 안하면 회원가입과 로그인 버튼을 나타내줘라는 것을 장고 템플릿 문법으로 if 문을 활용한 것임미다. 결과를 볼까여.
로그인을 하지않은 유저 즉, 인증되지 않은 유저는 회원가입 또는 로그인 버튼만 뜨게 됩니다.
회원가입을 하고 로그인을 하게 되면 usename 이 뜨게 되면서 이렇게 로그아웃 버튼이 옆에 생성 됩니다...
ㅠㅠㅠ오늘의 교훈 ㅠㅠㅠㅠㅠ 만들 자신이 없으면 들고오자.. 근데 들고오는 것도 어렵다............................흑흑........
뷰와 ModelForm 의 차이를 잘 알고.. 잘 들고오자.... 장고에 있는 기능을 잘 알고 활용해보자... 어떻게 보면 간단해보이지만 제일 배울 점이 많았던 포스팅 같다.
다음에 잘하게 되면 커스텀 하는 방법도 한번 올려보게씀미다 오늘의 포스팅 끝끝!
'django' 카테고리의 다른 글
2020.09.02_django_template 상속 (0) | 2020.09.03 |
---|---|
2020.09.01_django_makemigrations,migrate (2) | 2020.09.02 |
2020.08.27 _Django_ Static , Media _정리 (4) | 2020.08.28 |
2020.08.23_django_CRUD_2 (0) | 2020.08.24 |
2020.08.20 django_CRUD_1 (3) | 2020.08.21 |
댓글