login.html
{% extends 'base.html' %}
{% block content %}
{% if error %}
{{ error }}
<br>
<br>
{% endif %}
<h1>Login</h1>
<form method="POST" action="{% url 'login' %}">
{% csrf_token %}
Username:
<br>
<input name="username" type="text" value="">
<br>
Password:
<br>
<input name="password" type="password" value="">
<br>
<br>
<input class="btn btn-primary" type="submit" value="Login">
</form>
{% endblock %}
위와 같이 코드를 수정해줍니다. signup페이지와 동일 논리입니다.
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, 'login.html', **{'error': 'username or password is incorrect.'}**)
else:
return render(request, 'login.html')
login
함수를 위와 같이 수정해줍니다.
회원가입을 한 회원만 로그인이 가능한 기능을 구현하기 위해
user = **auth.authenticate(request, username=username, password=password)**
구문을 넣어줍니다.if user is not None: auth.login(request, user)
**else**
로그인을 하면 로그인 여부에따라 signup이나 글쓰기 버튼이 나오지 않게끔 해야합니다. 태그를 활용해서 수정해봅시다.
navbar관련 코드가 있는 base.html로 갑시다.
**{% if user.is_authenticated %}**
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">환영합니다. **{{ user.username }}** 님!</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{% url 'new' %}">글쓰기</a>
**<a class="dropdown-item" href="{% url 'logout' %}">Logout</a>**
</div>
</li>
**{% else %}**
<li class="nav-item">
<a class="nav-item nav-link" href="{% url 'signup' %}">Signup</a>
</li>
<li class="nav-item">
<a class="nav-item nav-link" href="{% url 'login' %}">Login</a>
</li>
**{% endif %}**
{% if user.is_authenticated %}
: 로그인이 되어있는지 물어보는 코드입니다.