From 1fc6af755302348e50e228d7e2dcd678278d5573 Mon Sep 17 00:00:00 2001 From: pedrolab <531310-pedrolab@users.noreply.gitlab.com> Date: Mon, 6 Jul 2020 17:03:14 +0200 Subject: [PATCH 1/8] add pedro and its django tutorial #1 #2 --- README.md | 1 + pedro/.gitignore | 2 + pedro/django-tutorial/mysite/manage.py | 21 +++ .../django-tutorial/mysite/mysite/__init__.py | 0 pedro/django-tutorial/mysite/mysite/asgi.py | 16 +++ .../django-tutorial/mysite/mysite/settings.py | 121 ++++++++++++++++++ pedro/django-tutorial/mysite/mysite/urls.py | 22 ++++ pedro/django-tutorial/mysite/mysite/wsgi.py | 16 +++ .../django-tutorial/mysite/polls/__init__.py | 0 pedro/django-tutorial/mysite/polls/admin.py | 7 + pedro/django-tutorial/mysite/polls/apps.py | 5 + .../mysite/polls/migrations/0001_initial.py | 32 +++++ .../mysite/polls/migrations/__init__.py | 0 pedro/django-tutorial/mysite/polls/models.py | 21 +++ pedro/django-tutorial/mysite/polls/tests.py | 3 + pedro/django-tutorial/mysite/polls/urls.py | 7 + pedro/django-tutorial/mysite/polls/views.py | 9 ++ 17 files changed, 283 insertions(+) create mode 100644 pedro/.gitignore create mode 100755 pedro/django-tutorial/mysite/manage.py create mode 100644 pedro/django-tutorial/mysite/mysite/__init__.py create mode 100644 pedro/django-tutorial/mysite/mysite/asgi.py create mode 100644 pedro/django-tutorial/mysite/mysite/settings.py create mode 100644 pedro/django-tutorial/mysite/mysite/urls.py create mode 100644 pedro/django-tutorial/mysite/mysite/wsgi.py create mode 100644 pedro/django-tutorial/mysite/polls/__init__.py create mode 100644 pedro/django-tutorial/mysite/polls/admin.py create mode 100644 pedro/django-tutorial/mysite/polls/apps.py create mode 100644 pedro/django-tutorial/mysite/polls/migrations/0001_initial.py create mode 100644 pedro/django-tutorial/mysite/polls/migrations/__init__.py create mode 100644 pedro/django-tutorial/mysite/polls/models.py create mode 100644 pedro/django-tutorial/mysite/polls/tests.py create mode 100644 pedro/django-tutorial/mysite/polls/urls.py create mode 100644 pedro/django-tutorial/mysite/polls/views.py diff --git a/README.md b/README.md index 5becb7a..9f124d8 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,4 @@ into the ungleich clearning circle. * [Jin-Guk](https://code.ungleich.ch/kjg/ungleich-learning-circle): git@code.ungleich.ch:kjg/ungleich-learning-circle.git * [Sami](https://code.ungleich.ch/samialazar/learning-cicle): git@code.ungleich.ch:samialazar/learning-cicle.git * [Youngjin](https://code.ungleich.ch/youngjin.han/ungleich-learning-circle): git@code.ungleich.ch:youngjin.han/ungleich-learning-circle.git +* [Pedro](https://code.ungleich.ch/pedro/ungleich-learning-circle): git@code.ungleich.ch:pedro/ungleich-learning-circle.git diff --git a/pedro/.gitignore b/pedro/.gitignore new file mode 100644 index 0000000..154d790 --- /dev/null +++ b/pedro/.gitignore @@ -0,0 +1,2 @@ +*pyc +django-tutorial/mysite/db.sqlite3 diff --git a/pedro/django-tutorial/mysite/manage.py b/pedro/django-tutorial/mysite/manage.py new file mode 100755 index 0000000..341863c --- /dev/null +++ b/pedro/django-tutorial/mysite/manage.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/pedro/django-tutorial/mysite/mysite/__init__.py b/pedro/django-tutorial/mysite/mysite/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pedro/django-tutorial/mysite/mysite/asgi.py b/pedro/django-tutorial/mysite/mysite/asgi.py new file mode 100644 index 0000000..35d925e --- /dev/null +++ b/pedro/django-tutorial/mysite/mysite/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for mysite project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + +application = get_asgi_application() diff --git a/pedro/django-tutorial/mysite/mysite/settings.py b/pedro/django-tutorial/mysite/mysite/settings.py new file mode 100644 index 0000000..82ed813 --- /dev/null +++ b/pedro/django-tutorial/mysite/mysite/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for mysite project. + +Generated by 'django-admin startproject' using Django 3.0.8. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.0/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '37jgpv28n1x!f3-48h)4ad99&jz-ek$@e6uf*an5uve6%7atqq' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'polls.apps.PollsConfig', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'mysite.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'mysite.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/3.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Europe/Madrid' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.0/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/pedro/django-tutorial/mysite/mysite/urls.py b/pedro/django-tutorial/mysite/mysite/urls.py new file mode 100644 index 0000000..a3db229 --- /dev/null +++ b/pedro/django-tutorial/mysite/mysite/urls.py @@ -0,0 +1,22 @@ +"""mysite URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/3.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import include, path + +urlpatterns = [ + path('polls/', include('polls.urls')), + path('admin/', admin.site.urls), +] diff --git a/pedro/django-tutorial/mysite/mysite/wsgi.py b/pedro/django-tutorial/mysite/mysite/wsgi.py new file mode 100644 index 0000000..dbe7bb5 --- /dev/null +++ b/pedro/django-tutorial/mysite/mysite/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for mysite project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + +application = get_wsgi_application() diff --git a/pedro/django-tutorial/mysite/polls/__init__.py b/pedro/django-tutorial/mysite/polls/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pedro/django-tutorial/mysite/polls/admin.py b/pedro/django-tutorial/mysite/polls/admin.py new file mode 100644 index 0000000..d0e6a57 --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin + +# Register your models here. + +from .models import Question + +admin.site.register(Question) diff --git a/pedro/django-tutorial/mysite/polls/apps.py b/pedro/django-tutorial/mysite/polls/apps.py new file mode 100644 index 0000000..d0f109e --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class PollsConfig(AppConfig): + name = 'polls' diff --git a/pedro/django-tutorial/mysite/polls/migrations/0001_initial.py b/pedro/django-tutorial/mysite/polls/migrations/0001_initial.py new file mode 100644 index 0000000..330bbb6 --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# Generated by Django 3.0.8 on 2020-07-03 12: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.AutoField(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.AutoField(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/pedro/django-tutorial/mysite/polls/migrations/__init__.py b/pedro/django-tutorial/mysite/polls/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pedro/django-tutorial/mysite/polls/models.py b/pedro/django-tutorial/mysite/polls/models.py new file mode 100644 index 0000000..bfd48bd --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/models.py @@ -0,0 +1,21 @@ +import datetime + +from django.db import models +from django.utils import timezone + +# Create your models here. + +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) + def __str__(self): + return self.choice_text diff --git a/pedro/django-tutorial/mysite/polls/tests.py b/pedro/django-tutorial/mysite/polls/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/pedro/django-tutorial/mysite/polls/urls.py b/pedro/django-tutorial/mysite/polls/urls.py new file mode 100644 index 0000000..88a9cac --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + path('', views.index, name='index'), +] diff --git a/pedro/django-tutorial/mysite/polls/views.py b/pedro/django-tutorial/mysite/polls/views.py new file mode 100644 index 0000000..6dcc115 --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/views.py @@ -0,0 +1,9 @@ +from django.shortcuts import render + +# Create your views here. + +from django.http import HttpResponse + + +def index(request): + return HttpResponse("Hello, world. You're at the polls index.") From 8b9bf5030f2816a016ebe7cf02a17e1b74f6b389 Mon Sep 17 00:00:00 2001 From: pedrolab <531310-pedrolab@users.noreply.gitlab.com> Date: Mon, 13 Jul 2020 13:55:28 +0200 Subject: [PATCH 2/8] django tutorial #3 done --- .../django-tutorial/mysite/mysite/settings.py | 7 ++- .../mysite/polls/templates/polls/detail.html | 6 ++ .../mysite/polls/templates/polls/index.html | 13 +++++ pedro/django-tutorial/mysite/polls/urls.py | 11 +++- pedro/django-tutorial/mysite/polls/views.py | 57 ++++++++++++++++++- 5 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 pedro/django-tutorial/mysite/polls/templates/polls/detail.html create mode 100644 pedro/django-tutorial/mysite/polls/templates/polls/index.html diff --git a/pedro/django-tutorial/mysite/mysite/settings.py b/pedro/django-tutorial/mysite/mysite/settings.py index 82ed813..0e2091c 100644 --- a/pedro/django-tutorial/mysite/mysite/settings.py +++ b/pedro/django-tutorial/mysite/mysite/settings.py @@ -25,7 +25,12 @@ SECRET_KEY = '37jgpv28n1x!f3-48h)4ad99&jz-ek$@e6uf*an5uve6%7atqq' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = [ + +"localhost", +"2a0a-e5c1-011f-0000-0000-0000-0000-0001.has-a.name" + +] # Application definition diff --git a/pedro/django-tutorial/mysite/polls/templates/polls/detail.html b/pedro/django-tutorial/mysite/polls/templates/polls/detail.html new file mode 100644 index 0000000..975db2a --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/templates/polls/detail.html @@ -0,0 +1,6 @@ +

