Framework/Django

TIL-장고 로그인 기능(Django sign-in module)

청렴결백한 만능 재주꾼 2020. 5. 14. 21:23
반응형

일단 장고 웹 프레임워크의 튜토리얼을 마치고 처음 혼자하게 되었을 때 그 막막함이란.. 잊지말자

뭐부터 해야할지 전혀 감이 안 잡혔었다.

일단 어제와 오늘 짬을 내어 했던 것들을 정리한다.

 

 


일단 Account의 앱이 만들어졌고 그 안에서 모델을 건든다.

 

account/models.py의 장면

일단 Account라는 클래스를 만들어서 여러가지 정보를 넣을 수 있는 모델을 만들었다. 데이터베이스에 넣을 수 있는 모델스를 먼저 만들었다.(짜집기)

 

account/views.py의 import한 것들

모델을 넣고 나서 할 일은 모델이 어떻게 구현될 것인지 하는 것이다. 앱의 view를 책임지는 views.py에 들어와 필요한 것들을 집어 넣는다.

from django.shortcuts import render은 패스 여기서 쓰지않음.(튜토리얼때 쓰던거 가져옴..안될 땐 이거저거 다 긁어오게 됨)

import json ->> json형식을 읽을 때에 필요.

from django.views import view -->> 장고에서 제공하는 views .

from django.http import JsonResponse, HttpResponse -->> 응답받게 해주는 것들

from .models import Account -->> 방금 맨 위에서 내가 넣었던 것들을 불러와준다. 

 

Views의 첫번째 기능

POST일 때와 GET일 때 나뉘어서 정해줌. 누군가(내가) post를 하면 json 파일의 바디를 데이터로 지정하여  Account.objects.create(어카운트.객체를 만듦) 이름과 이메일 패스워드를 받아 저장한다.

name = data['name'] 이 뜻은 손님에게 name=옆에 것을 받으면 data 딕셔너리에 name키에 밸류를 저장하라는 뜻이다.

그렇게 잘 받아먹었으면 return 석세스 를 해준다. 응답코드는 200.

 

GET일 때는 account 의 리스트를 보내준다. 

 

 

 

Sign-in views.py화면

위와 같이 post로 받았을 때 제이슨 바디를 호출한다.

 

만약 objects를 필터해서 data['name']을 받은 것을 데이터가 똑같은게 있을 때! user를 정의하고 유저의 패스워드가 데이터안에 있는 패스워드가 같을 때 리턴 200해줌.

이름이 똑같은 게 없으면 401을 호출, 이게 다 안됬을 때는 400을 호출

 

키에러는 따로 빼고.

 

 

 

본 고장에 있는 urls.py임.

원래 여기다가(settings.py에 지정되어 있는 py파일) urls를 다 등록했었는데, 방대해졌을 때 url을 관리하기가 힘들다고 각 앱 디렉토리에 urls를 만들어서 관리하라는 소리를 듣고 나서 보는 것처럼 만들었다. 

 

account 라는 것이 주소에 들어있으면 바로 account.urls에 있는 걸 참조하라! 라는 뜻이다. 

localhost:8000/account 이렇게 치고 들어오면 바로 account에 있는 urls의 urlpattern을 따라간다.

include를 쓰려면 import 에 추가해주자. 

**주의 할 것은 메인 urls에서는 account만 적어주고 슬래쉬는 뺀다. 그리고 앱 urls에 들어가서는 앞에 '/'를 붙여준다.

 

 

 

이거시 account/urls.py 이다.

 

없던 파일을 만들다보니 복사 붙여넣기를 잘해야 한다.  그리고 from .views 에서 AccountView기능과 사인인 기능을 넣어준다. 안넣으면 뭔소리인지 장고가 못 알아 먹음. 

localhost:8000/account 뒤에 ' ' 이렇게 아무것도 없으면 AccountView.as_view()를 연결 시켜주고

localhost:8000/account 뒤에 sign-in이 있으면 SignIn.as_view()를 연결 시켜라 라는 뜻이다. 

 

오직 models.py와 views.py 그리고 두개의 다른 urls.py를 건드렸다.

이런 다음에 실험을 해본다. python manage.py runsever를 매니지.파이 있는 곳에서 쳐서 서버를 켜주고 다음의 그림처럼 타이핑한다.

 

실험을 하기 위해 httpie를 이용한다. POST를 해보겠다.

엔터를 쳤을 때 나오는 화면

기분 좋은 결과 화면

임의의 이메일과 비밀번호기 때문에 오해없었으면 좋겠다. 

 

이제 다른 url을 넣어본다. 
sign-in이 된 결과화면

이름과 비밀번호를 똑같이 적으니까 제대로 200이 리턴되었다.  

 

 

잘못된 비밀번호를 쳤을 때

이렇게 나옴 잘못된 비밀먼호

 

 

 

그리고 이름을 잘못 넣었을 때,

400으로 호출된 모습

이름이 잘못 되니까 400이 호출되었다. 아까전에 유도한대로 응답코드도 다 매니지할 수 있다. 이제 댓글기능만 만들면 된다. 더 노력해야지~~ 내일.. 오늘은 여기까지

반응형