장고(Django)로 로그인 구현하기
오늘은 장고에서 어떻게 로그인 페이지를 구현하며, 로그인 로직을 구현하는지 쉽고 자세하게 글로 써보려고 합니다. 사실 평소에 배운 게 있어도 이렇게 글로 써본 적이 없었는데, 오늘이 처음이네요 하하하핳!
최대한 쉽고 자세하게 설명하려고 하니, 그대로 따라오시면 문제 없을 거에요!
장고 로그인 구현 과정
1) 로그인 페이지로 이동할 하이퍼 링크 생성
# 앱폴더/index.html -> 대충 저는 인덱스 페이지에 하이퍼링크 만들 생각입니다~
<a href="{% url 'accounts:login' %}">LOGIN</a>
accounts라는 앱 폴더 이름의, login이라는 url name으로 이동하도록 DTL로 작성해 줍니다.
=> 만약 앱폴더가 없다면 만들어야겠죠?
- accounts 앱 생성 및 settings.py에 앱 등록
- 프로젝트/urls.py에서 accounts.urls로 이동
![[Django] 로그인, 쉽고 자세한 구현 1 [Django] 로그인, 쉽고 자세한 구현](https://yesam.kr/wp-content/uploads/2024/04/image-optimized.png)
2) accounts/urls.py에 url 추가
app_name = 'accounts'
urlpatterns = [
path('login/', views.login, name='login')
app_name은 ‘accounts’로 지정하고 url을 추가해주면 됩니다.
3) accounts/views.py에 뷰함수 작성[1/2]
from django.contrib.auth.forms import AuthenticationForm
def login(request):
# POST 요청이 왔을 때는 일단 PASS해 줍니다.
if request.method == 'POST':
pass
# POST 요청이 아닐 때 로그인 페이지 렌더링
else:
form = AuthenticationForm()
context = {
'form': form,
}
return render(request, 'accounts/login.html', context)
먼저, 로그인에 필요한 AuthenticationForm을 import해줍니다.
그리고 로그인 페이지를 렌더링 해야하니, form이라는 인스턴스를 AuthenticationForm으로 생성해주고, context에 담아 렌더링 해줍니다.
4) accounts/login.html 작성
<h1>로그인</h1>
<form action="{% url 'accounts:login' %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
이제 로그인 폼을 작성해 줍니다.
- ‘accounts:login’ url로 다시 로그인 정보를 전송해주기 위해 적어주고요.
- csrf_token 도 넣어줍니다.
- {{ form }} 으로 넣어도 되지만, 로그인과 비밀번호 입력이 같은 1줄로 나오기 때문에, p태그로 감싸 2줄이 나오도록 form.as_p로 작성해줘도 됩니다.
5) accounts/views.py에 뷰함수 작성[2/2]
from django.contrib.auth import login as auth_login
def login(request):
# 이제 POST로 요청이 올테니 이 부분을 완성하면 됩니다.
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
auth_login(request, form.get_user())
return redirect('articles:index')
else:
...
- login을 시켜주기 위해서는 login 함수를 import해줘야 합니다.
- 이때, 이미 우리가 login 함수와 같은 이름으로 함수를 작성 중이었기에, import를 할 때, auth_login 등의 다른 이름으로 import를 해주면 됩니다.
- 이때, 이미 우리가 login 함수와 같은 이름으로 함수를 작성 중이었기에, import를 할 때, auth_login 등의 다른 이름으로 import를 해주면 됩니다.
- AuthenticationForm으로 form 인스턴스를 또 생성하는데요,
- 이때 첫번째 인자로 request, 두번째 인자로 입력받은 데이터(request.POST)를 넣어주면 돼요.
- 이때 첫번째 인자로 request, 두번째 인자로 입력받은 데이터(request.POST)를 넣어주면 돼요.
- form의 유효성 검사를 진행합니다. 유효하다면, auth_login으로 로그인을 시켜줍니다.
- auth_login에서 첫번째 인자는 request이고, 두번째 인자는 user 정보가 들어가야 해요.
- 그래서 form에서 user정보만 뽑기 위해 get_user()함수를 사용해 줍니다.
- 그래서 form에서 user정보만 뽑기 위해 get_user()함수를 사용해 줍니다.
- index화면으로 redirect하면 마무리가 됩니다.
휴… 첫번째 글인데, 잘 적었는지 모르겠네요 ㅋㅋㅋㅋㅋㅋ. 생각보다 시간이 많이 걸리기도 하고, 오타난 게 있을까 걱정도 되고, 잘못 알고 있는 내용을 전할까도 걱정이 되네요.
혹시 잘못된 내용이 있다면 댓글 달아주시면 감사한 마음으로 수정하겠습니다…! 도움이 되는 글이었길 바라요!
No Responses