일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 입출력 패턴
- vscode
- double ended queue
- 자료구조
- 매크로
- getline
- UI한글변경
- 프레임워크와 라이브러리의 차이
- 표준 입출력
- 2557
- correlation coefficient
- EOF
- 구조체와 클래스의 공통점 및 차이점
- c++
- iOS14
- string 메소드
- string 함수
- 이분그래프
- 장고란
- 엑셀
- 시간복잡도
- 알고리즘 공부방법
- Django Nodejs 차이점
- scanf
- 입/출력
- 연결요소
- Django의 편의성
- Django란
- k-eta
- 백준
- Today
- Total
Storage Gonie
42. (app3) Django 로그인과 로그아웃 구현하기 본문
장고는 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 %}
'웹개발 > Django 웹서비스 개발(인프런)' 카테고리의 다른 글
44. (app3) Django id, pw만 입력받는 회원가입에서 email까지 입력받도록 추가 (0) | 2019.02.22 |
---|---|
43. (app3) Django id, pw만 입력받는 회원가입 구현 (2) | 2019.02.22 |
41. (app3) 킬로그램 앱 초기화 (0) | 2019.02.21 |
40. app1, app2 앱 통합하기 (0) | 2019.02.21 |
39. (app2) Django 템플릿 확장을 다른 모든 템플릿에 적용 (0) | 2019.02.20 |