From 234b566e32c0f63e84831f7cc5f40f3bddff4232 Mon Sep 17 00:00:00 2001 From: hing9u <yeonheechae425@gmail.com> Date: Tue, 24 Aug 2021 19:32:19 +0900 Subject: [PATCH 1/9] docs: Add 02-database-and-admin.md --- docs/02-database_and_admin.md | 262 ++++++++++++++++++++++++++++++++++ mysite/db.sqlite3 | 0 2 files changed, 262 insertions(+) create mode 100644 docs/02-database_and_admin.md delete mode 100644 mysite/db.sqlite3 diff --git a/docs/02-database_and_admin.md b/docs/02-database_and_admin.md new file mode 100644 index 0000000..7ef710f --- /dev/null +++ b/docs/02-database_and_admin.md @@ -0,0 +1,262 @@ +# 02. Database and Admin + +데이터 베이스 설치 및 관리자 사이트 생성 + +## 데이터베이스 설치 + +- django는 기본적으로 SQLite : `mysite/settings.py` + ```python + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } + } + ``` +- 다른 데이터베이스 사용 시 [공식 문서](https://docs.djangoproject.com/ko/3.2/ref/settings/#std:setting-DATABASES) 참고 + ```python + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'mydatabase', + 'USER': 'mydatabaseuser', + 'PASSWORD': 'mypassword', + 'HOST': '127.0.0.1', + 'PORT': '5432', + } + } + ``` + +- `TIME_ZONE` 설정 + ```python + TIME_ZONE = 'Asia/Seoul' + ``` + +<br> + +- `INSTALLED_APPS` 확인 + ```python + INSTALLED_APPS = [ + 'django.contrib.admin', # 관리용 사이트 + 'django.contrib.auth', # 인증 시스템 + 'django.contrib.contenttypes', # 컨텐츠 타입을 위한 프레임워크 + 'django.contrib.sessions', # 세션 프레임워크 + 'django.contrib.messages', # 메세징 프레임워크 + 'django.contrib.staticfiles', # 정적 파일을 관리하는 프레임워크 + ] + ``` + +- 데이터베이스 설치 (`INSTALLED_APPS`에 대해서만) + ```bash + $ python manage.py migrate + ``` + +<br> + +## 모델 만들기 + +- **모델** : 부가적인 메타데이터를 가진 데이터베이스의 구조 (layout) +- 우리의 `polls`앱에서는 `Question` 과 `Choice`라는 두 가지 모델을 생성할 것. + +<br> + +- `polls/models.py` + ```python + 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) + ``` + +- 각 데이터베이스 필드를 `Field` 클래스의 인스턴스로 표현 +- `ForeignKey()` : 왜래키 참조 + +<br> + +- `INSTALLED_APPS`에 `polls.apps.PollsConfig` 추가 +```bash +$ python manage.py makemigrations polls +Migrations for 'polls': + polls\migrations\0001_initial.py + - Create model Question + - Create model Choice +``` + +- `polls/migrations/0001_initial.py` 파일 생성 확인 +- SQL 명령어 확인 + - app 이름과 모델명을 이용해 테이블 이름 자동 생성됨. + - 필드명, 필드 타입 관례에 따라 자동 생성 +```bash +$ python manage.py sqlmigrate polls 0001 +BEGIN; +-- +-- Create model Question +-- +CREATE TABLE "polls_question" ( + "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, + "question_text" varchar(200) NOT NULL, + "pub_date" datetime NOT NULL); +-- +-- Create model Choice +-- +CREATE TABLE "polls_choice" ( + "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, + "choice_text" varchar(200) NOT NULL, + "votes" integer NOT NULL, + "question_id" bigint NOT NULL REFERENCES + "polls_question" ("id") DEFERRABLE INITIALLY DEFERRED); +CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id"); +COMMIT; +``` + +- 데이터베이스 모델 관련 테이블 생성하기 (변경사항 데이트베이스에 적용) +```bash +$ python manage.py migrate +Operations to perform: + Apply all migrations: admin, auth, contenttypes, polls, sessions +Running migrations: + Applying polls.0001_initial... OK +``` + +<br> + +## 데이터베이스 API 사용하기 + +```bash +$ python manage.py shell +Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] +Type 'copyright', 'credits' or 'license' for more information +IPython 7.25.0 -- An enhanced Interactive Python. Type '?' for help. +``` +```python +In [1]: from polls.models import Choice, Question + +In [2]: Question.objects.all() +Out[2]: <QuerySet []> + +In [3]: from django.utils import timezone + +In [4]: q = Question(question_text="What's new?", pub_date=timezone.now()) + +In [5]: q.save() + +In [6]: q.id +Out[6]: 1 + +In [7]: q.question_text +Out[7]: "What's new?" + +In [8]: q.pub_date +Out[8]: datetime.datetime(2021, 8, 24, 8, 12, 43, 552040, tzinfo=<UTC>) + +In [9]: q.question_text = "What's up?" + +In [10]: q.save() + +In [11]: Question.objects.all() +Out[11]: <QuerySet [<Question: Question object (1)>]> +``` + +- timezone을 `Asia/Seoul`로 설정했음에도 `UTC`로 표시됨 발견 +- `settings.py`에서 `USE_TZ = False`로 변경 → 해결됨 + +```python +In [8]: q.pub_date +Out[8]: datetime.datetime(2021, 8, 24, 17, 49, 58, 504533) +``` + +- 객체 표현법 변경 +```python +# polls/models.py + +# Question +def __str__(self): + return self.question_text + +# Choice +def __str__(self): + return self.choice_text +``` +- 커스텀 메서드 추가 +```python +def was_published_recently(self): + return self.pub_date >= timezone.now() - datetime.timedelta(days=1) +``` + +<br> + +- 커스텀 메서드 확인 및 api 다루기 +- 이중 밑줄 (`__`)을 이용한 필드 조회 + +```bash +$ python manage.py shell +Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] +Type 'copyright', 'credits' or 'license' for more information +IPython 7.25.0 -- An enhanced Interactive Python. Type '?' for help. +``` +```python +In [1]: from polls.models import Choice, Question + +In [2]: Question.objects.all() +Out[2]: <QuerySet [<Question: What's up?>]> + +In [3]: Question.objects.filter(id=1) +Out[3]: <QuerySet [<Question: What's up?>]> + +In [4]: Question.objects.filter(question_text__startswith='What') +Out[4]: <QuerySet [<Question: What's up?>]> + +In [5]: from django.utils import timezone + +In [6]: current_year = timezone.now().year + +In [7]: Question.objects.get(pub_date__year=current_year) +Out[7]: <Question: What's up?> + +In [8]: Question.objects.get(pk=1) # primary key +Out[8]: <Question: What's up?> + +In [9]: q = Question.objects.get(pk=1) + +In [10]: q.was_published_recently() +Out[10]: True +``` + +- choice 추가하기 +```python +In [11]: q.choice_set.all() +Out[11]: <QuerySet []> + +In [12]: q.choice_set.create(choice_text='Not much', votes=0) +Out[12]: <Choice: Not much> + +In [13]: q.choice_set.create(choice_text='The sky', votes=0) +Out[13]: <Choice: The sky> + +In [14]: c = q.choice_set.create(choice_text='Just hacking again', votes=0) + +In [15]: c.question +Out[15]: <Question: What's up?> + +In [16]: q.choice_set.all() +Out[16]: <QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]> + +In [17]: q.choice_set.count() +Out[17]: 3 + +In [18]: Choice.objects.filter(question__pub_date__year=current_year) +Out[18]: <QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]> + +In [19]: c = q.choice_set.filter(choice_text__startswith='Just hacking') + +In [20]: c.delete() +Out[20]: (1, {'polls.Choice': 1}) +``` + diff --git a/mysite/db.sqlite3 b/mysite/db.sqlite3 deleted file mode 100644 index e69de29..0000000 From 8ebb6f76c89575cd9092d7cf1866d101f759b1d4 Mon Sep 17 00:00:00 2001 From: hing9u <yeonheechae425@gmail.com> Date: Tue, 24 Aug 2021 19:33:12 +0900 Subject: [PATCH 2/9] docs: Update README.md --- README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 85dad61..879dbf7 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,22 @@ # Start Django ✨ [Django Documentation Tutorial](https://docs.djangoproject.com/ko/3.2/intro/)을 따라가며 코드 및 배운 내용을 기록합니다. - +- **기간** : 2021.08.23 ~ 2021.08.27 +- **목적** : Django 프레임 워크 기본 기능 익히기 +- **순서** + 1. Django 공식 문서를 참고하여 실습 진행 + 2. 배운 내용 문서로 정리 + 3. 매일 아침 8:40 스크럼 회의 + 4. 피드백 반영하여 코드 및 문서 수정 ## Django > Django makes it easier to build better Web apps more quickly and with less code. -- **Development Environment** - - Python 3.9.6 - - Django 3.2.6 +**Development Environment** +- Python 3.9.6 +- Django 3.2.6 From bc20916e6a26902c00307064dc2807747130b84c Mon Sep 17 00:00:00 2001 From: hing9u <yeonheechae425@gmail.com> Date: Tue, 24 Aug 2021 19:34:38 +0900 Subject: [PATCH 3/9] chore: Create gitignore --- .gitignore | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..be32386 --- /dev/null +++ b/.gitignore @@ -0,0 +1,112 @@ +# Created by https://www.toptal.com/developers/gitignore/api/pycharm +# Edit at https://www.toptal.com/developers/gitignore?templates=pycharm + +### PyCharm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +.idea + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### PyCharm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# End of https://www.toptal.com/developers/gitignore/api/pycharm \ No newline at end of file From 56974aa53d2cfa5f08f9a58327e8cf4af368fa9a Mon Sep 17 00:00:00 2001 From: hing9u <yeonheechae425@gmail.com> Date: Tue, 24 Aug 2021 19:35:48 +0900 Subject: [PATCH 4/9] fix: Initialize database (bug fix) --- mysite/db.sqlite3 | Bin 0 -> 143360 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 mysite/db.sqlite3 diff --git a/mysite/db.sqlite3 b/mysite/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..d271c6f0e0bb6a2d7b3afa9261f5dbe5896b5b68 GIT binary patch literal 143360 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 NUQbAHdpx1g{{gaer&0g_ literal 0 HcmV?d00001 From efa17d4a84f13e4def631d00b9be425c3654c2eb Mon Sep 17 00:00:00 2001 From: hing9u <yeonheechae425@gmail.com> Date: Tue, 24 Aug 2021 19:36:58 +0900 Subject: [PATCH 5/9] feat: Set up database and create models MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolved #8 - 데이터베이스 설치 - 모델 생성 및 활성화 - 모델 메서드 추가 및 api 사용 --- .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 146 bytes .../__pycache__/settings.cpython-39.pyc | Bin 0 -> 2318 bytes mysite/mysite/__pycache__/urls.cpython-39.pyc | Bin 0 -> 974 bytes mysite/mysite/__pycache__/wsgi.cpython-39.pyc | Bin 0 -> 547 bytes mysite/mysite/settings.py | 5 +-- mysite/mysite/urls.py | 4 ++- .../polls/__pycache__/__init__.cpython-39.pyc | Bin 145 -> 145 bytes mysite/polls/__pycache__/admin.cpython-39.pyc | Bin 0 -> 186 bytes mysite/polls/__pycache__/apps.cpython-39.pyc | Bin 0 -> 420 bytes .../polls/__pycache__/models.cpython-39.pyc | Bin 0 -> 1273 bytes mysite/polls/__pycache__/urls.cpython-39.pyc | Bin 276 -> 276 bytes mysite/polls/__pycache__/views.cpython-39.pyc | Bin 389 -> 389 bytes mysite/polls/migrations/0001_initial.py | 32 ++++++++++++++++++ .../__pycache__/0001_initial.cpython-39.pyc | Bin 0 -> 1012 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 156 bytes mysite/polls/models.py | 23 ++++++++++++- 16 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 mysite/mysite/__pycache__/__init__.cpython-39.pyc create mode 100644 mysite/mysite/__pycache__/settings.cpython-39.pyc create mode 100644 mysite/mysite/__pycache__/urls.cpython-39.pyc create mode 100644 mysite/mysite/__pycache__/wsgi.cpython-39.pyc create mode 100644 mysite/polls/__pycache__/admin.cpython-39.pyc create mode 100644 mysite/polls/__pycache__/apps.cpython-39.pyc create mode 100644 mysite/polls/__pycache__/models.cpython-39.pyc create mode 100644 mysite/polls/migrations/0001_initial.py create mode 100644 mysite/polls/migrations/__pycache__/0001_initial.cpython-39.pyc create mode 100644 mysite/polls/migrations/__pycache__/__init__.cpython-39.pyc diff --git a/mysite/mysite/__pycache__/__init__.cpython-39.pyc b/mysite/mysite/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16ffc234e487b9c064368c21d822ffb4d68839d0 GIT binary patch literal 146 zcmYe~<>g`kf;mmfi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6w<*(xTqIJKx4 zOva>SCFZ5)>z0(3<QHWo=EUSy7H5{E!l?N8%)HE!_;|g7%3B;Zx%nxjIjMFa13v>X F0|2EqBH{o5 literal 0 HcmV?d00001 diff --git a/mysite/mysite/__pycache__/settings.cpython-39.pyc b/mysite/mysite/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e27fdc21fbc48834f6abe3d4fd08f367bdf3330e GIT binary patch literal 2318 zcmb7FTXWk)6qX(NQZ;VVq-{zIgO~}lrbMQMq@@GJiY=$6zD*=Ipy{Adv}<Qw-Kt$R zwO;ufeE{Czk)NYip7;YiFbw5LwiA!j8G>c)?VR(Sv)`VxGD{_agWsdyHq0j_j{7~C z%>VK*slrQtg$8jthcYN@XPm5_&2Tu2mww3n$p6HRa-*D{M@xDE@p^H{=@*6^%Ke<t z1?cn8Uql6c8G!`xD3J+2XGjKJe9aFtdI>G-mrw~^!g+N07Kc_|XGuoCjIN+n(7A%v z()McFUL%<yudkr%`W3XUuY$KVc(0-x`Ze^9ejVM^*U>GNE5B>r&2XGhADQmZ6Dekl zxI-!qyg+oulrSv%fj7bylLTQ8yErfzM&jXEyp2+mO%pl96)7_VHr2c>h7>@=Ddv{+ znY07ejRevQut;1$cT7e+SA;)1BH)kM_!DrCg(Jp%`mj<#o<*gJk68qk=Txv;0l*6L zd}7hcEZ)ilo*iLv5ZbnA6UszyaJnDUMc@dNKzwQ1A*TPwSAYj|j{bo2<;t0u@0si< z+MTjMT#BtQz?;?4HnFVg#{DmzZ-4&*di7$P?vM@Rqw&_LTrGb%V(h`r(Y=jVcebk= z4z1q#YOIwD(RJUmZ7P|*Po-Wmta<K$45O<Pc**iy7LY?JB|BPMTn!<TTMLVc33eG9 z`<O=S3qp!11^Ukl91xg8u(-Ks!QjBG<d`VLyE&CQ1R)zAn*o;6{S!8p)Px8av`=Kw z=Zj!d_tKobI$4{uDxY-%8Q^%XR7<=6P^G~@szLLV;Nv;f`wOv{K;C>DGR%QDVx<W> zXSleD8CCPf?FoHzRy%LmgiWmHBhz{gMIwFM2uufe{iGV`oZZDq^+{o1)2K29Vc79) zC_w2Dtg(w`1tQhcTGXaus;{P}|B4w<Iu^v_1+>gZcNSsJYDowmhQsLNb7%(m1r!pC z?oM@2ax@|IEyxMc(bj_U35jnpn90g~T-cRsPn1qw=j+XVH7?4%o{^3U-JaI$cGPHn z%GWU+lBAA+<MaUI0>T3`wAo2Uqr+4B=nEUJxUEQl#p$@5jq^%puh~&zz9YAlpa}II zJzj`A%^KgN^w<lK0e1>PsXM7paUip#SVM+Y;t<<Ris9)*!waHE=S6B0mpGx*!tRhA zo!WnWUi(Rr^rkVM0#wfn&<PzJ5bG>L4!fHnjRctzv!Y@zv>Q>e0-pe=no9KE6dx#c zJcQv|+a*J&Dz8DXjXLEUaltU)b~lW;;KLnilfxhj9LGh&NbZ+pJ;2nnU*b6L!`0$4 zy|^o@N^;_{penU}MKhi#-^IDQvfJN_OLD8#Jy7b#<F2Zy@ug-*)nEx0AWhU*XgBNi zmU1BPEAjGvx2qZb{Z_5pX~Y*arQK`Enxe)l2kKrk(Qh?ta*|Q;g}SWCiCZ<kA@{Y% zMo(7NgYJIacq+G=AnZaSmRfRWuP^T@My*>{0I=Cs4804vQ|v>)&3g|zlTqv5r=2*T ztZ6#zK?5JPB#wBst~BI+OEbVn*Jw1AR{a+)cpvyko4@YY9zIKQil*(e3AdXJ=nRNy zKbvIztebrfC4U?jzXbL}8$W{2J4e5PhF@M@S}E{Le3s7@g`&Xo*$h0{;+yQ>{2P9S aFC_E)KQJ!wZ?gQ{`zOB!R+A^s=l%tp-5SmS literal 0 HcmV?d00001 diff --git a/mysite/mysite/__pycache__/urls.cpython-39.pyc b/mysite/mysite/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01524863544a9175bfe61aa8f25b88b42eaaeda9 GIT binary patch literal 974 zcma)5%Zl4D6qOz4QBS7r7ZgDkjv-^ynO$g0OX$#n(nZ_Zn1DyIltjUjj3l>Bw%PV8 zy6Z1_+f{#|P^hFhU<!p1SPye`?m6e`qVw|*nDONMQ}nF|z)ySVj=&sVnNQgXgA8B~ z`=!VH%=hfRSN2$t1+1U-JwO5+kUs7oyn}D{1LAK7+u^}q``HK&KZ1CKgbx7QDXIy) z{qPRX1z*v1Es>^zhvBCUfp@hmE2K4%T;0KvDh;KmHBt70f?B}OlzdSMycQBNAqk{> zB_wkYuqp{s1S&#iAv9y7b){x$ibbIkyhVI1Dk-+4&`BX!N_cveT&7x7v{0!HPEC51 zhHt(iX0X&Oysmj+*&Wk5&}RvJjWI+VQdSA6XArKWV36%{R8{TIPW)vX?<5-m9fjtq z5xbd0(X`dI5sXYBM~u9P>^_Rad5M&|SQ=rtgZe)fLT`w)L=tDziOySt<=Eeojg3!` z$}Pww{)f>GFUlHIzBVSfd{$avih1(q#u)<*6;mD?OC~W~wN}oKb{)%+Si?^w+t{fy z<=$+UrC6uNz*DBk{&2Wa9EZQm%LTF5^buy1$9@x7$D3gry&qJfG$r4MZgto80~edV zj~_I{JU5Rg&$EXuUn5gXx|HT6gXXLwLYf8w(soP}*caXeR$6n`DfbT`ZNItc_tkv1 xxK%_dH!qGz7rNF$QdBOEZE{*HR8sAl(Q_tnU6Plc!BG}0cr^AN2V-yi=P$paE|35K literal 0 HcmV?d00001 diff --git a/mysite/mysite/__pycache__/wsgi.cpython-39.pyc b/mysite/mysite/__pycache__/wsgi.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c84bdf4436e89b7b02f46f068dec103eb2e9aea4 GIT binary patch literal 547 zcmYjPO>Yx15cN7~6BY^_5NAuABGFw$ZxuoyTB0CG4{3!IMcSD4WaG%|S*@Lv^a#I! z8wWV@hdB7kiNC;!*{mvMB)`%4<Gtsx<<U{hD87GrBELn9{b`E*=u+{DhI>Y!*p#VA zaT84=${oYY&a@LTh*sSn2db+MesZchU)l6f@d+Co-u#X~PKG0qqh07iEU*^k)@cu- zs&NImPvUsw1$?g1ffIfSqTMfzk)I3*>4X#|s<nY*0~;`6BWt}|va$pv=5tw9M(5IN zwDURfy=_FW2B9tKmAeIjmdLde3vJ-3Z~*br`^ufBslwbPY9(!fx1Mq=Q?Tht@;qJQ zwZ~LJWpG=9_35=MbQ=GqZm{tn3Xcl#Su>aI*$9u%-n||VFS5z`<>hERoMay^&aU2{ z-#ln9pE&Sd+rkZcp_gUkAj<+r7aq1glAP=(4QtIwC-lH>bd5H|bWp)Uu8j|O_XK~j zx_QPO{5yGbI=gaEyB*G2%45IwNR2bI*1~OSM3QP7`Y+lhzobvVT%VwOr_b;4`}{xl Cd8=0d literal 0 HcmV?d00001 diff --git a/mysite/mysite/settings.py b/mysite/mysite/settings.py index 6ebe44d..53ea25f 100644 --- a/mysite/mysite/settings.py +++ b/mysite/mysite/settings.py @@ -31,6 +31,7 @@ # Application definition INSTALLED_APPS = [ + 'polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -105,13 +106,13 @@ LANGUAGE_CODE = 'en-us' -TIME_ZONE = 'UTC' +TIME_ZONE = 'Asia/Seoul' USE_I18N = True USE_L10N = True -USE_TZ = True +USE_TZ = False # Static files (CSS, JavaScript, Images) diff --git a/mysite/mysite/urls.py b/mysite/mysite/urls.py index 4552108..0698963 100644 --- a/mysite/mysite/urls.py +++ b/mysite/mysite/urls.py @@ -14,8 +14,10 @@ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include urlpatterns = [ + # route : url 패턴 + path('polls/', include('polls.urls')), # 다른 url 패턴을 포함할 때 include 함수 사용 path('admin/', admin.site.urls), ] diff --git a/mysite/polls/__pycache__/__init__.cpython-39.pyc b/mysite/polls/__pycache__/__init__.cpython-39.pyc index f7a876690f8b0c120986e2096ecd59eb9c740f76..e892ef2fc7e8ac78d8b34c23303fd1ecbbd324ed 100644 GIT binary patch delta 18 YcmbQpIFXSnk(ZZ?0SLBin#k1-03#LzJOBUy delta 18 YcmbQpIFXSnk(ZZ?0SLktOyp_@03i4S%m4rY diff --git a/mysite/polls/__pycache__/admin.cpython-39.pyc b/mysite/polls/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9dedba1a2f6361cb7223a41d9119d5c71f071c22 GIT binary patch literal 186 zcmYe~<>g`kf-Rer6P<wcV-N=!FabFZKwK;UBvKes7;_kM8KW2(8B&;n88n$+0!0}# z8E>&BrsQVk`Drpm@ug%X=B4NBCFkdr6lEqAfecv5P{a(Rz{D?OXRDad;?$yIFc||; yu3J)Cl3$dWm=lv*S)5st8dH#;lT#c6HdU{n@)n0pZhlH>PO2Rv(45ae%m4suE-nQC literal 0 HcmV?d00001 diff --git a/mysite/polls/__pycache__/apps.cpython-39.pyc b/mysite/polls/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e252dd3ecbb8c4bed3c6aeff73870e686ac24ed7 GIT binary patch literal 420 zcmYjOJ4?hs5Z=uukb5;^D+pF8OkpV^cOGbW2x1cg%j#@GWb-ha6lbeH!9QUu{+eyA z{0mmjBnRHWd^?YC9=od+iz!3-`aDtZcz%<!FFra;RC|m747gz>PdH~c3_K8T420&d zBJse#V^Q#fEEaJ$SvAeNuCgM3q{zN-be5?05J9tq1H)>b2=Edg1a|S=?6x+>jtyRp z;7L_^9m7Lh)}W1zuZn!tclC9l4J1KB+)Wg?P|8Y`T1q#S5~;l*doJa3ugorU06J5> z>7>F2GNTU8r`!i?C%Di6zh~?7^xo>$4w#M$oOW2!7RsdM))t*khry|88XGs;R$w)~ omL&+e&xgn+5^lD;05MySh7k9E+-T81xbR}!`;uPC5_c~C04;!LxBvhE literal 0 HcmV?d00001 diff --git a/mysite/polls/__pycache__/models.cpython-39.pyc b/mysite/polls/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a767374867ea8fbb89750be175dbe19bb9fa4b4 GIT binary patch literal 1273 zcmZuxO>fgc5Z$%oc%6@`6j2IDz=2B+?E!H@6>61IK!^xbxLA=^Zg!hEZ0vS-O`D1v zT>AsKwa4E15u7>t%Bg>W6En6`1vM+}WOjBu^E~f4QM=tBuzvr168&%p`Gbe~RfEG8 zZ1Wn7Ac86q;;*CV#0edWzN_3xEv!-Uiin!<z7yd|XY74*!#YIj!iR`oMSMZ`NQYfP zHPY+Qygo^VR0cd|<B2>?6FI=U`Q^f43$}R*Mv{;U5<1cy*8~;L84W$@p4WwYK|{an zAF{G*7zhU4f}DNGq_J_DT>XL)mo#roq7$xUGPI-9B@tQq_<gpoVl$FrKp|ze(8t|{ zZR%jYk}=tX3W&XZR8{3xo>-__Gg2K~65WEtzt6hQ`=5-|rm%f6j*?-zZZn(eI8yz| z)WlZy4^yQ~zZ}BG;WYO-H&%1r#D+i!v_D;*q2H)3Z$R`QuYh<T9E51;xpP76^^DfY zXAdUf_O9@40DDbDQ`7Nsc9`vR9Dv3t=Wdc7=M2xtMjoIAer%*sCdG@Drj6OF$C2Ss zpd1|6av&3{rb}=)!~W<R`{LYQr;#(xlV~D2&l{Y>C^Ch9i}Rx_Qss@tQRG2)6zSbq zDxm{Bw|4;OM}SzyZb3|AbA1O5vM^^5u|_%junhylXp1%+<`&Tb1pZss%HM?Wyy_(A zZCn@h%n5z)m~ey(Dh$AHp#H#bR{CpI`m1+GX*`fH_aIF;3{=9vku;5((iJDZkOxtw z><xMsC{W`IK)vRms9Y#;5l6*5?n3U2kfjpJOiH~@TdyJp%+YITicvRqQ!V3R@>WiZ z@#KDYd#}5_^D<;J)$4nh{SZvvdXrc=lqEO0_a(K`luRrl;Q>6d0=pt%8E9xZ8lxSi zZ)3fn{8~1|eu<`4oiiINQ!3SahkqOew&Kw_ri-41K-p#~rx!TEvYi9X+?D1(3sM~B literal 0 HcmV?d00001 diff --git a/mysite/polls/__pycache__/urls.cpython-39.pyc b/mysite/polls/__pycache__/urls.cpython-39.pyc index 225b68146f4b9faf5d4e0dd836bc03e7c7a6c1f0..513f7eee352fb4ad88363f5106ddb88244df8db6 100644 GIT binary patch delta 19 ZcmbQjG=+&Pk(ZZ?0SLBi+Q`Ml2mmK%1Lyz% delta 19 ZcmbQjG=+&Pk(ZZ?0SJm0Zsg)(1OO$B1C{^) diff --git a/mysite/polls/__pycache__/views.cpython-39.pyc b/mysite/polls/__pycache__/views.cpython-39.pyc index 87e4b424faa301bbb0014087a0bfbd2a1e0ef22d..0e63f11d72971525179e7af12a27b2301b7ae35f 100644 GIT binary patch delta 19 ZcmZo=Ze`|5<mKgJ0D>)>HgZ)n0stmY1U&!% delta 19 ZcmZo=Ze`|5<mKgJ0D>6{HgZ)n0stjV1P=fJ diff --git a/mysite/polls/migrations/0001_initial.py b/mysite/polls/migrations/0001_initial.py new file mode 100644 index 0000000..18ab3b2 --- /dev/null +++ b/mysite/polls/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# Generated by Django 3.2.6 on 2021-08-24 17:48 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Question', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('question_text', models.CharField(max_length=200)), + ('pub_date', models.DateTimeField(verbose_name='date Published')), + ], + ), + migrations.CreateModel( + name='Choice', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('choice_text', models.CharField(max_length=200)), + ('votes', models.IntegerField(default=0)), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='polls.question')), + ], + ), + ] diff --git a/mysite/polls/migrations/__pycache__/0001_initial.cpython-39.pyc b/mysite/polls/migrations/__pycache__/0001_initial.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9c4a000057f1c01f9b728989bbe7d1a943ee268 GIT binary patch literal 1012 zcmZuw&2G~`5caM&iIX_#59RO1fs2ud$`v8hlD4Qqtw1eESdlCzGj-PZC$*ib=@qVd z54iFaJi}f&^$Cy=AZG2PEfQ<(c)wlEH#6Vt`khY8pz-eOL;t-njPDxU9JFU_(ad{f zzyKB*F>_hWUCuP-k?D$;2ACi|86c2_wU4G-1Ab&UwM+6b9Ijfi3^KovX_BjYoB~Gq z;Ygp|9Bl$yH1p47&~O<TE(hkCf#C|Qg>~RyVk5MG(I=n=^|?6V(4f60SkRm^LM=iq zXoIa$U_xikOW*E)eOLbRT_x0pHCQj1ZV|Gv6L!N!xDu|y2Hc)=;uM-Q;O-jSp&IY1 z=E1VKV`aUWVy^2{T*98>`#X+Mwm&UWZ<L{5AgJ~vld+%8ybm~2%^Wl7NAd!deTLaE z&CyHz7**$VLF5&9UR-`7NgPHx`sZGRNl=WHHJJ`QAj*rbwhvxUhmp+32oB4%lq9<- zsp=;ZBOu}X<5Z4NwMXT@Bv!Svw7@)L6@LTp#GgimvX<d5x|1}D^4<~?Ycowe>L3=V zc#$4D>&o)Vq&-iyJdfHtjgZ#1=bcXdNasMPAro0psmcbNU;>zoBn9RaShf45HV67* zWTxJ+U&vsaRNK?3t7d=fXVtQ^L$w~u7%OP+Cj|z$IBe~u8Ok7eMatG8^phY}9EQp& z)74#R^tX@t+dI3el}>PRBfl7#LorM9bGQF=@RpjAmv&H*JT52|-KRl3%VmLsQj@{; zr5<c<Za(oA74{~xOuw22&HN!5iwiD<V4QETF6;j0e}r{~*u7tbf0Q0hT{WwSJs6hK oRBGJ6+U!-2r?)I9)BL6Hbq&?(5gjP&S=Ei_TGU)8waP5>FIgcb*Z=?k literal 0 HcmV?d00001 diff --git a/mysite/polls/migrations/__pycache__/__init__.cpython-39.pyc b/mysite/polls/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8eb54ec8f4aec231fbbc91ead7e3f0888e87426e GIT binary patch literal 156 zcmYe~<>g`kf-Rer6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HcvsFxJacWU9 zn2bruO3X{o*DWb6$uG)G%!$dZEY2)RjVZ{_$tjM>%}g&!EXmBzD~^ee&&<m#iI3MS WsJz8tlbfGXnv-e=GWs(RGXMZ*3nyFv literal 0 HcmV?d00001 diff --git a/mysite/polls/models.py b/mysite/polls/models.py index 71a8362..30ea737 100644 --- a/mysite/polls/models.py +++ b/mysite/polls/models.py @@ -1,3 +1,24 @@ +import datetime + from django.db import models +from django.utils import timezone + + +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) + + +class Choice(models.Model): + question = models.ForeignKey(Question, on_delete=models.CASCADE) + choice_text = models.CharField(max_length=200) + votes = models.IntegerField(default=0) -# Create your models here. + def __str__(self): + return self.choice_text From d17c331f9cb0b4ca0799bb77a3068b38d6c86826 Mon Sep 17 00:00:00 2001 From: hing9u <yeonheechae425@gmail.com> Date: Tue, 24 Aug 2021 20:29:44 +0900 Subject: [PATCH 6/9] docs: Update 02-database_and_admin --- docs/02-database_and_admin.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/docs/02-database_and_admin.md b/docs/02-database_and_admin.md index 7ef710f..24e06b9 100644 --- a/docs/02-database_and_admin.md +++ b/docs/02-database_and_admin.md @@ -76,7 +76,7 @@ ``` - 각 데이터베이스 필드를 `Field` 클래스의 인스턴스로 표현 -- `ForeignKey()` : 왜래키 참조 +- `ForeignKey()` : 외래키 참조 <br> @@ -116,7 +116,7 @@ CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id COMMIT; ``` -- 데이터베이스 모델 관련 테이블 생성하기 (변경사항 데이트베이스에 적용) +- 데이터베이스 모델 관련 테이블 생성하기 (변경사항 데이터베이스에 적용) ```bash $ python manage.py migrate Operations to perform: @@ -260,3 +260,29 @@ In [20]: c.delete() Out[20]: (1, {'polls.Choice': 1}) ``` +## 관리자 생성하기 +```bash +$ python manage.py createsuperuser +Username (leave blank to use 'user'): admin +Email address: chaeyeonhee@kakao.com +Password: +Password (again): +Superuser created successfully. +``` + +<br> + +- 개발 서버 : http://127.0.0.1:8000/admin/ +```bash +- $ python manage.py runserver +Watching for file changes with StatReloader +Performing system checks... + +System check identified no issues (0 silenced). +August 24, 2021 - 19:56:57 +Django version 3.2.6, using settings 'mysite.settings' +Starting development server at http://127.0.0.1:8000/ +Quit the server with CTRL-BREAK. +[24/Aug/2021 19:57:21] "GET /admin/ HTTP/1.1" 302 0 +... +``` From 242716530a4a33c2c0ff964d3e54e54600e7cc38 Mon Sep 17 00:00:00 2001 From: hing9u <yeonheechae425@gmail.com> Date: Tue, 24 Aug 2021 20:29:55 +0900 Subject: [PATCH 7/9] feat: Create admin and register polls app MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolved #9 - 관리자 생성 - polls app 관리자 사이트에 등록 --- mysite/db.sqlite3 | Bin 143360 -> 143360 bytes mysite/polls/__pycache__/admin.cpython-39.pyc | Bin 186 -> 260 bytes mysite/polls/admin.py | 3 ++- 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mysite/db.sqlite3 b/mysite/db.sqlite3 index d271c6f0e0bb6a2d7b3afa9261f5dbe5896b5b68..0ab4cacf02b0ca442d024ed2ebd3d7dbfb8c4ba5 100644 GIT binary patch delta 897 zcmaiyO-~a+7{_O6(Jo0DIdK4!7D+IYmg(-ayKRE9eQ%}o9cT$DrQN>l_GRgIyKM;p z^b1J*0EU=&R}%dg5>J{yLb!U+n+G^JfrBQ*IGMwfdFFZMKmXrzaA7*QFuj_hY)8{R z%JzQi=>kQ+ezV}F=#y^?^XMK0qX0%vtd=FXf5=j1aJVSYlV*;l1+%g(mn%#`trZ!k zYnE{#vSw@1Y)eqX;ZDlS3Tj#}ulR<I)@&H@jOt1ylPS46NcU84V-<DWU1zqP=}9>$ zt~7)5?aaKc`D2R=VjMQa+Zb$NkcZ(stkcdj4j+U0V!2swm1;$CAhugIQCyOXa<OeM zwVQW}7{-nfc01f-000X90%YGmnb`Uc$4rJv`lgfl6ZMlaJ{TQ81LJ4plV8U7Us$Qp z*vq7VSXtMbXvfXB2F;$v50#QW9JJLPspRS-T(XPN{;K3x<GLgyy<(vrYRF7HriEn5 z*-{gE3G3d0;;$=#uozDJn$=1sF<h^2r!^&wyHX~cEwMo{oWN{el4Y?SatAoaN@Ks7 zcS+9^+x|+B>tyn|@-phhIgLf3+G+<oG^OwLu6Jv`AVyi83k=rdm7z0|&-638FV^u! z*mPu&in*dV>2r0|KyC$BLUD|d;Bhn~*<#s~<Dy|M*6(GsMwDl(?xE!33YcKDm6y|v z91~0_YDC!awNfjATTk6K#Qg<=C6pbvo}K}C2F8e|r*QU>Ax8htvkwPG%Uk2=DVeG( z0Ix{l4>$pU(Lm9r+m6=&Uf&!~5@-ekO`C7v9Rqj_rb#$Ol1H$xNzp)n)+$9)cep#T z9dSI1dB<9<*qu`?n(}O8cZLj2t16afJeJ*=N?mM}RT6H@_={c9lF+srb+tyan|phk zrjd`Ql+i*&UIKVY9{dU)KQsvRzumYMc@E$?x&0Z=J+TUFR>}yh>>mktbu#ZBj97jH D>t6m0 delta 169 zcmZp8z|ru4V}dlJ#zYxsMvaXLcKVDQljrMOGIDIbsjqFYndJey03-Wm!G`zz69ZTm z9T3=bfJK0VL4W}SxKPC(09F5ypLBqmRR$<24VIkzzn^tE%LPV-%`6R!0<8Sk82GPk z7A!c!ucg7r!l39Fo{?ChUaU}BU~gn#WT<Okp=)HKU}$b-VrgY+p=WAfVrp!>On^xN E0N4>Sg8%>k diff --git a/mysite/polls/__pycache__/admin.cpython-39.pyc b/mysite/polls/__pycache__/admin.cpython-39.pyc index 9dedba1a2f6361cb7223a41d9119d5c71f071c22..7122fd378cc5589c9da6f945d744d6fb426e5cc6 100644 GIT binary patch delta 187 zcmdnR*uqqw$ji&c00jEiRTATY^kWbQ888Dm4nSP20VGlwQW$d>av7r-85vTTQkZj? za+#x;85vR;vsf0erZO)CiL(SVXtKTps%Fq+yv3TBlAD?Lk`cn=2rNx4F3HT#^V4LD z;!DX&oERpcc8e`HKP5G%xQGR)=oU+HW=ZNTj-u4`%;J*NqLmCq96;eBj*0nhoW&p& IJd8X{0HGZy5&!@I delta 141 zcmZo++QnF($ji&c00dh$DJMDs>Bk@rGGGF79Dul307#@Tq%h_%<T6GvGBTtv1v6+e zzXXahXfobnO-#wn%=6P^isDPjO3X{o*GtaND=ErMDgqg>lA(whNP&r8#?DqTp~b01 O#Xxf6Q8U)hAR_?K;~g^q diff --git a/mysite/polls/admin.py b/mysite/polls/admin.py index 8c38f3f..aa3fdc6 100644 --- a/mysite/polls/admin.py +++ b/mysite/polls/admin.py @@ -1,3 +1,4 @@ from django.contrib import admin +from .models import Question -# Register your models here. +admin.site.register(Question) \ No newline at end of file From 7e54ad6f722e8c09c22fe62d462115cd845d8b90 Mon Sep 17 00:00:00 2001 From: hing9u <yeonheechae425@gmail.com> Date: Tue, 24 Aug 2021 20:29:44 +0900 Subject: [PATCH 8/9] docs: Update 02-database_and_admin --- docs/02-database_and_admin.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/docs/02-database_and_admin.md b/docs/02-database_and_admin.md index 7ef710f..24e06b9 100644 --- a/docs/02-database_and_admin.md +++ b/docs/02-database_and_admin.md @@ -76,7 +76,7 @@ ``` - 각 데이터베이스 필드를 `Field` 클래스의 인스턴스로 표현 -- `ForeignKey()` : 왜래키 참조 +- `ForeignKey()` : 외래키 참조 <br> @@ -116,7 +116,7 @@ CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id COMMIT; ``` -- 데이터베이스 모델 관련 테이블 생성하기 (변경사항 데이트베이스에 적용) +- 데이터베이스 모델 관련 테이블 생성하기 (변경사항 데이터베이스에 적용) ```bash $ python manage.py migrate Operations to perform: @@ -260,3 +260,29 @@ In [20]: c.delete() Out[20]: (1, {'polls.Choice': 1}) ``` +## 관리자 생성하기 +```bash +$ python manage.py createsuperuser +Username (leave blank to use 'user'): admin +Email address: chaeyeonhee@kakao.com +Password: +Password (again): +Superuser created successfully. +``` + +<br> + +- 개발 서버 : http://127.0.0.1:8000/admin/ +```bash +- $ python manage.py runserver +Watching for file changes with StatReloader +Performing system checks... + +System check identified no issues (0 silenced). +August 24, 2021 - 19:56:57 +Django version 3.2.6, using settings 'mysite.settings' +Starting development server at http://127.0.0.1:8000/ +Quit the server with CTRL-BREAK. +[24/Aug/2021 19:57:21] "GET /admin/ HTTP/1.1" 302 0 +... +``` From 4e28f3055b982bca06362968a30d3f650babaedd Mon Sep 17 00:00:00 2001 From: hing9u <yeonheechae425@gmail.com> Date: Tue, 24 Aug 2021 20:29:55 +0900 Subject: [PATCH 9/9] feat: Create admin and register polls app MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolved #9 - 관리자 생성 - polls app 관리자 사이트에 등록 --- mysite/db.sqlite3 | Bin 143360 -> 143360 bytes mysite/polls/__pycache__/admin.cpython-39.pyc | Bin 186 -> 260 bytes mysite/polls/admin.py | 3 ++- 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mysite/db.sqlite3 b/mysite/db.sqlite3 index d271c6f0e0bb6a2d7b3afa9261f5dbe5896b5b68..0ab4cacf02b0ca442d024ed2ebd3d7dbfb8c4ba5 100644 GIT binary patch delta 897 zcmaiyO-~a+7{_O6(Jo0DIdK4!7D+IYmg(-ayKRE9eQ%}o9cT$DrQN>l_GRgIyKM;p z^b1J*0EU=&R}%dg5>J{yLb!U+n+G^JfrBQ*IGMwfdFFZMKmXrzaA7*QFuj_hY)8{R z%JzQi=>kQ+ezV}F=#y^?^XMK0qX0%vtd=FXf5=j1aJVSYlV*;l1+%g(mn%#`trZ!k zYnE{#vSw@1Y)eqX;ZDlS3Tj#}ulR<I)@&H@jOt1ylPS46NcU84V-<DWU1zqP=}9>$ zt~7)5?aaKc`D2R=VjMQa+Zb$NkcZ(stkcdj4j+U0V!2swm1;$CAhugIQCyOXa<OeM zwVQW}7{-nfc01f-000X90%YGmnb`Uc$4rJv`lgfl6ZMlaJ{TQ81LJ4plV8U7Us$Qp z*vq7VSXtMbXvfXB2F;$v50#QW9JJLPspRS-T(XPN{;K3x<GLgyy<(vrYRF7HriEn5 z*-{gE3G3d0;;$=#uozDJn$=1sF<h^2r!^&wyHX~cEwMo{oWN{el4Y?SatAoaN@Ks7 zcS+9^+x|+B>tyn|@-phhIgLf3+G+<oG^OwLu6Jv`AVyi83k=rdm7z0|&-638FV^u! z*mPu&in*dV>2r0|KyC$BLUD|d;Bhn~*<#s~<Dy|M*6(GsMwDl(?xE!33YcKDm6y|v z91~0_YDC!awNfjATTk6K#Qg<=C6pbvo}K}C2F8e|r*QU>Ax8htvkwPG%Uk2=DVeG( z0Ix{l4>$pU(Lm9r+m6=&Uf&!~5@-ekO`C7v9Rqj_rb#$Ol1H$xNzp)n)+$9)cep#T z9dSI1dB<9<*qu`?n(}O8cZLj2t16afJeJ*=N?mM}RT6H@_={c9lF+srb+tyan|phk zrjd`Ql+i*&UIKVY9{dU)KQsvRzumYMc@E$?x&0Z=J+TUFR>}yh>>mktbu#ZBj97jH D>t6m0 delta 169 zcmZp8z|ru4V}dlJ#zYxsMvaXLcKVDQljrMOGIDIbsjqFYndJey03-Wm!G`zz69ZTm z9T3=bfJK0VL4W}SxKPC(09F5ypLBqmRR$<24VIkzzn^tE%LPV-%`6R!0<8Sk82GPk z7A!c!ucg7r!l39Fo{?ChUaU}BU~gn#WT<Okp=)HKU}$b-VrgY+p=WAfVrp!>On^xN E0N4>Sg8%>k diff --git a/mysite/polls/__pycache__/admin.cpython-39.pyc b/mysite/polls/__pycache__/admin.cpython-39.pyc index 9dedba1a2f6361cb7223a41d9119d5c71f071c22..7122fd378cc5589c9da6f945d744d6fb426e5cc6 100644 GIT binary patch delta 187 zcmdnR*uqqw$ji&c00jEiRTATY^kWbQ888Dm4nSP20VGlwQW$d>av7r-85vTTQkZj? za+#x;85vR;vsf0erZO)CiL(SVXtKTps%Fq+yv3TBlAD?Lk`cn=2rNx4F3HT#^V4LD z;!DX&oERpcc8e`HKP5G%xQGR)=oU+HW=ZNTj-u4`%;J*NqLmCq96;eBj*0nhoW&p& IJd8X{0HGZy5&!@I delta 141 zcmZo++QnF($ji&c00dh$DJMDs>Bk@rGGGF79Dul307#@Tq%h_%<T6GvGBTtv1v6+e zzXXahXfobnO-#wn%=6P^isDPjO3X{o*GtaND=ErMDgqg>lA(whNP&r8#?DqTp~b01 O#Xxf6Q8U)hAR_?K;~g^q diff --git a/mysite/polls/admin.py b/mysite/polls/admin.py index 8c38f3f..aa3fdc6 100644 --- a/mysite/polls/admin.py +++ b/mysite/polls/admin.py @@ -1,3 +1,4 @@ from django.contrib import admin +from .models import Question -# Register your models here. +admin.site.register(Question) \ No newline at end of file