1. Django 설치
| # pip install django # django-admin startproject parksite #프로젝트 생성 # ls -l drwxr-xr-x 1 ibmhp011 197121 0 Oct 2 11:01 parksite/ # ls -l parksite -rwxr-xr-x 1 ibmhp011 197121 686 Oct 2 11:01 manage.py* drwxr-xr-x 1 ibmhp011 197121 0 Oct 2 11:01 parksite/ # cd parksite # python manage.py makemigrations # python manage.py migrate # ls -l -rw-r--r-- 1 ibmhp011 197121 131072 Oct 2 11:15 db.sqlite3 -rwxr-xr-x 1 ibmhp011 197121 686 Oct 2 11:01 manage.py* drwxr-xr-x 1 ibmhp011 197121 0 Oct 2 11:15 parksite/ # python manage.py runserver #웹 실행 Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). October 02, 2023 - 11:17:59 Django version 4.2.5, using settings 'parksite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK. |
■ Django 설치![]() *** 서버쪽 데이터베이스를 만드는것은 Model을 만든다 생각하시면 되고 웹페이지 화면을 만든다 하면 Template를 만든다 생각하시면 되고 템플릿에서 서버에 일을 시키는건 View를 만든다 생각하시면 됩니다 |
2. Application 작성
| # python manage.py startapp polls #앱 생성 # ls -l polls -rw-r--r-- 1 ibmhp011 197121 0 Oct 2 11:38 __init__.py -rw-r--r-- 1 ibmhp011 197121 66 Oct 2 11:38 admin.py -rw-r--r-- 1 ibmhp011 197121 148 Oct 2 11:38 apps.py drwxr-xr-x 1 ibmhp011 197121 0 Oct 2 11:38 migrations/ -rw-r--r-- 1 ibmhp011 197121 60 Oct 2 11:38 models.py -rw-r--r-- 1 ibmhp011 197121 63 Oct 2 11:38 tests.py -rw-r--r-- 1 ibmhp011 197121 66 Oct 2 11:38 views.py # cd polls ; vi views.py #웹 프론트 Index 리스폰스 생성 ------------------------------------------------------------------------------------------------------ from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(request): return HttpResponse('안녕! 내 페이지에 온걸 환영해!') ------------------------------------------------------------------------------------------------------ # vi urls.py #웹 프론트 Index url등록 py생성 ------------------------------------------------------------------------------------------------------ from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ] ------------------------------------------------------------------------------------------------------ ■ 프로젝트에 application url을 parksite 웹 서버와 연동하기! # ls -l /d/python_work/Django/parksite/parksite/ -rw-r--r-- 1 ibmhp011 197121 0 Oct 2 11:01 __init__.py drwxr-xr-x 1 ibmhp011 197121 0 Oct 2 11:17 __pycache__/ -rw-r--r-- 1 ibmhp011 197121 409 Oct 2 11:01 asgi.py -rw-r--r-- 1 ibmhp011 197121 3350 Oct 2 11:01 settings.py -rw-r--r-- 1 ibmhp011 197121 786 Oct 2 11:01 urls.py <- parksite의 기존 urls.py에 연동 -rw-r--r-- 1 ibmhp011 197121 409 Oct 2 11:01 wsgi.py # vi /d/python_work/Django/parksite/parksite/urls.py ------------------------------------------------------------------------------------------------------ from django.urls import path from django.urls import include, path urlpatterns = [ path('polls/', include('polls.urls')), <- polls APP의 웹루트와 urls.py를 연동(index) path('admin/', admin.site.urls), ] ------------------------------------------------------------------------------------------------------ |
# python manage.py runserver #웹 실행![]() |
3-1. Model (DataBase) 생성하기
| # vi polls/models.py ------------------------------------------------------------------------------------------------------ from django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_data = models.DateTimeField('data published') class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) ------------------------------------------------------------------------------------------------------ ***Question, Choice라는 Model을 생성했다. 1. Question에는 질문내용과 발행날짜를 정의 2. Choice에는 선택한 질문내용, 선택내용, 투표번호를 정의 3. Question에 Choice는 외래키로 연결 되었고, Question의 데이터가 삭제 될 때 Choice의 CASCADE 속성으로 인해 Choice의 데이터도 삭제 되도록 되어있다. 4. CharField는 문자열로 이루어진 데이터이며 글자수 제한을 200개로 설정, IntegerField는 정수형 데이터이며 default를 0으설정 |
3-2. Model (DataBase) 를 프로젝트 스키마에 활성화 *polls APP의 Model
| # cat parksite/settings.py #프로젝트 설정에 Application 등록 전 확인 ------------------------------------------------------------------------------------------------------ # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] ------------------------------------------------------------------------------------------------------ ***application의 Model을 활성화 하려면 사전에 생성 한 application을 등록해주어야 한다. # cat polls/apps.py #Application 이름 확인 ------------------------------------------------------------------------------------------------------ from django.apps import AppConfig class PollsConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'polls' ------------------------------------------------------------------------------------------------------ # vi parksite/settings.py #프로젝트 설정에 Application 등록 ------------------------------------------------------------------------------------------------------ # Application definition INSTALLED_APPS = [ 'polls.apps.PollsConfig', <- appName.apps.py.ClassName 형식 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] ------------------------------------------------------------------------------------------------------ # python manage.py makemigrations polls #polls App Model을 Migration(이식) 한다. Migrations for 'polls': polls\migrations\0001_initial.py - Create model Question - Create model Choice # cat /d/python_work/Django/parksite/polls/migrations/0001_initial.py ------------------------------------------------------------------------------------------------------ ![]() ***model.py파일을 읽어 Django가 DB에 Migration시키기 전에 수정사항(이력)을 기록/생성 했다. ***makemigrations 커맨드는 application에서 model의 수정사항을 기록. 아직 프로젝트에 application이 migration 되지 않았다. # python manage.py migrate #polls App Model정보를 Migrate!!! (명령어에 polls 지정 X) ![]() ***app생성, 프로젝트 app 포팅, model 연동 완료 ***결론: 프로젝트에 application을 연결하는것은 url도 연결하고 model도 migration 해주어야 한다. ■makemigrations와 migrate의 차이 ・makemigrations: application의 model의 model에 대한 변화를 기록하며 0001_initial.py 사람이 읽기 편한 Python 언어로 생성되어 DB에 이식 될 때는 sql언어로 변환된다! *** model 내용이 수정되면 0002가 생기며 쌓이는 식이다. 변환시 SQL문을 확인하는 명령어 # python manage.py sqlmigrate polls 0001(변경기록번호) ・migrate: makemigrations의 변화 기록을 참고하여 실제로 프로젝트 모델 스키마에 application의 모델 변화사항을 반영해주는 명령어 |
4-1. Model(DB)에 정보 추가하기 - Admin Page
| *** 모델에 데이터를 추가하는 방법은 여러가지 1. 웹페이지상 view에서 model에 데이터베이스 추가하도록 요청하는 기능 구현 2. 서버 개발자가 admin페이지에서 직접 데이터 추가 ( 장고 공식 튜토리얼 소개 ) 3. 서버 개발자가 django shell을 이용해서 직접 데이터 추가 ( 장고 공식 튜토리얼 소개 ) # python manage.py createsuperuser #admin 계정 생성 ![]() # vi polls/admin.py #admin page에 polls의 Model(DB) 연동 코드 추가 ------------------------------------------------------------------------------------------------------ from django.contrib import admin from .models import Question,Choice admin.site.register(Question) admin.site.register(Choice) ------------------------------------------------------------------------------------------------------ ![]() |
4-2. Model(DB)에 정보 추가하기 - 장고 shell을 이용
| # python manage.py shell #장고 shell 실행 (DB 쿼리 같은 느낌이다.) |
| >>> from polls.models import Choice, Question # Import the model 클래스 # 하기 커맨드로 데이터베이스에서 Question 데이터베이스를 전부 불러옵니다. # 아직 추가한게 없으면 [] 이렇게 빈 데이터들이 뜹니다. >>> Question.objects.all() <QuerySet []> <-없으면 []가 표시됨 <QuerySet [<Question: Question object (1)>]> <-나는 admin page에서 test로 하나 만들었었다. # Question에 관한 새로운 데이터를 만드는 과정입니다. # What's new? 라는 질문 데이터를 만들어봅시다. >>> from django.utils import timezone >>> q = Question(question_text="Park First Django", pub_data=timezone.now()) # 데이터를 만들었으면 데이터베이스에다가 데이터를 저장해줍시다. >>> q.save() # 방금 저장한 데이터의 id는 1이 됩니다. >>> q.id 1 2 <-나는 2번째 데이터라 2 # 파이썬 attribute를 통해 데이터의 내용을 확인 할 수 있습니다. >>> q.question_text 'Park First Django' >>> q.pub_date datetime.datetime(2023, 10, 4, 6, 34, 57, 14817, tzinfo=datetime.timezone.utc) # 아래처럼 데이터를 변경하고 save를 통하여 다시 데이터베이스에 업데이트 가능합니다. >>> q.question_text = "Park First Django는퍼펙트 하구만!!" >>> q.save() >>> q.question_text >>> q.id 'Park First Django는퍼펙트 하구만!!' 2 # objects.all() 은 데이터베이스에서 Question에 관한 모든 데이터를 보여줍니다. >>> Question.objects.all() <QuerySet [<Question: Question object (1)>, <Question: Question object (2)>]> |
| ***Question.objects.all() 함수를 입력했는데 오브젝트에 관한 정보만 나오고 안에 데이터는 나오지가 않는다. 입력한 데이터의 내용을 출력 할수 있도록 클래스 안에 __str__(self) 함수를 재정의 한다. # vim polls/models.py #models.py 수정 (admin page에도 적용되어 표시 된다.) ------------------------------------------------------------------------------------------------------ from django.db import models # Create your models here. class Question(models.Model): question_text = models.CharField(max_length=200) pub_data = models.DateTimeField('data published') def __str__(self): <-장고에서는 이러한 출력함수 __str__을 커스텀 하는것을 권장 return self.question_text class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) def __str__(self): <-장고에서는 이러한 출력함수 __str__을 커스텀 하는것을 권장 return self.choice_text ------------------------------------------------------------------------------------------------------ ***데이터 출력 형식 변경 확인 >>>from polls.models import Choice, Question >>>Question.objects.all() <QuerySet [<Question: 나는누굴까>, <Question: Park First Django는퍼펙트 하구만!!>]> |
참고사이트:https://lucky516.tistory.com/52
'개발' 카테고리의 다른 글
| 파이썬3 연차 사용 확인 소스코드 (작성중) (0) | 2023.09.26 |
|---|---|
| 파이썬3 기초 정리 (0) | 2023.07.31 |
| 자바스크립트 실습3 : 연산자 (0) | 2023.02.21 |
| 자바스크립트 실습2: 클릭으로 글자 색 바꾸기 (0) | 2023.02.20 |
| 자바스크립트 실습1: 나이계산기 (0) | 2023.02.11 |





