문서 작성일 : 2024.12.26
OS : Windows 10
"engprj" 프로젝트 생성 :
(venv) C:\mycode\web\django>django-admin startproject engprj
"gameapp" App 생성:
(venv) C:\mycode\web\django>cd engprj
(venv) C:\mycode\web\django\engprj>python manage.py startapp gameapp
migration :
(venv) C:\mycode\web\django\engprj>python manage.py makemigrations
(venv) C:\mycode\web\django\engprj>python manage.py migrate
Run Server: (with default port 8000)
(venv) C:\mycode\web\django\engprj>python manage.py runserver
APP 추가 :
engprj - engprj - settings.py 의 INSTALLED_APPS 에 'gameapp' 을 추가함
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'gameapp',
]
engprj URL 설정 :
engprj - engprj - urls.py 의 내용을 아래와 같이 수정
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('gameapp.urls')),
]
gameapp/urls.py 생성 및 내용 추가
engprj - gameapp- urls.py 를 생성하고 아래와 같이 내용 추가
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'), # 루트 경로에 home 뷰 연결
]
gameapp/views.py 수정
engprj - gameapp- views.py 를 아래와 같이 수정
from django.shortcuts import render
def home(request):
return render(request, 'home.html') # 'home.html' 템플릿 렌더링
gameapp/templates/ 디렉토리를 만들고, 그 안에 home.html 파일을 생성
home.html 은 아래와 같이 간단하게 작성
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home Page</title>
</head>
<body>
<h1>Welcome to Django!</h1>
<p>This is your first Django page.</p>
</body>
</html>
Run Server: (with default port 8000)
(venv) C:\mycode\web\django\engprj>python manage.py runserver
를 실행한다음, 웹브라우저에서 http://127.0.0.1:8000/ 로 접근하면, home.html 이 rendering 되는 것을 확인 할 수 있음.
Call back 구조는 다음과 같음
1. 웹브라우저에서 127.0.0.1:8000 이라고 입력하면
2. engprj - gameapp- urls.py 파일의 루트 경로 - path('', views.home, name='home') - 로 접근이 됨.
3. 그 다음, engprj - gameapp- views.py 파일의 home 함수 - def home(request): - 로 접근이 됨.
- home 함수 내부에서 , 무엇인가 연산을 해주어야 함. 예를 들면 DB를 읽어서, 필요한 데이터를 추출할 수 있음
4. 그 다음, home.html 을 reading 함 - return render(request, 'home.html')
Django에서 기본 데이터베이스로 제공되는 db.sqlite3 파일을 관리하는 방법
gameapp /models.py에서 모델 클래스를 수정함
from django.db import models
class Sentence(models.Model):
key = models.AutoField(primary_key=True) # Primary Key (자동 증가)
eng = models.TextField() # 영어 문장 필드
kor = models.TextField() # 한국어 문장 필드
file = models.FileField(upload_to='uploads/') # 파일 업로드 경로 지정
def __str__(self):
return self.eng # 관리자 페이지에서 객체를 문자열로 표시
migration 진행
(venv) C:\mycode\web\django\engprj>python manage.py makemigrations
(venv) C:\mycode\web\django\engprj>python manage.py migrate
gameapp/admin.py에 Sentence 모델을 등록합니다.
from django.contrib import admin
from .models import Sentence
@admin.register(Sentence)
class SentenceAdmin(admin.ModelAdmin):
list_display = ('key', 'eng', 'kor', 'file') # Admin 페이지에서 표시할 필드
gameapp/views.py 수정
gameapp/views.py 를 아래와 같이 수정한다.
1. from django.http import HttpResponse 추가
2. from .models import Sentence 추가
3. def upload_sentence(request): 추가
from django.shortcuts import render
from django.http import HttpResponse
from .models import Sentence
def home(request):
return render(request, 'home.html') # 'home.html' 템플릿 렌더링
def upload_sentence(request):
if request.method == 'POST':
eng = request.POST.get('eng')
kor = request.POST.get('kor')
file = request.FILES.get('file')
Sentence.objects.create(eng=eng, kor=kor, file=file)
return HttpResponse("Sentence uploaded successfully!")
return render(request, 'upload_sentence.html')
gameapp/urls.py 생성 및 내용 추가
1. from . import views
2. path('upload/', views.upload_sentence, name='upload_sentence'),
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'), # 루트 경로에 home 뷰 연결
path('upload/', views.upload_sentence, name='upload_sentence'),
]
upload_sentence.html 작성
템플릿 작성 (gameapp/templates/upload_sentence.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Upload Sentence</title>
</head>
<body>
<h1>Upload Sentence</h1>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<label for="eng">English Sentence:</label><br>
<input type="text" id="eng" name="eng"><br><br>
<label for="kor">Korean Sentence:</label><br>
<input type="text" id="kor" name="kor"><br><br>
<label for="file">Upload File:</label><br>
<input type="file" id="file" name="file"><br><br>
<button type="submit">Upload</button>
</form>
</body>
</html>
파일 업로드를 구현
engprj - engprj - settings.py 에 다음을 추가함.
import os
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
engprj - engprj - urls.py 에 URL 패턴에 미디어 추가
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('gameapp.urls')),
]
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
migration 진행
(venv) C:\mycode\web\django\engprj>python manage.py makemigrations
(venv) C:\mycode\web\django\engprj>python manage.py migrate