python/Django

Django First APP 만들기

MasterOfAI 2024. 12. 26. 15:01

문서 작성일 : 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    

'python > Django' 카테고리의 다른 글

Django Modules - 이론 설명  (1) 2024.12.26
Django 설치 , 첫번째 App작성 , 두개의 App 동시 실행  (1) 2024.12.22
links  (0) 2023.10.06