Django로 방문 출입 관리 시스템 구축: 상세 가이드


Django는 웹 애플리케이션을 빠르고 효율적으로 개발할 수 있는 강력한 Python 기반 프레임워크입니다. 이번 글에서는 Django를 사용해 방문 출입 관리 시스템을 구축하는 방법을 단계별로 설명합니다. 이 시스템은 방문자의 출입 정보를 관리하고, 사용자 친화적인 웹 인터페이스를 통해 데이터를 입력하고 조회할 수 있는 기능을 제공합니다.


목차

  1. 방문 출입 관리 시스템 설계
  2. 개발 환경 준비
  3. Django 프로젝트 생성
  4. 앱 생성 및 설정
  5. 데이터베이스 모델 설계
  6. 관리자 페이지 설정
  7. 방문자 정보 입력 및 목록 조회 기능 구현
  8. 검색 및 필터링 기능 추가
  9. 출입 상태 업데이트 기능 구현
  10. 템플릿을 활용한 UI 개발
  11. 배포 준비 및 테스트
  12. 맺음말

1. 방문 출입 관리 시스템 설계

주요 요구사항

  1. 방문자 관리: 방문자의 이름, 연락처, 방문 목적, 방문 시간, 출입 상태(입장/퇴장) 기록.
  2. 검색 및 필터링: 방문자 이름, 방문 목적, 날짜별 검색 기능.
  3. 출입 상태 관리: 방문자가 입장했는지, 퇴장했는지 표시.
  4. 보안: 관리자만 데이터에 접근 가능하도록 인증 기능 제공.

2. 개발 환경 준비

(1) Python 설치

Python 3.8 이상 설치. 설치 확인:

<bash>

python --version

(2) 가상환경 설정

<bash>

python -m venv venv  
source venv/bin/activate  # Mac/Linux  
venv\Scripts\activate     # Windows

(3) Django 설치

<bash>

pip install django

3. Django 프로젝트 생성

(1) 프로젝트 생성

<bash>

django-admin startproject visitor_management
cd visitor_management

(2) 개발 서버 실행

<bash>

python manage.py runserver

브라우저에서 http://127.0.0.1:8000/를 열어 Django 기본 페이지를 확인합니다.


4. 앱 생성 및 설정

(1) 앱 생성

방문 출입 관리를 위한 visitors 앱을 생성합니다.

<bash>

python manage.py startapp visitors

(2) 앱 등록

settings.py 파일의 INSTALLED_APPS에 새로 생성한 앱을 추가합니다.

<python>

INSTALLED_APPS = [
    ...
    'visitors',
]

5. 데이터베이스 모델 설계

방문자 정보를 저장할 모델을 정의합니다.

(1) 모델 정의

visitors/models.py에서 다음과 같이 방문자 모델을 작성합니다:

<python>

from django.db import models

class Visitor(models.Model):
    name = models.CharField(max_length=100)  # 방문자 이름
    contact = models.CharField(max_length=15)  # 연락처
    purpose = models.CharField(max_length=200)  # 방문 목적
    check_in_time = models.DateTimeField(auto_now_add=True)  # 입장 시간
    check_out_time = models.DateTimeField(null=True, blank=True)  # 퇴장 시간
    status = models.CharField(
        max_length=10,
        choices=[('IN', '입장'), ('OUT', '퇴장')],
        default='IN'
    )  # 출입 상태

    def __str__(self):
        return self.name

(2) 마이그레이션

모델을 데이터베이스에 반영합니다.

<bash>

python manage.py makemigrations
python manage.py migrate

6. 관리자 페이지 설정

(1) 관리자 페이지에서 방문자 관리

admin.py 파일에 모델을 등록합니다:

<python>

from django.contrib import admin
from .models import Visitor

@admin.register(Visitor)
class VisitorAdmin(admin.ModelAdmin):
    list_display = ('name', 'contact', 'purpose', 'check_in_time', 'status')
    list_filter = ('status', 'check_in_time')
    search_fields = ('name', 'purpose')

(2) 관리자 계정 생성

<bash>

python manage.py createsuperuser

http://127.0.0.1:8000/admin/에서 로그인 후 방문자 데이터를 관리할 수 있습니다.


7. 방문자 정보 입력 및 목록 조회 기능 구현

(1) 뷰(View) 작성

views.py에서 방문자 입력과 목록 조회를 처리하는 뷰를 작성합니다.

<python>

from django.shortcuts import render, redirect
from .models import Visitor
from .forms import VisitorForm

def visitor_list(request):
    visitors = Visitor.objects.all().order_by('-check_in_time')
    return render(request, 'visitors/visitor_list.html', {'visitors': visitors})

def add_visitor(request):
    if request.method == 'POST':
        form = VisitorForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('visitor_list')
    else:
        form = VisitorForm()
    return render(request, 'visitors/add_visitor.html', {'form': form})

(2) URL 설정

urls.py 파일을 작성합니다:

<python>

from django.urls import path
from . import views

