0. 설치
$python -m pip install Django
1. 프로젝트 만들기
: 하나의 앱을 만들기 위한 폴더를 만든다고 생각하면 쉽다!
$django-admin startproject mysite
2. 서버 작동
$python manage.py runserver
직접 서버를 run하기 위해 명령어를 입력해주었는데, 저같은 경우 manage.py의 SyntaxError가 발생했습니다.
아래 명령어로 실행해주니 해결이 되었습니다.
//python(자신의버전) manage.py runserver
$python3.9 manage.py runserver
명령어를 입력해주면 http://~~ 주소를 복사해줍니다.
그 후 구글에 입력하여 아래와 같은 화면이 뜨면 성공!!
3. 설문조사 앱 생성
: 만들고자하는 앱의 폴더명을 입력 (ex. polls)
$python3.9 manage.py startapp polls
4. 첫 번째 뷰 작성하기
: polls/view.py 를 열어 다음과 같은 파이썬 코드를 입력
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
mysite.urls
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')), # polls/ 형태의 request는 polls.urls로 보내라 라는 뜻 -> polls 폴더안의 urls.py
path('admin/', admin.site.urls),
]
polls.urls
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'), #polls/뒤에 빈 값이 오면 views.index함수를 호출해서 response로 줘라
]
( 결과 )
5. 데이터 베이스 설치
$python3.9 manage.py migrate
6. 모델 만들기
: polls/models.py에 작성
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date 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)
7. 모델의 활성화
: mysite/settings.py에 작성
INSTALLED_APPS = [
'polls.apps.PollsConfig', #추가되는 부분
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
makemigrations 을 실행시킴으로서, 당신이 모델을 변경시킨 사실과(이 경우에는 새로운 모델을 만들었습니다) 이 변경사항을 migration으로 저장시키고 싶다는 것을 Django에게 알려줍니다. Migration은 Django가 모델(즉, 당신의 데이터베이스 스키마)의 변경사항을 디스크에 저장하는 방법입니다. 원하는 경우 polls/migrations/0001_initial.py 파일로 저장된 새 모델에 대한 migration을 읽어볼 수 있습니다. 걱정하지 마세요, 여러분이 Django가 migration을 만들 때마다 읽을 것으로 기대되지는 않지만, Django의 변경점을 수동으로 수정하기를 원할 때를 대비해서 사람이 수정할 수 있도록 설계되었습니다.당신을 위해 migration들을 실행시켜주고, 자동으로 데이터베이스 스키마를 관리해주는 migrate 명령어가 있습니다. 이 명령을 알아보기 전에 migration이 내부적으로 어떤 SQL 문장을 실행하는지 살펴봅시다. sqlmigrate 명령은 migration 이름을 인수로 받아, 실행하는 SQL 문장을 보여줍니다.
$python3.9 manage.py makemigrations polls
dbsqlite3 DB안에 polls.models에서 정의한 형식대로 DB가 구성됨
이제, migrate 를 실행시켜 데이터베이스에 모델과 관련된 테이블을 생성해봅시다.
$python3.9 manage.py migrate
8. API 가지고 놀기
$python3.9 manage.py shell
>>> from polls.models import Choice, Question #polls.models.Question 임포트
>>> Question.objects.all() #Question 테이블의 오브젝트 보기 -> 현재는 아무런 데이터 존재x
>>> from django.utils import timezone
#Question 함수 내에 txt는 ~로, date는 지금으로 설정하겠다
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save() #저장
다시 Question.objects.all()을 수행해보면, Qeustion 오브젝트가 1개 생긴 것을 볼 수 있음
하지만 Question object가 1인 것은 나오지만 자세한 정보가 나오지 않고 있음 -> 가독성을 높이자!
polls.models.py 에 def함수 __str__ 추가 -> 모델에 __str__() 메소드를 추가하는것은 객체의 표현을 대화식 프롬프트에서 편하게 보려는 이유 말고도, Django 가 자동으로 생성하는 관리 사이트 에서도 객체의 표현이 사용되기 때문
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.qeustion_text
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE) #quetion이 choice에 속한 개념이니, choice는 question의 외래키를 받음
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
#추가
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
# ...
def was_published_recently(self): #하루만에 publish 되는가?
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
>>> Question.objects.get(pk=1) #primary key 값이 1인 것만 가져와라
<Question: hey>
>>> q=Question.objects.get(pk=1)
>>> q.was_published_recently()
True
'Dev > Etc' 카테고리의 다른 글
Django 설문조사앱 만들기 2 (0) | 2022.01.22 |
---|---|
[Bioinformatics] Multiple Pattern Matching (0) | 2021.11.02 |
[Fast Campus/Swift] 함수 사용법 (0) | 2021.09.10 |
[Fast Campus/Swift] 컬렉션 타입 (0) | 2021.09.08 |
[Fast Campus/Swift] 기본 데이터 타입 (0) | 2021.09.08 |
댓글