프로그래밍/파이썬

[Django] 웹 프로그래밍 실습(5) - 로그인, 로그아웃, 회원가입 구현 (with alert 메시지)

매 석 2022. 12. 13. 23:36
반응형

django queryset (장고 쿼리셋) 관련 내용 - gaussian37

 

1. 과거 내용 학습

 

 

[Django] 웹 프로그래밍 실습(1) - 페이지 연결하기(View, Templates)

1. 장고 기본 지식 장고의 기본 내용은 아래 링크를 참조 [Django 기초] 파이썬 장고 - 개념 정리 및 웹 페이지 만들기 1. 웹 프레임워크란? - 웹 서버를 구현하기 위한 목적으로, 해당 기능들을 모아

maeseok.tistory.com

- 위의 내용부터 학습하여야 해당 포스팅의 내용이 이해가 된다.

 

2. 로그인, 로그아웃, 회원가입

- 코드 설명에 앞서 위 3개는 models.py를 이용하지 않고,

  django의 auth를 이용해서 구현하려고 한다.

  또한 forms.py를 따로 만들지 않고 원래 사용하던

  form 태그를 html에서 사용하기로 했다.

 

 

3. urls.py

from django import urls
from django.urls import path

from . import views
urlpatterns= [
    path('', views.main, name="main"),
    path('home', views.home, name="home"),
    path('login', views.login, name="login"),
    path('logout', views.logout, name="logout"),
    path('new', views.new, name="new"),
]

- login, logout, new만 보면 된다. 각각 로그인, 로그아웃, 회원가입을 말한다.

  이는 또 views.py에 있는 함수와 각각 연결된다.

 

4. views.py

from django.shortcuts import render,redirect
from django.contrib import auth, messages
from django.contrib.auth import authenticate
from django.contrib.auth.models import User

def new(request):
	#메서드 POST인 경우
    if request.method=='POST':
       #사용자가 입력한 값을 변수에 저장한다.
        user_id=request.POST.get('id','')
        user_pw=request.POST.get('pwd','')
        user_pw2=request.POST.get('pwd2','')
        user_email=request.POST.get('email','')
        #비밀번호와 비밀번호 확인 값이 다른 경우
        if user_pw!=user_pw2:
            messages.warning(request, "비밀번호가 다릅니다.")
        #아이디가 중복되는 경우
        elif User.objects.filter(username=user_id).exists():
            messages.warning(request, "아이디가 중복됩니다.")
        #문제 없이 정상적인 경우
        else:
        	#회원 생성
            user= User.objects.create_user(
                username=user_id,
                password=user_pw,
                email=user_email,
            )
            messages.success(request, "회원가입 완료!")
            #로그인 페이지로 이동
            return redirect('/login')
        return render(request,'new.html')
    else:
        return render(request,'new.html')
    return render(request,'new.html')

def login(request):
	#메서드가 POST인 경우
    if request.method=='POST':
        user_id=request.POST['id']
        user_pw=request.POST['pwd']
        #해당 id,pw에 해당되는 유저를 확인
        user=authenticate(request,username=user_id,password=user_pw)
        if user is not None:
        	#유저 있는 경우 로그인 후 홈으로 이동
            auth.login(request,user)
            return redirect('/home')
        else:
        	#유저 없는 경우 메시지 출력
            messages.warning(request, "아이디와 비밀번호를 확인해주세요.")
            return render(request,'login.html')
    else:
        return render(request,'login.html')\

def logout(request):
	#로그아웃
    auth.logout(request)
    return redirect('/home')

 

 

- 회원가입의 경우 auth model 중 user에 "User.objects.create_user()"로 회원 생성을 한다.

  하지만 그 전에 문제가 있는 경우 "messages.warning()"을 통해 해당 페이지에 메시지 출력을 한다.

- 로그인도 마찬가지다. "authenticate()"를 이용해 회원 존재에 따라 "auth"로 로그인을 시킨다.

  그 과정에서 문제가 있을 경우 역시  "messages.warning()"을 사용한다.

- 로그아웃"auth" 이용하여 로그아웃 해준다.

 

- 쉽게 말하면 auth가 모든 귀찮은 구현을 대신 해주었다.

  물론 처음 장고를 사용해서 많이 삽질을 하긴 했지만, 굉장히 유용한 기능인 것 같다.

  flask로 구현하는 것 보다 훨씬 간단하다.

 

5. 회원가입 및 로그인 진행과정

- 우선 처음 home 페이지는 이렇다. (3개의 지수들은 아직 과거의 데이터들이다.)

 

- 회원가입 페이지로 이동한다.

- 정상적으로 입력 후 가입버튼을 누르면 아래와 같이 메시지가 뜬다.

- 이후 자동으로 로그인 페이지로 이동된다.

  회원가입할 때 입력한 정보를 입력해준다.

- 틀리면 이렇게 메시지가 출력된다.

- 정상적으로 입력 시 이렇게 user의 이름과 logout 버튼이 뜨는 것을 확인할 수 있다.

 

- 로그아웃을 누르면 초기화면처럼 다시 회원가입과 로그인 버튼이 생긴다.

 

 

6. templates (login.html, new.html)

 

 

GitHub - maeseok/Finance-Data-Analysis-Web

Contribute to maeseok/Finance-Data-Analysis-Web development by creating an account on GitHub.

github.com

- 위 링크에 접속하면 login.html과 new.html, base.html를 확인할 수 있다.