{{ question.question_text }}

+ diff --git a/pedro/django-tutorial/mysite/polls/templates/polls/index.html b/pedro/django-tutorial/mysite/polls/templates/polls/index.html new file mode 100644 index 0000000..b1b7ea8 --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/templates/polls/index.html @@ -0,0 +1,13 @@ +{% if latest_question_list %} + +{% else %} +

No polls are available.

+{% endif %} diff --git a/pedro/django-tutorial/mysite/polls/urls.py b/pedro/django-tutorial/mysite/polls/urls.py index 88a9cac..3e302ea 100644 --- a/pedro/django-tutorial/mysite/polls/urls.py +++ b/pedro/django-tutorial/mysite/polls/urls.py @@ -2,6 +2,15 @@ from django.urls import path from . import views +# namespacing URLs +app_name = 'polls' urlpatterns = [ - path('', views.index, name='index'), + # ex: /polls/ + path('', views.index, name='index'), + # ex: /polls/5/ + path('/', views.detail, name='detail'), + # ex: /polls/5/results/ + path('/results/', views.results, name='results'), + # ex: /polls/5/vote/ + path('/vote/', views.vote, name='vote'), ] diff --git a/pedro/django-tutorial/mysite/polls/views.py b/pedro/django-tutorial/mysite/polls/views.py index 6dcc115..257fe14 100644 --- a/pedro/django-tutorial/mysite/polls/views.py +++ b/pedro/django-tutorial/mysite/polls/views.py @@ -1,9 +1,62 @@ -from django.shortcuts import render +from django.shortcuts import get_object_or_404, render # Create your views here. from django.http import HttpResponse +from django.template import loader +from .models import Question +from django.http import Http404 + +## simple index +#def index(request): +# return HttpResponse("Hello, world. You're at the polls index.") + +## meaningful index +#def index(request): +# latest_question_list = Question.objects.order_by('-pub_date')[:5] +# output = ', '.join([q.question_text for q in latest_question_list]) +# return HttpResponse(output) + +## meaningful and templated index +#def index(request): +# latest_question_list = Question.objects.order_by('-pub_date')[:5] +# template = loader.get_template('polls/index.html') +# context = { +# 'latest_question_list': latest_question_list, +# } +# return HttpResponse(template.render(context, request)) + +## meaningful, templated and easy to write index +## and then we no longer need to import loader and HttpResponse def index(request): - return HttpResponse("Hello, world. You're at the polls index.") + latest_question_list = Question.objects.order_by('-pub_date')[:5] + context = { + 'latest_question_list': latest_question_list, + } + return render(request, 'polls/index.html', context) + +## simple detail +#def detail(request, question_id): +# return HttpResponse("You're looking at question %s." % question_id) + +## meaningful detail +#def detail(request, question_id): +# try: +# question = Question.objects.get(pk=question_id) +# except Question.DoesNotExist: +# raise Http404("Question does not exist") +# return render(request, 'polls/detail.html', {'question': question}) + +## meaningful and easy to write detail +def detail(request, question_id): + question = get_object_or_404(Question, pk=question_id) + return render(request, 'polls/detail.html', {'question': question}) + +def results(request, question_id): + response = "You're looking at the results of question %s." + return HttpResponse(response % question_id) + +def vote(request, question_id): + return HttpResponse("You're voting on question %s." % question_id) From 0efde9e43c2e5455ed1e774bcc6efbe355efd2f8 Mon Sep 17 00:00:00 2001 From: pedrolab <531310-pedrolab@users.noreply.gitlab.com> Date: Mon, 13 Jul 2020 14:11:57 +0200 Subject: [PATCH 3/8] add choice in django admin --- pedro/django-tutorial/mysite/polls/admin.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pedro/django-tutorial/mysite/polls/admin.py b/pedro/django-tutorial/mysite/polls/admin.py index d0e6a57..abb84ab 100644 --- a/pedro/django-tutorial/mysite/polls/admin.py +++ b/pedro/django-tutorial/mysite/polls/admin.py @@ -4,4 +4,8 @@ from django.contrib import admin from .models import Question +from .models import Choice + admin.site.register(Question) + +admin.site.register(Choice) From 485e78a6e2159b746212fb90ead7f6d61b44bab7 Mon Sep 17 00:00:00 2001 From: pedrolab <531310-pedrolab@users.noreply.gitlab.com> Date: Mon, 20 Jul 2020 02:09:01 +0200 Subject: [PATCH 4/8] django tutorial #4 completed --- .../mysite/polls/templates/polls/detail.html | 12 ++- .../mysite/polls/templates/polls/results.html | 9 +++ pedro/django-tutorial/mysite/polls/urls.py | 7 +- pedro/django-tutorial/mysite/polls/views.py | 79 +++++++++++++++---- 4 files changed, 84 insertions(+), 23 deletions(-) create mode 100644 pedro/django-tutorial/mysite/polls/templates/polls/results.html diff --git a/pedro/django-tutorial/mysite/polls/templates/polls/detail.html b/pedro/django-tutorial/mysite/polls/templates/polls/detail.html index 975db2a..3e55544 100644 --- a/pedro/django-tutorial/mysite/polls/templates/polls/detail.html +++ b/pedro/django-tutorial/mysite/polls/templates/polls/detail.html @@ -1,6 +1,12 @@

