From 244a3b4e9d7e22a675850299ad7fb2148327207d Mon Sep 17 00:00:00 2001
From: Leon Xu <19643979+LeonXu260@users.noreply.github.com>
Date: Mon, 11 May 2020 14:25:53 -0700
Subject: [PATCH] Add files via upload
---
learning_logs/apps.py | 5 +
learning_logs/forms.py | 15 +++
learning_logs/models.py | 26 ++++++
.../templates/learning_logs/base.html | 63 +++++++++++++
.../templates/learning_logs/edit_entry.html | 15 +++
.../templates/learning_logs/index.html | 14 +++
.../templates/learning_logs/new_entry.html | 15 +++
.../templates/learning_logs/new_topic.html | 12 +++
.../templates/learning_logs/topic.html | 28 ++++++
.../templates/learning_logs/topics.html | 20 ++++
learning_logs/tests.py | 3 +
learning_logs/urls.py | 21 +++++
learning_logs/views.py | 92 +++++++++++++++++++
13 files changed, 329 insertions(+)
create mode 100644 learning_logs/apps.py
create mode 100644 learning_logs/forms.py
create mode 100644 learning_logs/models.py
create mode 100644 learning_logs/templates/learning_logs/base.html
create mode 100644 learning_logs/templates/learning_logs/edit_entry.html
create mode 100644 learning_logs/templates/learning_logs/index.html
create mode 100644 learning_logs/templates/learning_logs/new_entry.html
create mode 100644 learning_logs/templates/learning_logs/new_topic.html
create mode 100644 learning_logs/templates/learning_logs/topic.html
create mode 100644 learning_logs/templates/learning_logs/topics.html
create mode 100644 learning_logs/tests.py
create mode 100644 learning_logs/urls.py
create mode 100644 learning_logs/views.py
diff --git a/learning_logs/apps.py b/learning_logs/apps.py
new file mode 100644
index 0000000..7222f04
--- /dev/null
+++ b/learning_logs/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class LearningLogsConfig(AppConfig):
+ name = 'learning_logs'
diff --git a/learning_logs/forms.py b/learning_logs/forms.py
new file mode 100644
index 0000000..ad62c8d
--- /dev/null
+++ b/learning_logs/forms.py
@@ -0,0 +1,15 @@
+from django import forms
+from .models import Topic, Entry
+
+class TopicForm(forms.ModelForm):
+ class Meta:
+ model = Topic
+ fields = ['text']
+ labels = {'text': ''}
+
+class EntryForm(forms.ModelForm):
+ class Meta:
+ model = Entry
+ fields = ['text']
+ labels = {'text': ''}
+ widgets = {'text': forms.Textarea(attrs={'cols': 80})}
\ No newline at end of file
diff --git a/learning_logs/models.py b/learning_logs/models.py
new file mode 100644
index 0000000..d414c8f
--- /dev/null
+++ b/learning_logs/models.py
@@ -0,0 +1,26 @@
+from django.db import models
+from django.contrib.auth.models import User
+
+# Create your models here.
+class Topic(models.Model):
+ """ A topic the user is learning about."""
+ text = models.CharField(max_length=200)
+ date_added = models.DateTimeField(auto_now_add=True)
+ owner = models.ForeignKey(User, on_delete=models.CASCADE)
+
+ def __str__(self):
+ """ Return a string representation of the model. """
+ return self.text
+
+class Entry(models.Model):
+ """ Something specific learned about a topic. """
+ topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
+ text = models.TextField()
+ date_added = models.DateTimeField(auto_now_add=True)
+
+ class Meta:
+ verbose_name_plural = 'entries'
+
+ def __str__(self):
+ """ Return a string representation of the model. """
+ return f"{self.text[:50]}..."
\ No newline at end of file
diff --git a/learning_logs/templates/learning_logs/base.html b/learning_logs/templates/learning_logs/base.html
new file mode 100644
index 0000000..2e719fd
--- /dev/null
+++ b/learning_logs/templates/learning_logs/base.html
@@ -0,0 +1,63 @@
+{% load bootstrap4 %}
+
+
+
+
+
+
+ Learning Log
+
+ {% bootstrap_css %}
+ {% bootstrap_javascript jquery='full' %}
+
+
+
+
+
+
+
+ Learning Log
+
+
+
+
+
+
+ {% if user.is_authenticated %}
+
+ Hello, {{ user.username }}.
+
+
+ Log out
+
+ {% else %}
+
+ Register
+
+
+ Log in
+ {% endif %}
+
+
+
+
+
+
+
+ {% block page_header %}{% endblock page_header %}
+
+
+ {% block content %}{% endblock content %}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/learning_logs/templates/learning_logs/edit_entry.html b/learning_logs/templates/learning_logs/edit_entry.html
new file mode 100644
index 0000000..719e2a8
--- /dev/null
+++ b/learning_logs/templates/learning_logs/edit_entry.html
@@ -0,0 +1,15 @@
+{% extends "learning_logs/base.html" %}
+
+{% block content %}
+
+ {{ topic }}
+
+ Edit entry:
+
+
+
+{% endblock content %}
\ No newline at end of file
diff --git a/learning_logs/templates/learning_logs/index.html b/learning_logs/templates/learning_logs/index.html
new file mode 100644
index 0000000..c4efacd
--- /dev/null
+++ b/learning_logs/templates/learning_logs/index.html
@@ -0,0 +1,14 @@
+{% extends "learning_logs/base.html" %}
+
+{% block page_header %}
+
+
Track your learning.
+
+
Make your own Learning Log, and keep a list of the
+ topics you're learning about. Whenever you learn something new
+ about a topic, make an entry summarizing what you've learned.
+
+
Register »
+
+{% endblock page_header %}
\ No newline at end of file
diff --git a/learning_logs/templates/learning_logs/new_entry.html b/learning_logs/templates/learning_logs/new_entry.html
new file mode 100644
index 0000000..1a6511c
--- /dev/null
+++ b/learning_logs/templates/learning_logs/new_entry.html
@@ -0,0 +1,15 @@
+{% extends "learning_logs/base.html" %}
+
+{% block content %}
+
+ {{ topic }}
+
+ Add a new entry:
+
+
+
+{% endblock content %}
\ No newline at end of file
diff --git a/learning_logs/templates/learning_logs/new_topic.html b/learning_logs/templates/learning_logs/new_topic.html
new file mode 100644
index 0000000..f2ad86b
--- /dev/null
+++ b/learning_logs/templates/learning_logs/new_topic.html
@@ -0,0 +1,12 @@
+{% extends "learning_logs/base.html" %}
+
+{% block content %}
+ Add a new topic:
+
+
+
+{% endblock content %}
\ No newline at end of file
diff --git a/learning_logs/templates/learning_logs/topic.html b/learning_logs/templates/learning_logs/topic.html
new file mode 100644
index 0000000..52f4975
--- /dev/null
+++ b/learning_logs/templates/learning_logs/topic.html
@@ -0,0 +1,28 @@
+{% extends 'learning_logs/base.html' %}
+
+{% block page_header %}
+ {{ topic }}
+{% endblock page_header %}
+
+{% block content %}
+
+ Add new entry
+
+
+
+ {% for entry in entries %}
+
+
+
+ {{ entry.text|linebreaks }}
+
+
+ {% empty %}
+ There are no entries for this topic yet.
+ {% endfor %}
+
+{% endblock content %}
diff --git a/learning_logs/templates/learning_logs/topics.html b/learning_logs/templates/learning_logs/topics.html
new file mode 100644
index 0000000..8d95764
--- /dev/null
+++ b/learning_logs/templates/learning_logs/topics.html
@@ -0,0 +1,20 @@
+{% extends "learning_logs/base.html" %}
+
+{% block page_header %}
+ Topics
+{% endblock page_header %}
+
+{% block content %}
+
+ {% for topic in topics %}
+
+ {% empty %}
+ No topics have been added yet.
+ {% endfor %}
+
+
+
+
+{% endblock content %}
diff --git a/learning_logs/tests.py b/learning_logs/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/learning_logs/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/learning_logs/urls.py b/learning_logs/urls.py
new file mode 100644
index 0000000..321aa3a
--- /dev/null
+++ b/learning_logs/urls.py
@@ -0,0 +1,21 @@
+""" Define URL patterns for learning_logs. """
+
+from django.urls import path
+
+from . import views
+
+app_name = 'learning_logs'
+urlpatterns = [
+ # Homepage
+ path('', views.index, name='index'),
+ # Page that shows all topics.
+ path('topics/', views.topics, name='topics'),
+ # Detail page for a single topic.
+ path('topics//', views.topic, name='topic'),
+ # Page for adding a new topic
+ path('new_topic/', views.new_topic, name='new_topic'),
+ # Page for adding a new entry
+ path('new_entry//', views.new_entry, name='new_entry'),
+ # Page for editing an entry
+ path('edit_entry//', views.edit_entry, name='edit_entry'),
+]
\ No newline at end of file
diff --git a/learning_logs/views.py b/learning_logs/views.py
new file mode 100644
index 0000000..a0284b7
--- /dev/null
+++ b/learning_logs/views.py
@@ -0,0 +1,92 @@
+from django.shortcuts import render, redirect, get_object_or_404
+from django.contrib.auth.decorators import login_required
+from django.http import Http404
+
+from .models import Topic, Entry
+from .forms import TopicForm, EntryForm
+
+# Create your views here.
+def index(request):
+ """ The homepage for Learning Log. """
+ return render(request, 'learning_logs/index.html')
+
+@login_required
+def topics(request):
+ """ Show all topics. """
+ topics = Topic.objects.filter(owner=request.user).order_by('date_added')
+ context = {'topics': topics}
+ return render(request, 'learning_logs/topics.html', context)
+
+@login_required
+def topic(request, topic_id):
+ """ Show a single topic and all its entries. """
+ topic = get_object_or_404(Topic, id=topic_id)
+ # Make sure the topic belongs to the current user
+ if topic.owner != request.user:
+ raise Http404
+
+
+ entries = topic.entry_set.order_by('-date_added')
+ context = {'topic' : topic, 'entries' : entries}
+ return render(request, 'learning_logs/topic.html', context)
+
+@login_required
+def new_topic(request):
+ """ Add a new topic. """
+ if request.method != 'POST':
+ # No data submitted; create a blank form.
+ form = TopicForm()
+ else:
+ # POST data submitted; process data.
+ form = TopicForm(data=request.POST)
+ if form.is_valid():
+ new_topic = form.save(commit=False)
+ new_topic.owner = request.user
+ new_topic.save()
+ return redirect('learning_logs:topics')
+
+ # Display a blank or invalid form.
+ context = {'form': form}
+ return render(request, 'learning_logs/new_topic.html', context)
+
+@login_required
+def new_entry(request, topic_id):
+ """ Add a new entry for a particular topic. """
+ topic = Topic.objects.get(id=topic_id)
+
+ if request.method != 'POST':
+ # No data submitted; create a blank form.
+ form = EntryForm()
+ else:
+ # POST data submitted; process data.
+ form = EntryForm(data=request.POST)
+ if form.is_valid():
+ new_entry = form.save(commit=False)
+ new_entry.topic = topic
+ new_entry.save()
+ return redirect('learning_logs:topic', topic_id=topic_id)
+
+ # Display a blank or valid form.
+ context = {'topic': topic, 'form': form}
+ return render(request, 'learning_logs/new_entry.html', context)
+
+@login_required
+def edit_entry(request, entry_id):
+ """ Edit an existing entry. """
+ entry = Entry.objects.get(id=entry_id)
+ topic = entry.topic
+ if topic.owner != request.user:
+ raise Http404
+
+ if request.method != 'POST':
+ # Initial request; pre-fill form with the current entry.
+ form = EntryForm(instance=entry)
+ else:
+ # POST data submitted; process data.
+ form = EntryForm(instance=entry, data=request.POST)
+ if form.is_valid():
+ form.save()
+ return redirect('learning_logs:topic', topic_id=topic.id)
+
+ context = {'entry': entry, 'topic': topic, 'form': form}
+ return render(request, 'learning_logs/edit_entry.html', context)
\ No newline at end of file