Django 프로젝트로 챗봇 기능 만들기 - Part 1
Django를 사용하여 챗봇 기능을 포함한 프로젝트를 만드는 방법을 단계별로 설명합니다.
Django 프로젝트로 챗봇 기능 만들기 - Part 1
이번 글에서는 Django를 사용해 챗봇 기능을 포함한 프로젝트를 만드는 과정을 다룹니다.
1. 프로젝트 파일 생성
1
2
mkdir LLM_practice02
cd LLM_practice02
2. 가상환경 생성 및 활성화 (Windows bash 기준)
1
2
python -m venv gpt_env
source gpt_env/Scripts/activate
3. 필요한 패키지 설치
아래 명령어를 사용해 필요한 패키지를 설치합니다.
1
2
3
pip install openai==0.28
pip install python-dotenv
pip install django==4.2
설치된 패키지는 requirements.txt
에 저장합니다.
1
pip freeze > requirements.txt
4. Django 프로젝트 및 앱 생성
Django 프로젝트와 앱을 생성합니다.
1
2
3
4
5
django-admin startproject gpt_project01 .
django-admin startapp core
django-admin startapp accounts
django-admin startapp posts
django-admin startapp chatbot
5. 앱 등록하기
생성한 앱들을 INSTALLED_APPS
에 추가합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts',
'posts',
'core',
'chatbot',
]
6. URL 구성하기
프로젝트와 각 앱의 URL 패턴을 설정합니다.
프로젝트 URL
1
2
3
4
5
6
7
8
9
10
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('core.urls')),
path('accounts/', include('accounts.urls')),
path('posts/', include('posts.urls')),
path('chatbot/', include('chatbot.urls')),
]
앱별 URL 예시
core
앱
1
2
3
4
5
6
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
accounts
앱
1
2
3
4
5
6
7
8
9
10
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
path('signup/', views.SignupView.as_view(), name='signup'),
path('login/', views.LoginView.as_view(), name='login'),
path('logout/', views.LogoutView.as_view(), name='logout'),
]
posts
앱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from django.urls import path
from . import views
app_name = 'posts'
urlpatterns = [
path('post-list/', views.PostListView.as_view(), name='post_list'),
path('post-create/', views.PostCreateView.as_view(), name='post_create'),
path('post-detail/<int:pk>/', views.PostDetailView.as_view(), name='post_detail'),
path('post-update/<int:pk>/', views.PostUpdateView.as_view(), name='post_update'),
path('post-delete/<int:pk>/', views.PostDeleteView.as_view(), name='post_delete'),
path('post-like/<int:pk>/', views.PostLikeToggleView.as_view(), name='post_like_toggle'),
path('comment-update/<int:pk>/', views.CommentUpdateView.as_view(), name='comment_update'),
path('comment-delete/<int:pk>/', views.CommentDeleteView.as_view(), name='comment_delete'),
]
7. 커스텀 유저 모델 정의 및 설정
Django의 기본 유저 모델을 커스터마이징합니다.
설정
1
2
3
4
5
LOGIN_URL = 'accounts:login'
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
AUTH_USER_MODEL = 'accounts.user'
모델 정의
1
2
3
4
5
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
8. 주요 모델 설계
Post
와 Comment
모델
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from django.conf import settings
from django.db import models
class TimestampedModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Post(TimestampedModel):
title = models.CharField(max_length=50)
content = models.TextField()
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
null=True,
blank=True
)
likes = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='liked_posts', blank=True)
def __str__(self):
return self.title
def total_likes(self):
return self.likes.count()
class Comment(TimestampedModel):
post = models.ForeignKey('Post', related_name='comments', on_delete=models.CASCADE)
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
null=True,
blank=True
)
content = models.TextField()
def __str__(self):
return f"{self.author.username if self.author else '알 수 없는 사용자'} - {self.content[:20]}"
ChatMessage
모델
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.db import models
from django.conf import settings
class ChatMessage(models.Model):
user_input = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
null=True,
blank=True
)
user_text = models.TextField(null=True, blank=True)
bot_response = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"User: {self.user_text} | Bot: {self.bot_response}"
9. 마이그레이션
모델을 데이터베이스에 반영합니다.
1
2
python manage.py makemigrations
python manage.py migrate
This post is licensed under CC BY 4.0 by the author.