urlpatterns = [
    path('', views.visitor_list, name='visitor_list'),
    path('add/', views.add_visitor, name='add_visitor'),
]

(3) 폼(Form) 작성

forms.py 파일을 생성하여 모델 폼을 작성합니다:

<python>

from django import forms
from .models import Visitor

class VisitorForm(forms.ModelForm):
    class Meta:
        model = Visitor
        fields = ['name', 'contact', 'purpose']

(4) 템플릿 작성

방문자 목록 템플릿 (visitor_list.html)

<html>

<!DOCTYPE html>
<html>
<head>
    <title>Visitor List</title>
</head>
<body>
    <h1>Visitor List</h1>
    <a href="/add/">Add Visitor</a>
    <table border="1">
        <tr>
            <th>Name</th>
            <th>Contact</th>
            <th>Purpose</th>
            <th>Check-in</th>
            <th>Status</th>
        </tr>
        {% for visitor in visitors %}
        <tr>
            <td>{{ visitor.name }}</td>
            <td>{{ visitor.contact }}</td>
            <td>{{ visitor.purpose }}</td>
            <td>{{ visitor.check_in_time }}</td>
            <td>{{ visitor.status }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

방문자 추가 템플릿 (add_visitor.html)

<html>

<!DOCTYPE html>
<html>
<head>
    <title>Add Visitor</title>
</head>
<body>
    <h1>Add Visitor</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
    <a href="/">Back to List</a>
</body>
</html>

8. 검색 및 필터링 기능 추가

(1) 검색 기능

뷰에서 검색어를 처리합니다.

<python>

def visitor_list(request):
    query = request.GET.get('q')
    if query:
        visitors = Visitor.objects.filter(name__icontains=query)
    else:
        visitors = Visitor.objects.all().order_by('-check_in_time')
    return render(request, 'visitors/visitor_list.html', {'visitors': visitors})

(2) 검색 폼 추가

visitor_list.html에 검색 입력 폼 추가:

<html>

<form method="get">
    <input type="text" name="q" placeholder="Search by name">
    <button type="submit">Search</button>
</form>

9. 출입 상태 업데이트 기능 구현

(1) 상태 업데이트 뷰 작성

<python>

def update_status(request, pk):
    visitor = Visitor.objects.get(pk=pk)
    visitor.status = 'OUT' if visitor.status == 'IN' else 'IN'
    visitor.save()
    return redirect('visitor_list')

(2) URL 설정

<python>

path('update_status/<int:pk>/', views.update_status, name='update_status'),

(3) 버튼 추가

visitor_list.html에 상태 변경 버튼 추가:

<html>

<td>
    <a href="/update_status/{{ visitor.id }}/">
        {% if visitor.status == 'IN' %} Mark as Out {% else %} Mark as In {% endif %}
    </a>
</td>

10. 배포 준비 및 테스트

배포를 위해 Gunicorn 및 Nginx를 설정하거나 Heroku, AWS 등의 클라우드 서비스를 사용합니다.


확장 가능한 추가 기능 아이디어

1. Excel 내보내기 기능

  • 방문 기록을 Excel 파일로 다운로드할 수 있는 기능을 추가하면 관리자가 데이터를 더 쉽게 분석할 수 있습니다.
  • Django의 django-import-export 라이브러리를 활용하여 구현 가능.

2. QR 코드 기반 방문 관리

  • 방문자가 QR 코드를 스캔하여 입장/퇴장을 기록하도록 시스템 확장.
  • Python의 qrcode 라이브러리를 사용하여 QR 코드를 생성하고 스캔 이벤트 처리.

3. 알림 기능

  • 방문자가 입장하거나 퇴장할 때 관리자가 이메일이나 SMS 알림을 받을 수 있도록 구현.
  • Django의 django.core.mail 모듈 또는 Twilio API를 활용.

4. 다중 사용자 인증

  • 관리자뿐만 아니라, 리셉션 담당자, 보안 담당자 등 다양한 역할을 가진 사용자를 위한 권한 관리 추가.
  • Django의 PermissionGroup 기능 활용.

5. 실시간 대시보드

  • 현재 입장 중인 방문자 목록, 일별 방문자 수 등을 실시간으로 표시하는 대시보드 구현.
  • Django Channels와 WebSocket을 사용하여 실시간 데이터를 제공.

11. 맺음말

이 가이드를 통해 Django로 방문 출입 관리 시스템을 구축할 수 있습니다.

  • 핵심 기능: 방문자 관리, 상태 업데이트, 검색 및 필터링 기능을 구현하여 방문 출입 데이터를 체계적으로 관리.
  • 확장 가능성: 이 시스템은 향후 알림 기능, 출입 기록 다운로드, QR 코드 스캔 등을 추가하여 더 강력한 관리 도구로 확장할 수 있습니다.

Django의 강력한 ORM과 내장 기능을 활용하면 복잡한 로직을 단순화하면서 효율적으로 웹 애플리케이션을 개발할 수 있습니다.


2930 Blog에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.