instagram만들기(3)로그인 / 로그아웃 구현

2022. 4. 7. 13:22
  • 로그인, 로그아웃 구현 
    • 로그아웃시 바로 로그인 창으로 이동
    • 회원가입과 동시에 로그인이 되도록 함

LOGINVIEW 구현

  • 장고에는 로그인을 위한 Loginview가 존재함. 
  • 장고가 구현해둔 Loginview에 커마를 할경우 LoginView를 상속받는 클래스를 만들고 수정하면 됨
#accounts/views.py
from django.contrib.auth.views import LoginView

#방법1. 클래스 상속 >> 커스터마이징
class Login(LoginView):
...

 

  • 커마없이 장고가 구현해둔 LoginView를 있는 그대로 사용할 경우 as_view를 사용한다
    • 생성자를 활용해, 필요한 정보를 넘겨준다 ex)~as_view(template_name = 'accounts/login_form.html')
    • 지금은 이 방법을 사용(커마를 딱히 하지 않음!)
#accounts/views.py
from django.contrib.auth.views import LoginView

#방법2 : as_view() 형식으로 필요한 값을 넣어서 실행. 
login = LoginView.as_view(template_name="accounts/login_form.html")

 

LOGOUT VIEW 구현

  • 장고가 만들어둔 logout_then_login을 사용함
    • logout_then_login은 내부적으로 LogoutView.as_view()를 리턴하며 next_page를 인자로 받는다.(즉 logoutview를 쓰는 것과 다를바가 없다!)
    • 이 next_page는 로그아웃 후에 이동할 url에 관한 것으로, 인자를 주지 않으면 자동으로 settings.py에 저장된 LOGIN_URL로 이동한다.
    • 그리고 settings.LOGIN_RUL의 default가 accounts:login임
    • 따라서 추가로 설정을 해주지 않을 경우&accounts:login url에 대해 login form을 만들어 놓았을 경우, 자동으로 로그인 화면으로 이동하게 됨
    • 참고)settings.LOGIN_URL의 defualt가 accouns:login으로 되어있기 때문에, login요청페이지로 가야하는 경우(ex : @login_required 등의 장식자를 사용할 경우) accounts:login으로 이동하게 된다!
#accounts/views.py
from django.contrib.auth.views import LoginView,logout_then_login
def logout(request):
    messages.success(request,'로그아웃 되었습니다')
    return logout_then_login(request)
    #로그아웃 하자마자 로그인페이지로 보내버리겠다!
    #로그아웃의 역할도 대신함!

 

회원가입과 동시에 로그인 구현

  • 회원가입과 동시에 로그인 > views.py에 회원가입관련해서 구현해 두었던 signup함수에서, 회원가입과 동시에 바로 로그인 되도록 해주는게 제일 깔끔
  • signed_user = form.save() : 유효성 검사에 통과한 user instance를 signed_user로 받고, form에 저장
    • 이 save()함수는 modelform의 멤버함수임
    • default값으로 commit = True를 받으며 commit = True일 경우, 내부적으로 모델.인스턴스.save()를 호출하여 db에 저장해주고, 저장된 인스턴스(한줄의 데이터)를 반환해줌
    • 즉, 변수를 통해 할당시키면 저장된 인스턴스를 받을 수 있다.
    • 링크 : https://github.com/django/django/blob/4.0.3/django/forms/models.py#L532
  • 그후 로그인 상태로 만들어주는 auth의 login을 auth_login으로 받고, signed_user를 auth_login시켜줌(그러면 signed_user가 로그인 한 상태가 됨!)
from django.contrib.auth import login as auth_login

def signup(request):
    if request.method == "POST":
        form = SignupForm(request.POST)
        if form.is_valid():

        추가)signed_user = form.save()
        추가)auth_login(request,signed_user)#signed된 유저가 login됨

            signed_user.send_welcome_email().
            #model에서 멤버함수를 정의했어서 사용할 수 있다.
            
            messages.success(request,"회원가입을 환영합니다!")
            next_url=request.GET.get('next','/')
            print("next_url :",next_url)
            #post메소드여도, url을 통해 들어오는 get값이 있음
            return redirect(next_url)
    else:
        form = SignupForm()
    return render(request,'accounts/signup_form.html',{
        'form':form,
    })

 

 

추가할 부분

  • html파트

 

 

 

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

 

 

 

 

 

 

 

 

 

 

윈도우  >> 맥으로 갈아탄 것

  • 중고 M1구매
  • 기업협업에서 맥이 필수일 수가 이삳 ㅅㅂ.. 윈도우는 아예 참여를 못할 수도 있다
  • 가성비 좋은 M1..
    • 국민취업제도 > 위워크 타워 앞에 센터가 잇음
    • 예습! > 미리코드를 쳐보고 해보고 > 세션에서 질문

 

질문 

  • 프로젝트 PR

한줄의 핵심질문 > 두괄식

  • 왜 생겼는지, 해본 시도가 무엇인지

  • rebase  /  merge에 대해서 체크
  • commit ?  commit의 기준? > 기준을 먼저 정하고 1~2차 프로젝트 때 연습해볼 것
  • 구글링 꿀팁
    • "문구"
    • 특정 사이트 결과만 보기 site:url
    • 기간 설정하기 after:date

BELATED ARTICLES

more