Session을 사용하여 회원가입 전 사이트 이용약관 / 개인정보 수집 동의를 구현합니다.
1. templates 작성
회원가입 버튼을 통해 회원가입 창으로 넘어가기 전 사이트의 개인정보수집 동의 및 이용약관 동의를 구현하기 위해 우선 생성해두었던 templates 폴더에 users 폴더를 생성한 후 user_base.html과 agreement.html 파일을 생성한 후 아래의 코드를 입력합니다.
<body style="background-color: #d6d6d6;"> {% block contents %} <!-- body 삽입 부분 --> {% endblock %}
{% if messages %} {% for message in messages %} {% if message.tags %} <script> alert("{{ message.message }}") <!-- message alert script --> </script> {% endif %} {% endfor %} {% endif %} </body>
</html>
이제 templates는 django 템플릿 언어를 통해 이 user_base.html를 상속받습니다. 프로젝트의 전반적인 디자인은 bootstrap4와 부트스트랩 PlugIn인 Material Design Bootsrap을 사용하였습니다. 각 CDN과 추가되는 파일들은 포스팅하지 않겠습니다.
from django.shortcuts import render, redirect from django.utils.decorators import method_decorator from .decorators import * from .models import User from django.views.generic import View from django.contrib import messages
def post(self, request, *args, **kwarg): if request.POST.get('agreement1', False) and request.POST.get('agreement2', False): request.session['agreement'] = True
if request.POST.get('csregister') == 'csregister': return redirect('/users/csregister/') else: return redirect('/users/register/') else: messages.info(request, "약관에 모두 동의해주세요.") return render(request, 'users/agreement.html')
이전 포스팅에서 구현한 decorator 함수를 통해 로그인 중인 사용자는 접근하지 못하게 합니다. AgreementView CBV를 추가하여 회원가입 버튼을 눌렀을시(GET) agreement란 이름의 세션 값을 False로 생성하고 agreement.html을 render 해줍니다.
agreement.html의 form에서 회원가입 버튼을 Click하여 Submit 했을 시(POST) AgreementView의 post 함수는 Submit된 agreement1과 agreement2의 checked 상태를 확인합니다. checked 상태가 되었다면 agreement의 세션값을 True로 바꾸어 주고 컴퓨터공학부 가입인지 일반 가입인지 구분하여 redirect시켜줍니다.
이제 이 agreement 세션 값을 통해 회원가입 view에서 약관에 동의를 한 사용자인지 아닌지 판별할 수 있습니다.