관리 메뉴

Storage Gonie

42. (app3) Django 로그인과 로그아웃 구현하기 본문

웹개발/Django 웹서비스 개발(인프런)

42. (app3) Django 로그인과 로그아웃 구현하기

Storage Gonie 2019. 2. 22. 04:26
반응형

장고는 full framework이기 때문에 기본적으로 인증기능을 가지고 있다.

장고에서는 jango.contrib.auth.modes의 User클래스가 제공되어 모델쪽에 특별한 코딩은 필요가 없다.


1. base.html에서 아래의 부분을 통째로 아래의 것으로 교체.

- 로그인 했을 때는 사용자이름, 로그아웃, Admin 버튼을 보여줌

- 비로그인 상태일 때는 로그인, Admin 버튼을 보여줌.

- 디자인만 보여지고 작동하지 않던 버튼에 url을 추가해준다.

<ul class="nav navbar-nav navbar-right">
<li><a href="#"> <span class="glyphicon glyphicon-user"></span> Login</a></li>
<li><a href="#">Logout</a></li>
<li><a href="{% url 'admin:index' %}">Admin</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
{% if user.is_active %}
<li><a href="{% url 'login' %}"> <span class="glyphicon glyphicon-heart"></span> {{user.username}}</a></li>
<li><a href="{% url 'logout' %}">Logout</a></li>
{% else %}
<li><a href="{% url 'login' %}"> <span class="glyphicon glyphicon-user"></span> Login</a></li>
<li><a href="{% url 'admin:index' %}">Admin</a></li>
{% endif %}
</ul>


2. 쉘에서 유저 등록해보기

- "python manage.py shell"

- "from django.contrib.auth.models import User"

- "user = User.objects.create_user('chiken','chiken@out.org','1234')"      #아이디, 이메일, 비밀번호 순

- "user"

- localhost:8000/admin으로 들어가서 '사용자(들)'을 클릭해 잘 들어갔나 확인



3. mysite/urls.py에 auth 관련 url 추가하기

- 이제 html에서 href="{% url 'login' %}" "{% url 'logout' %}" 를 사용할 수 있게됨.

- 로그인 버튼을 클릭하면 즉, href="{% url 'login' %}" 를 링크해주면 localhost:8000/accounts/login/ 페이지로 자동으로 넘어감.

- 이때 보여지는 로그인 페이지는 4번에서 만들어줌.

- auth.urls를 include할 경우 아래와 같은 url들이 포함됨.

url(r'^accounts/', include('django.contrib.auth.urls')),
^login/$ [name='login']
^logout/$ [name='logout']
^password_change/$ [name='password_change']
^password_change/done/$ [name='password_change_done']
^password_reset/$ [name='password_reset']
^password_reset/done/$ [name='password_reset_done']
^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ [name='password_reset_confirm']
^reset/done/$ [name='password_reset_complete']

4. kilogram/templates/위치에 registration폴더 생성, login.html생성

- 지정된 경로나 파일명은 auth의 views에 미리 정해져 있는 것임. 장고의 소스파일을 열어보면 알 수 있음.

href="{% url 'login' %}" 를 통해 연결되는 로그인 페이지 만들기

-  템플릿 확장사용

- 로그인한 사용자가 접속하면 유저이름을 출력하고 , 로그인 단추를 보여줌

- 비로그인 사용자가 접속하면 로그인 폼을 보여줌.

- 로그인 폼은 post로 자기 자신한테 보내게 되어있음. 따라서 로그인 실패시에 에러문 출력. 

{% extends 'kilogram/base.html' %}
{% block content %}

{% if user.is_active %}
<h2> Welcome, {{user.username}} </h2>
<a href="{% url 'logout' %}">로그아웃</a>

{% else %}
{% if form.errors %}
<p>ID나 비밀번호가 일치하지 않습니다.</p>
{% endif %}

<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<input type="hidden" name="next" value="" />
{{ form.as_p }}
<button type="submit">로그인</button>
</form>

{% endif %}

{% endblock %}

5. settings.py 맨 아래에 LOGIN_REDIRECT_URL 추가

- 로그인에 성공하면 디폴트로 localhost:8000/accounts/profile/ 로 연결되는데 이것을 변경해준다.

- 로그인에 성공했을 때 리다이렉트로 연결되는 url을 변경.

- 아래와 같이 해주면 localhost:8000/kilogram으로 이동한다.

LOGIN_REDIRECT_URL = '/kilogram/' # 로그인에 성공했을 때 리다이렉트로 연결되는 URL 지정.

6. kilogram/templates/registration/logged_out.html 생성

- 로그아웃 버튼을 누르면 여기 페이지로 이동됨.

{% extends 'kilogram/base.html' %}
{% block content %}

<h2> 잘 가요, 안녕. </h2>
<p><a href="{%url 'login'%}">다시 로그인하기</a></p>

{% endblock %}


반응형
Comments