1. 로그인창 연결하기
- 먼저 간단하게 urls - views - html을 정의해준다.
# views.py
def index(request):
# return render(request, 'bbs/home.html')
return render(request, 'bbs/login.html')
- 첫번째 창을 불러오는 index함수를 수정하였다.
- 처음 bbs app에 접속하게 되면, login html이 연결되도록 하였다.
- login html의 경우 header와 footer의 include가 필요없다. 따라서 {% load static %}만 해준다.
- 등록된 아이디와 비밀번호를 입력하고 sign in을 누르면 home 페이지로 이동해야할 것이다.
- urls 와 views, html에 추가적인 작업이 필요하다.
# urls.py
urlpatterns = [
path('main/', views.index, name='main'),
path('list/', views.list, name='list'),
path('login/', views.login, name='login'),
]
# login.html
# <form action="{% url 'login' %}" method="post">
# {% csrf_token %}
# .......
# <input type="text" name="id" class="form-control" placeholder="USER ID"/>
# <input type="password" name="pwd" class="form-control" placeholder="Password"/>
# views.py
def login(request):
if request.method == 'POST':
id = request.POST['id']
pwd = request.POST['pwd']
user = BbsUser.objects.get(user_id=id, user_pwd=pwd)
print('------ user param : ', id)
context = {}
if user is not None:
request.session['user_name'] = user.user_name
request.session['user_id'] = user.user_id
context['session_user_name'] = request.session['user_name']
context['session_user_id'] = request.session['user_id']
return render(request, 'bbs/home.html', context)
- 먼저 urls에 login/을 등록한다.
- login.html -> form -> action -> 등록된 url을 템플릿 메서드로 지정하고, post방식으로 데이터를 전송한다.
- post 방식이기에 장고에서는 {% csrf_token %} 가 필수적으로 붙는다.
- 아이디는 name ='id' , 비밀번호는 name='pwd'로 데이터가 전송된다.
- views에서는 다음 요청을 처리한다.
- 1. 넘겨받은 데이터에서 name으로 각 변수를 지정한다.
- 2. 정보를 통해 매핑된 model 의 클래스로부터 정보를 가져온다.
-> sql의 select * from BbsUser where user_id = id and user_pwd =pwd 와 같다.
- 3. 넘겨받은 정보가 있다면 (데이터베이스에 해당 사용자 정보가 있다면)
- 세션에 사용자 정보를 저장하고, context에 세션에 저장된 사용자 정보를 저장한다.
- render를 통해 로그인된 화면 (홈 화면)을 연결시켜준다.
# 세션에 데이터를 담는 이유
- http (web)의 특성상 내가 로그인 후 사이트 내 다른 사이트로 redirect하는 경우 context에 담긴 내 로그인정보가 사라진다.
- 이를 방지하기 위해 일반적으로 쿠키 혹은 세션을 이용하여 사용자의 정보를 유지하는 트래킹 매커니즘을 사용한다.
- 즉, 지금까지의 render(request, 'xxxx.html', context)는 context정보를 xxxx.html 까지만 전송하고, 그다음 정보는 보장하지 않는다.
- 따라서 session을 통해 전해진 데이터를 길게 유지할 수 있다. timeout이 적용되는데, 기본값은 일반적으로 30분이다.
- logout을 구현하기 위해서는 session을 clear 해 주어야 하고, 다시 login.html로 돌아가야한다.
'Study > django' 카테고리의 다른 글
django 기초 - bootstrap을 이용한 사이트 만들기 : 5. 로그아웃과 로그인세션 (0) | 2021.08.22 |
---|---|
django 기초 - bootstrap을 이용한 사이트 만들기 : 4. 가입 페이지 (0) | 2021.08.19 |
django 기초 - bootstrap을 이용한 사이트 만들기 : 2. Models, Admin Page로 데이터 관리하기 (0) | 2021.08.19 |
django 기초 - bootstrap을 이용한 사이트 만들기 : 1. 페이지 틀 구성하기 (0) | 2021.08.18 |
django 기초 - high chart 사용하기 (0) | 2021.08.17 |