본문 바로가기
Python/Django

Django - 로그인 기능

by 코드뭉치 2023. 4. 4.

서버 ↔ 클라이언트 사이에서 요청과 응답을 할때, 같은 사람이 요청을 하는지 확인하려면?

 

세션(사용자 정보를 저장하는 공간)

클라이언트가 서버에 요청을 보낼 때, 서버에서 세션에 대한 고유 식별자를 생성해서, 클라이언트에게 쿠키 형태로 전송.

클라이언트는 이후 서버에 요청을 보낼 때마다 쿠키를 함께 전송하며 서버가 세션을 식별할 수 있도록 한다


로그인 기능 만들기

 

url은 연결이 이미 되어있으므로 view와 html 수정해주면 된다

 

요청이 POST라면, HttpResponse("로그인 성공!")을 

요청이 GET이라면, 로그인 화면을 렌더해주도록 view를 수정

 

HttpResponse는 Http응답을 처리하는 클래스이다

# user/views.py

from django.shortcuts import render, redirect
from .models import UserModel
from django.http import HttpResponse

def sign_up_view(request):
	...

def sign_in_view(request):
    if request.method == 'POST':
    	return HttpResponse("로그인 성공!")
    elif request.method == 'GET':
        return render(request, 'user/signin.html')

 

 

HTML 수정

메소드와 액션을 지정 - 둘의 순서는 바뀌어도 상관없음

<!--templates/user/signin.html-->

...
<form class="form-area" method="post" action="/sign-in/">
	{% csrf_token %}
...

views.py의 로그인 함수를 수정

# user/views.py

def sign_in_view(request):
    if request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)

        me = UserModel.objects.get(username=username) 
        if me.password == password: 
            request.session['user'] = me.username 
            return HttpResponse("로그인 성공!")
        else:
            return redirect('/login')
            
    elif request.method == 'GET':
        return render(request, 'user/signin.html')

 

1. 요청이 POST라면, username과 password를 받아온다.

2. me = UserModel.objects.get(username = username)

UserModel 클래스에서 객체 가져올 인데, username username인 값을 가져옴

 

3. me.password 값과 입력한 password값이 같다면

세션에 user을 넣을 것인데 그 user는 me.username

그 후 로그인 성공! 을 보여줌

 

4. me.password 값과 입력한 password값이 다르면

로그인 페이지를 redirect

 

5.요청이 GET이라면

로그인 폼을 렌더해주도록 view를 수정

 

'Python > Django' 카테고리의 다른 글

django 기초부터 다시 1  (0) 2023.04.12
erd  (0) 2023.04.06
Django - 회원가입 기능과 CSRF 토큰  (0) 2023.04.04
Django - 템플릿 상속과 URL연결, path() 함수  (0) 2023.04.04
Django - Models 만들기  (0) 2023.04.04

댓글