{{ question.question_text }}

-
    + +{% if error_message %}

    {{ error_message }}

    {% endif %} + +
    +{% csrf_token %} {% for choice in question.choice_set.all %} -
  • {{ choice.choice_text }}
  • + +
    {% endfor %} -
+ + diff --git a/pedro/django-tutorial/mysite/polls/templates/polls/results.html b/pedro/django-tutorial/mysite/polls/templates/polls/results.html new file mode 100644 index 0000000..bc78e2b --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/templates/polls/results.html @@ -0,0 +1,9 @@ +

{{ question.question_text }}

+ +
    +{% for choice in question.choice_set.all %} +
  • {{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}
  • +{% endfor %} +
+ +Vote again? diff --git a/pedro/django-tutorial/mysite/polls/urls.py b/pedro/django-tutorial/mysite/polls/urls.py index 3e302ea..8aa1a75 100644 --- a/pedro/django-tutorial/mysite/polls/urls.py +++ b/pedro/django-tutorial/mysite/polls/urls.py @@ -6,11 +6,12 @@ from . import views app_name = 'polls' urlpatterns = [ # ex: /polls/ - path('', views.index, name='index'), + #path('', views.index, name='index'), + path('', views.IndexView.as_view(), name='index'), # ex: /polls/5/ - path('/', views.detail, name='detail'), + path('/', views.DetailView.as_view(), name='detail'), # ex: /polls/5/results/ - path('/results/', views.results, name='results'), + path('/results/', views.ResultsView.as_view(), name='results'), # ex: /polls/5/vote/ path('/vote/', views.vote, name='vote'), ] diff --git a/pedro/django-tutorial/mysite/polls/views.py b/pedro/django-tutorial/mysite/polls/views.py index 257fe14..e9b70d9 100644 --- a/pedro/django-tutorial/mysite/polls/views.py +++ b/pedro/django-tutorial/mysite/polls/views.py @@ -2,10 +2,12 @@ from django.shortcuts import get_object_or_404, render # Create your views here. -from django.http import HttpResponse +from django.http import HttpResponse, HttpResponseRedirect from django.template import loader +from django.urls import reverse +from django.views import generic -from .models import Question +from .models import Choice, Question from django.http import Http404 @@ -30,12 +32,20 @@ from django.http import Http404 ## meaningful, templated and easy to write index ## and then we no longer need to import loader and HttpResponse -def index(request): - latest_question_list = Question.objects.order_by('-pub_date')[:5] - context = { - 'latest_question_list': latest_question_list, - } - return render(request, 'polls/index.html', context) +#def index(request): +# latest_question_list = Question.objects.order_by('-pub_date')[:5] +# context = { +# 'latest_question_list': latest_question_list, +# } +# return render(request, 'polls/index.html', context) + +class IndexView(generic.ListView): + template_name = 'polls/index.html' + context_object_name = 'latest_question_list' + + def get_queryset(self): + """Return the last five published questions.""" + return Question.objects.order_by('-pub_date')[:5] ## simple detail #def detail(request, question_id): @@ -50,13 +60,48 @@ def index(request): # return render(request, 'polls/detail.html', {'question': question}) ## meaningful and easy to write detail -def detail(request, question_id): +#def detail(request, question_id): +# question = get_object_or_404(Question, pk=question_id) +# return render(request, 'polls/detail.html', {'question': question}) + +## refactor detail view +class DetailView(generic.DetailView): + model = Question + template_name = 'polls/detail.html' + +#def results(request, question_id): +# response = "You're looking at the results of question %s." +# return HttpResponse(response % question_id) + +# # real implementation of results +#def results(request, question_id): +# question = get_object_or_404(Question, pk=question_id) +# return render(request, 'polls/results.html', {'question': question}) + +# # refactor results view +class ResultsView(generic.DetailView): + model = Question + template_name = 'polls/results.html' + +#def vote(request, question_id): +# return HttpResponse("You're voting on question %s." % question_id) + + +# #real implementation of vote +def vote (request, question_id): question = get_object_or_404(Question, pk=question_id) - return render(request, 'polls/detail.html', {'question': question}) - -def results(request, question_id): - response = "You're looking at the results of question %s." - return HttpResponse(response % question_id) - -def vote(request, question_id): - return HttpResponse("You're voting on question %s." % question_id) + try: + selected_choice = question.choice_set.get(pk=request.POST['choice']) + except (KeyError, Choice.DoesNotExist): + # Redisplay the question voting form. + return render(request, 'polls/detail.html', { + 'question': question, + 'error_message': "You didn't select a choice.", + }) + else: + selected_choice.votes += 1 + selected_choice.save() + # Always return an HttpResponseRedirect after successfully dealing + # with POST data. This prevents data from being posted twice if a + # user hits the Back button + return HttpResponseRedirect(reverse('polls:results', args=(question.id,))) From 0ac32ef62b0c102a5897f2682b81a20351221b51 Mon Sep 17 00:00:00 2001 From: pedrolab <531310-pedrolab@users.noreply.gitlab.com> Date: Mon, 20 Jul 2020 02:56:30 +0200 Subject: [PATCH 5/8] django tutorial #5 completed --- pedro/django-tutorial/mysite/polls/models.py | 5 +- pedro/django-tutorial/mysite/polls/tests.py | 127 ++++++++++++++++++- pedro/django-tutorial/mysite/polls/views.py | 22 +++- 3 files changed, 150 insertions(+), 4 deletions(-) diff --git a/pedro/django-tutorial/mysite/polls/models.py b/pedro/django-tutorial/mysite/polls/models.py index bfd48bd..a6e19c8 100644 --- a/pedro/django-tutorial/mysite/polls/models.py +++ b/pedro/django-tutorial/mysite/polls/models.py @@ -11,7 +11,10 @@ class Question(models.Model): def __str__(self): return self.question_text def was_published_recently(self): - return self.pub_date >= timezone.now() - datetime.timedelta(days=1) + # bug + #return self.pub_date >= timezone.now() - datetime.timedelta(days=1) + now = timezone.now() + return now - datetime.timedelta(days=1) <= self.pub_date <= now class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) diff --git a/pedro/django-tutorial/mysite/polls/tests.py b/pedro/django-tutorial/mysite/polls/tests.py index 7ce503c..c123f37 100644 --- a/pedro/django-tutorial/mysite/polls/tests.py +++ b/pedro/django-tutorial/mysite/polls/tests.py @@ -1,3 +1,128 @@ +import datetime + from django.test import TestCase -# Create your tests here. +from django.utils import timezone + +from .models import Question + +from django.urls import reverse + + +class QuestionModelTests(TestCase): + + def test_was_published_recently_with_future_question(self): + """ + was_published_recently() returns False for questions whose pub_date + is in the future. + """ + time = timezone.now() + datetime.timedelta(days=30) + future_question = Question(pub_date=time) + self.assertIs(future_question.was_published_recently(), False) + + def test_was_published_recently_with_old_question(self): + """ + was_published_recently() returns False for questions whose pub_date + is older than 1 day. + """ + time = timezone.now() - datetime.timedelta(days=1, seconds=1) + old_question = Question(pub_date=time) + self.assertIs(old_question.was_published_recently(), False) + + def test_was_published_recently_with_recent_question(self): + """ + was_published_recently() returns True for questions whose pub_date + is within the last day. + """ + time = timezone.now() - datetime.timedelta(hours=23, minutes=59, seconds=59) + recent_question = Question(pub_date=time) + self.assertIs(recent_question.was_published_recently(), True) + + + +def create_question(question_text, days): + """ + Create a question with the given `question_text` and published the + given number of `days` offset to now (negative for questions published + in the past, positive for questions that have yet to be published). + """ + time = timezone.now() + datetime.timedelta(days=days) + return Question.objects.create(question_text=question_text, pub_date=time) + +class QuestionIndexViewTests(TestCase): + def test_no_questions(self): + """ + If no questions exist, an appropriate message is displayed. + """ + response = self.client.get(reverse('polls:index')) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "No polls are available.") + self.assertQuerysetEqual(response.context['latest_question_list'], []) + + def test_past_question(self): + """ + Questions with a pub_date in the past are displayed on the + index page. + """ + create_question(question_text="Past question.", days=-30) + response = self.client.get(reverse('polls:index')) + self.assertQuerysetEqual( + response.context['latest_question_list'], + [''] + ) + + def test_future_question(self): + """ + Questions with a pub_date in the future aren't displayed on + the index page. + """ + create_question(question_text="Future question.", days=30) + response = self.client.get(reverse('polls:index')) + self.assertContains(response, "No polls are available.") + self.assertQuerysetEqual(response.context['latest_question_list'], []) + + def test_future_question_and_past_question(self): + """ + Even if both past and future questions exist, only past questions + are displayed. + """ + create_question(question_text="Past question.", days=-30) + create_question(question_text="Future question.", days=30) + response = self.client.get(reverse('polls:index')) + self.assertQuerysetEqual( + response.context['latest_question_list'], + [''] + ) + + def test_two_past_questions(self): + """ + The questions index page may display multiple questions. + """ + create_question(question_text="Past question 1.", days=-30) + create_question(question_text="Past question 2.", days=-5) + response = self.client.get(reverse('polls:index')) + self.assertQuerysetEqual( + response.context['latest_question_list'], + ['', ''] + ) + +class QuestionDetailViewTests(TestCase): + def test_future_question(self): + """ + The detail view of a question with a pub_date in the future + returns a 404 not found. + """ + future_question = create_question(question_text='Future question.', days=5) + url = reverse('polls:detail', args=(future_question.id,)) + response = self.client.get(url) + self.assertEqual(response.status_code, 404) + + def test_past_question(self): + """ + The detail view of a question with a pub_date in the past + displays the question's text. + """ + past_question = create_question(question_text='Past Question.', days=-5) + url = reverse('polls:detail', args=(past_question.id,)) + response = self.client.get(url) + self.assertContains(response, past_question.question_text) diff --git a/pedro/django-tutorial/mysite/polls/views.py b/pedro/django-tutorial/mysite/polls/views.py index e9b70d9..89b1196 100644 --- a/pedro/django-tutorial/mysite/polls/views.py +++ b/pedro/django-tutorial/mysite/polls/views.py @@ -11,6 +11,8 @@ from .models import Choice, Question from django.http import Http404 +from django.utils import timezone + ## simple index #def index(request): # return HttpResponse("Hello, world. You're at the polls index.") @@ -43,9 +45,20 @@ class IndexView(generic.ListView): template_name = 'polls/index.html' context_object_name = 'latest_question_list' +## has bug +# def get_queryset(self): +# """Return the last five published questions.""" +# return Question.objects.order_by('-pub_date')[:5] + +# refactor def get_queryset(self): - """Return the last five published questions.""" - return Question.objects.order_by('-pub_date')[:5] + """ + Return the last five published questions (not including those set to be + published in the future). + """ + return Question.objects.filter( + pub_date__lte=timezone.now() + ).order_by('-pub_date')[:5] ## simple detail #def detail(request, question_id): @@ -68,6 +81,11 @@ class IndexView(generic.ListView): class DetailView(generic.DetailView): model = Question template_name = 'polls/detail.html' + def get_queryset(self): + """ + Excludes any questions that aren't published yet. + """ + return Question.objects.filter(pub_date__lte=timezone.now()) #def results(request, question_id): # response = "You're looking at the results of question %s." From 751a1df5171a852ba7b8df49167f93ed266422f8 Mon Sep 17 00:00:00 2001 From: pedrolab <531310-pedrolab@users.noreply.gitlab.com> Date: Mon, 20 Jul 2020 03:18:49 +0200 Subject: [PATCH 6/8] django tutorial #6 completed --- .../polls/static/polls/images/background.gif | Bin 0 -> 83359 bytes .../mysite/polls/static/polls/style.css | 10 ++++++++++ .../mysite/polls/templates/polls/index.html | 2 ++ 3 files changed, 12 insertions(+) create mode 100644 pedro/django-tutorial/mysite/polls/static/polls/images/background.gif create mode 100644 pedro/django-tutorial/mysite/polls/static/polls/style.css diff --git a/pedro/django-tutorial/mysite/polls/static/polls/images/background.gif b/pedro/django-tutorial/mysite/polls/static/polls/images/background.gif new file mode 100644 index 0000000000000000000000000000000000000000..60507ba73dfc3fc174b6d3943b384219b527abf9 GIT binary patch literal 83359 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 D#f9w7 literal 0 HcmV?d00001 diff --git a/pedro/django-tutorial/mysite/polls/static/polls/style.css b/pedro/django-tutorial/mysite/polls/static/polls/style.css new file mode 100644 index 0000000..4db5255 --- /dev/null +++ b/pedro/django-tutorial/mysite/polls/static/polls/style.css @@ -0,0 +1,10 @@ +li a { + color: green; +} + +body { + /* thanks: https://stackoverflow.com/questions/12605908/change-background-image-opacity/40366996#40366996 */ + background-image: url("images/background.gif"); + background-color: rgba(255,255,255,0.6); + background-blend-mode: lighten; +} diff --git a/pedro/django-tutorial/mysite/polls/templates/polls/index.html b/pedro/django-tutorial/mysite/polls/templates/polls/index.html index b1b7ea8..9ac8451 100644 --- a/pedro/django-tutorial/mysite/polls/templates/polls/index.html +++ b/pedro/django-tutorial/mysite/polls/templates/polls/index.html @@ -1,3 +1,5 @@ +{% load static %} + {% if latest_question_list %}