Django (8. 로그인(세션이란?, 구현)) feat.페스트캠퍼스

min seung moon·2021년 3월 10일
0

Django

목록 보기
8/37

1. 세션이란?

2. 화면 구현

  • register.html의 코드를 복사하여 login.html에 붙여넣기!

    • 부분적으로 수정해서 사용!
  • views.py에 연결하기!

  • urls.py에 연결하기!

  • 웹에 들어가보기!

3. views.py 기능 구현하기!

from django.shortcuts import render
from .models import Fcuser

# make_password 말고도 check_password도 있다
from django.contrib.auth.hashers import make_password, check_password

# Create your views here.


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

        res_data = {}

        if not(username and password):
            res_data['error'] = '모든 값을 입력해야 합니다'
        else:
            # (db에 저장되어 있는 username = post로 받아온 username)
            # db에 데이터가 있으면 fcuser에 할당 된다
            fcuser = Fcuser.objects.get(username=username)

            if check_password(password, fcuser.password):
                # 비밀번호가 일치, 로그인 처리를!
                # 세션!
                # redirect
                pass
            else:
                res_data['error'] = '비밀번호를 틀렸습니다!'

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


def register(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    elif request.method == 'POST':
        username = request.POST.get('username', '')
        useremail = request.POST.get('useremail', '')
        password = request.POST.get('password', '')
        re_password = request.POST.get('re-password', '')

        res_data = {}

        if not (username and password and re_password and useremail):
            res_data['error'] = '모든 값을 입력해야 합니다.'
        elif password != re_password:
            res_data['error'] = '비밀번호가 다릅니다.'
        else:
            fcuser = Fcuser(
                username=username,
                useremail=useremail,
                password=make_password(password)
            )

            fcuser.save()

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

# 기본적으로 template폴더를 보기에 바로 작성 가능
# 만약에 template폴더 내부에 폴더를 생성한 다음에 파일을 만든다면
# foldername/register.html
# return render(request, 'register.html')
  • 값을 안넣었을 때
  • 비밀번호를 틀렸을 때
  • 성공했을 때(아무처리르 안해주어서 아무것도 안뜬다)

4. 세션 구현

5. root 페이지 생성

  • root 폴더 안에 있는 urls.py에 경로 설정

    • 아직 home이 없기 때문에 저장하면 오류가 난다
  • views.py에 home 생성

    • 일단 단순하게 HttpResponse로 홈 구현(5장에 3번에서 오류처리할 때 사용)
  • 로그인 성공하면 이동

  • user 정보가 제대로 저장되었는지 확인


6. 세션간단히 보기!

  • 로그인을 하면 세션에 정보가 저장되면 아래와 같이 sessionid가 생긴다!
  • 크롬 새 시크릿창에 동일한 주소로 들어가보기!
    • 로그인을 하지 않았기 때문에 세션에 아무런 정보도 없다

7. 로그아웃 구현

  • views.py
  • urls.py에 등록
  • 주소에 경로 설정하여 로그아웃하기

fcuser.id는 데이터베이스에 저장되고 있는 인덱스 번호입니다!

profile
아직까지는 코린이!

0개의 댓글