Programming/Django

로그인&로그아웃

코딩하는 포메라니안 2020. 8. 26. 22:13

회원이 이미 정해진 서비스를 만들 경우,

관리자가 데이터베이스에 직접 회원 정보를 저장하여 회원이 로그인할 수 있도록 한다.

1. 프로젝트 만들기

2020/07/08 - [웹프로그래밍/Django] - Project 시작하기

 

Project 시작하기

1) 가상환경 켜기 $ python -m venv myvenv $ source myvenv/Scripts/activate 2) project 만들기 $ django-admin startproject staticproject 3) app 만들기 cd staticproject $ python manage.py startapp stati..

yerinpy73.tistory.com

 

2.  로그인 페이지 작성

로그인용 html파일을 생성한다.

#login.html

<h1>Login</h1>
 
<form>
    <p>ID </p>
    <input name="id" type="text" value="">
    <br>
    <p>Password </p>
    <input name="password" type="password" value="">
    <br>
    <br>
    <input class="btn btn-primary" type="submit" value="Login">
</form>

위에서 만든 html파일을 띄워주기 위해 views.py와 urls.py를 수정한다.

#views.py
def login(request):
    return render(request, '앱이름/login.html')
    
def logout(request):
	return render(request, '앱이름/login.html')

로그인을 하면 홈페이지가 뜨고, 로그아웃을 하면 로그인 페이지가 나온다.

로그인과 로그아웃의 기능이 다르기 때문에 따로 작성해준다.

#urls.py

from . import views
 
urlpatterns = [
    path('login/', views.login, name='login'),
    path('logout/',views.logout, name='logout'),
]

 

3. 로그인 & 로그아웃 기능 구현

#login.html

<h1>Login</h1>

<form method="POST" action="{% url 'login'%}">
    {% csrf_token %} #보안토큰
    <p>ID </p>
    <input name="id" type="text" value="">
    <br>
    <p>Password </p>
    <input name="password" type="password" value="">
    <br>
    <br>
    <input class="btn btn-primary" type="submit" value="Login">
</form>

form의 통신 방식은 post 방식을 이용한다.

 

views.py에서 실질적인 기능을 구현한다.

#views.py
from django.shortcuts import render, redirect
from django.contrib import auth

def login(request):
    if request.method == 'POST': # POST 방식으로 request를 통해 정보가 오면 
        # 변수(좌변이 변수이름)에 저장시켜 사용한다.
        id = request.POST['id']
        password = request.POST['password']
        # 로그인
        # auth는 django에서 기본적으로 제공하는 기능으로 username, password라는 명칭을 쓴다.
        user = auth.authenticate(request, username=id, password=password)
        # 성공
        if user is not None:
            auth.login(request, user)
            return redirect('home')
        # 실패
        else:
            return render(request, 'login.html', {'error': 'id or password is incorrect.'})
    else:
        return render(request, 'login.html')
        
def logout(request):
    if request.method == 'POST': # POST 방식으로 request를 통해 정보가 오면
        # 로그아웃
        auth.logout(request)
        return redirect('home')
    return render(request, 'accounts/login.html')

 

마지막으로, 로그인한 상태에서만 보이는 내용을 처리해주기 위해서

내용 앞에 {% if user.is_authenticated %}, 뒤에는 {% endif %}를 붙여준다.

 

4. 확인하기

먼저, terminal에 admin용 아이디와 비밀번호를 만든다.

$ python manage.py createsuperuser

비밀번호는 입력했을 때 보이지않기 때문에 기억하고 있어야 한다.

주소창 뒤에 /admin을 입력하고 생성한 아이디와 비밀번호를 입력하면 아래와 같은 화면이 뜬다.

 

Users에 Add버튼을 클릭하면, 아래와 같은 화면이 뜬다.

아이디 비번을 입력해서 SAVE한 뒤 다시 원래 로그인 화면으로 돌아가서 로그인이 되는지 확인하면 된다.

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

Django 입력 받기  (0) 2021.05.31
Django API 서버 만들기  (0) 2021.04.13
REST API 서버 - 기본 세팅  (0) 2021.04.11
Static 파일  (0) 2020.07.08
Project 시작하기  (0) 2020.07.08