ACHO.pk devlog

[멋쟁이사저처럼10기] Django 개발자 대나무숲 프로젝트(로그인/로그아웃 구현하기) 본문

멋쟁이사자처럼

[멋쟁이사저처럼10기] Django 개발자 대나무숲 프로젝트(로그인/로그아웃 구현하기)

Acho 2022. 7. 9. 22:22

로그인/로그아웃 구현하기

 

1. 어플리케이션 accounts 생성 + 등록

2. bootstrap에서 다운받은 html 파일 중에 login.html이 있다. 이를 template 언어를 써서 로드 시켜주면 된다. 그리고 login.html에서 필요한 부분만 남겨놓고 다 지우면 된다.

 

urls.py

  • url이 많을 경우에는 app 별로 urls.py를 만들어 include로 url를 계층적으로 관리하는 것이 더 좋다.
from accounts import views as accounts_views


urlpatterns = [
	path('login/', accounts_views.login, name='login'),
	path('logout/', accounts_views.logout, name='logout'),
	path('signup/', accounts_views.signup, name='signup'),
]

 

accounts/views.py  _ 로그인

  • authenticate 메서드 : User 객체 반환 or None 반환
  •  if user is not None : django 회원이라면 로그인을 허용 + redirect 'home' 시킴
  • 존재하지 않는 회원이라면 redirect 'bad_login.html' 
from django.shortcuts import render
from django.contrib import auth  #로그인 기능 수행

def login(request):
    if request.method == "POST":
        username = request.POST["username"]
        password = request.POST["password"]
        user = auth.authenticate(request, username=username, password=password)

        if user is not None:
            auth.login(request, user)
            return redirect('home')
        else: 
            return render(request, 'bad_login.html')
    else:
        return render(request, 'login.html')

 

bad_login.html

  • login 페이지로 다시 갈 수 있도록 링크 연결한다.
존재하지 않는 회원입니다. 다시 로그인해주세요.
<br/>
<a href="{% url 'login' %}">다시 로그인하기</a>

 

accounts/views.py  _  로그아웃

def logout(request):
    auth.logout(request)
    return redirect('home')

 

현재 로그인한 User ID 띄우기

base.html ( 로그인html )

  • {% if user.is_authenticated %} : 현재 로그인한 User라면 username를 띄운다.
  • 그렇지 않다면 '로그인' 문자열을 띄운다.
<a class="CCC" href="#" id="userDropdown" role="button"
						data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% if user.is_authenticated %}
<span class="AAA">{{user.username}}</span>

{% else %}
<span class="AAA">로그인</span>

{% endif %}
<img class="B_img" src="{% static 'img/profile.svg' %}">
</a>

 

 

로그인 버튼을 눌렀을 때 login form 이동

login.html

<form class="user" method="POST">
{% csrf_token %}
<div class="form-group">
	<input type="text" class="form-control form-control-user"
		id="username" name="username" aria-describedby="emailHelp"
		placeholder="Enter Your ID...">
</div>
<div class="form-group">
	<input type="password" class="form-control form-control-user"
		id="password" name="password" placeholder="Password">
</div>
<div class="form-group">
	<div class="custom-control custom-checkbox small">
	</div>
</div>
<br/><br/><br/>

<input type="submit" value="login!" class="btn btn-success btn-user btn-block">
<hr>
<a href="{% provider_login_url 'google' %}" class="btn btn-google btn-user btn-block">
<i class="fab fa-google fa-fw"></i> 구글 계정으로 로그인
</a>
</form>

 

로그아웃 버튼 클릭 시 로그아웃

  • logout 함수로 이동
<a class="AAA" href="{% url 'logout' %}">Logout</a>

 

로그인 상태일 때는 로그아웃 버튼, 로그아웃 상태일 때는 로그인 버튼

  • base.html 일부
{% if user.is_authenticated %}
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="{% url 'logout' %}" data-toggle="modal" data-target="#logoutModal">
	<i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>
	Logout
</a>
{% else %}
<a class="dropdown-item" href="{% url 'login' %}">
	<i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
	Login
</a>
{% endif %}
Comments