일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- grafana dashboard
- subporcess path
- regex_search
- python popen
- selinux port 등록
- snmp test
- centos pyhon 설치
- c3 step graph
- telegraf
- InfluxDB
- gcc 업데이트
- CentOS7
- semanage
- gcc regex
- linux시간으로 변경
- c++ 정규식
- influxdb 설치
- c3 축 없애기
- g++ 업데이트
- python subprocess
- c3 축 가리기
- 정규식 활용
- python os
- 1697
- 정규식 문자열 출력
- c3 second
- 정규식 컴파일
- 백준
- snmp
- c3 초
- Today
- Total
리셋 되지 말자
[CSAPI] Django login, logout 구현 본문
login, logout 구현
먼저 사용자에게 보여질 templates 디렉토리를 설정한다
config/settings.py 수정
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], # 입력
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
templates 폴더를 생성
$ mkdir -p templates/login
login/urls.py 수정 - LoginView는 registration이라는 템플릿 디렉터리에서 login.html 파일을 찾기 때문에 templates의 login 디렉토리에서 템플릿을 찾도록 설정한다. 그리고 template 에서 url 설정을 편하게 하기 위해 URL 별칭(app_name='login')과 URL 네임스페이스(name='login')도 추가해준다.
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
app_name = 'login'
urlpatterns = [
path('login/', auth_views.LoginView.as_view(template_name='login/login.html'), name='login'),
]
templates/login/login.html 생성
$ vi templates/login/login.html
<html>
<head>
</head>
<body>
<h1>login page</h1>
</body>
</html>
user/login url 접속 테스트
login.html 수정
{% block content %}
<html>
<head>
</head>
<body>
<form method="post" action="{% url 'login:login' %}">
{% csrf_token %}
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %} <!-- field error -->
<strong>{{ field.label }}</strong>
{{ error }}
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %} <!-- None field error -->
<strong>{{ error }}</strong>
{% endfor %}
{% endif %}
<br>
<label for="username">사용자ID</label>
<input type="text" name="username" id="username" value="{{ form.username.value|default_if_none:'' }}">
<label for="password">비밀번호</label>
<input type="password" name="password" id="password" value="{{ form.password.value|default_if_none:'' }}">
<button type="submit">로그인</button>
</form>
</body>
</html>
{% endblock %}
로그인 성공시 모습 - django.contrib.auth 는 default로, 로그인에 성공하면 /accounts/profile/ 로 이동한다.
로그인 성공 시, redirect url 지정 - settings.py 에 LOGIN_REDIRECT_URL 을 지정 - 로그인 성공시 api/ url로 이동하도록 설정
LOGIN_REDIRECT_URL = '/'
로그인 성공시 redirect 확인 - main url로 이동하는 것을 확인(로그인 성공 시)
main url에 대한 view 정의
from django.contrib import admin
from django.urls import path, include
from csapi import views
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('csapi.urls')),
path('user/', include('login.urls')),
path('', views.index, name='index'),
]
여기까지 django 에서 제공하는 auth app을 이용하여 login 기능을 구현했다. 현재는 직접 url 을 이동하며 login 페이지를 이동해야 하므로, 이를 수정한다.
templates/csapi 생성
$ mkdir -p templates/csapi
templates/csapi/main.html 작성
{% block content %}
<html>
<head>
</head>
<body>
{% if user.is_authenticated %}
<a href="{% url 'login:logout' %}">{{ user.username }} (Logout)</a>
{% else %}
<a href="{% url 'login:login' %}">Sign In</a>
{% endif %}
</body>
</html>
{% endblock %}
csapi/views.py 수정
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request, 'csapi/main.html')
login/urls.py 수정
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
app_name = 'login'
urlpatterns = [
path('login/', auth_views.LoginView.as_view(template_name='login/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]
config/settings.py 에 logout 시 redirect url 지정
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/' # 추가
login / logout 테스트
- main 페이지 접속
- Sign In 클릭
- login 실패 시
- login 성공 시
- Logout 클릭 시
후기
로그인이 원래 엄청 어려운 작업이다. 진짜 nodejs에서 jwt로 로그인, 로그아웃, auth 기능 구현하려면 머리가 터질거 같다.
'프로젝트' 카테고리의 다른 글
[CSAPI] Django DB 스키마 설계 (0) | 2021.10.05 |
---|---|
[CSAPI] Django 회원가입 구현 (0) | 2021.10.05 |
[CSAPI] Django login app 생성 (0) | 2021.10.04 |
[CSAPI] Django csapi app 생성 (0) | 2021.10.04 |
[CSAPI] Django containerization (0) | 2021.10.04 |