본문 바로가기

Django Basics

[패스트캠퍼스 수강 후기] 파이썬 인강 자기계발 챌린지 32 회차 미션

패스트캠퍼스 파이썬 웹개발 올인원 패키지 후기(32)

파이썬 웹개발 올인원 패키지 32 일차 후기 겸 학습기록 입니다.

 

 

 

로그인 - 로그인 만들기 - 1

login.html

<html>
    <head>
        <!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> -->
        <link rel="stylesheet" href="/static/bootstrap.min.css" />
        <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
    </head>
    <body>
        <div class="container">
            <div class="row mt-5">
                <div class="col-12 text-center">
                    <h1>회원가입</h1>
                </div>
            </div>
            <div class="row mt-5">
                <div class="col-12">
                    {{ error }}
                </div>
            </div>
            <div class="row mt-5">
                <div class="col-12">
                    <form method="POST" action=".">
                        {% csrf_token %}
                        <div class="form-group">
                          <label for="username">사용자 이름</label>
                          <input type="text" class="form-control" id="username" placeholder='사용자이름' name="username">
                        </div>
                        <div class="form-group">
                          <label for="password">비밀번호</label>
                          <input type="password" class="form-control" id="password" placeholder="비밀번호" name="password">
                        </div>
                        <button type="submit" class="btn btn-primary">로그인</button>
                    </form>
                </div>
            </div>
        </div>
    </body>
</html>

views.py

from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth.hashers import make_password, check_password
from .models import Fcuser


def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    elif request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)

        res_data = {}
        if not (username and password):
            res_data['error'] = '모든 값을 입력하세요.'
        else:
            fcuser = Fcuser.objects.get(username=username)
            if check_password(password, fcuser.password):
                # 로그인 처리
                pass
            else:
                # 로그인 실패 처리
                res_data['error'] = '비밀번호가 틀렸습니다.'


        return render(request, 'login.html', res_data)

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register),
    path('login/', views.login)
]

로그인 - 로그인 만들기 - 2

views.py

from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.contrib.auth.hashers import make_password, check_password
from .models import Fcuser

def home(request):
    user_id = request.session.get('user')
    
    if user_id:
        fcuser = Fcuser.objects.get(id=user_id)
        return HttpResponse(fcuser.username)
    
    return HttpResponse('Home!')


def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    elif request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)

        res_data = {}
        if not (username and password):
            res_data['error'] = '모든 값을 입력하세요.'
        else:
            fcuser = Fcuser.objects.get(username=username)
            if check_password(password, fcuser.password):
                # 로그인 처리
                request.session['user'] = fcuser.id
                return redirect('/')
            else:
                # 로그인 실패 처리
                res_data['error'] = '비밀번호가 틀렸습니다.'


        return render(request, 'login.html', res_data)

urls.py

from django.contrib import admin
from django.urls import path, include
from fcuser.views import home

urlpatterns = [
    path('admin/', admin.site.urls),
    path('fcuser/', include('fcuser.urls')),
    path('', home),
]

 

로그인 - 세션 원리 복습과 활용

브라우저에서 세션 정보를 저장하기 위해 사용하는 것은 쿠키(Cookie)

Chrmoe > 개발자 도구(F12) > Application Tab > Cookies > site명 에서 확인 가능

 

세션 id로 서버에서는 클라이언트를 식별

 

django에서는

request.session 으로 식별

 

logout 기능 구현

views.py

def logout(request):
    if request.session.get('user'):
        del request.session['user']
    
    return redirect('/')

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register),
    path('login/', views.login),
    path('logout/', views.logout),
]

 

패스트캠퍼스 파이썬 인강 자세한 내용은 아래 링크를 참고해 주세요!

 

https://bit.ly/2WG0IXN