aboutsummaryrefslogtreecommitdiff
path: root/apps/pages
diff options
context:
space:
mode:
authorluxagraf <sng@luxagraf.net>2018-11-14 13:17:42 -0600
committerluxagraf <sng@luxagraf.net>2018-11-14 13:17:42 -0600
commita0b95dc2dfb84c682bb8f677e5d471f84e5028fe (patch)
tree6dd1919856f736c5b644270d59b57e4bb20336c5 /apps/pages
wrote out basic notes skeleton
Diffstat (limited to 'apps/pages')
-rw-r--r--apps/pages/__init__.py0
-rw-r--r--apps/pages/admin.py32
-rw-r--r--apps/pages/migrations/0001_initial.py26
-rw-r--r--apps/pages/migrations/__init__.py0
-rw-r--r--apps/pages/models.py41
-rw-r--r--apps/pages/tests/__init__.py0
-rw-r--r--apps/pages/tests/test_models.py20
-rw-r--r--apps/pages/tests/test_views.py29
-rw-r--r--apps/pages/views.py11
9 files changed, 159 insertions, 0 deletions
diff --git a/apps/pages/__init__.py b/apps/pages/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/apps/pages/__init__.py
diff --git a/apps/pages/admin.py b/apps/pages/admin.py
new file mode 100644
index 0000000..706d690
--- /dev/null
+++ b/apps/pages/admin.py
@@ -0,0 +1,32 @@
+from django.contrib import admin
+
+from django import forms
+
+from pages.models import Page
+
+
+class PageEntryForm(forms.ModelForm):
+ class Meta:
+ model = Page
+ fields = '__all__'
+ widgets = {
+ 'body_markdown': forms.Textarea(attrs={'rows': 50, 'cols': 100}),
+ }
+
+
+@admin.register(Page)
+class PageAdmin(admin.ModelAdmin):
+ form = PageEntryForm
+ list_display = ('title', 'slug', 'path')
+ search_fields = ['title', 'body_markdown']
+ prepopulated_fields = {"slug": ('title',)}
+ fieldsets = (
+ ('Page', {
+ 'fields': ('title', 'body_markdown', ('slug', 'path', )),
+ 'classes': ('show', 'extrapretty', 'wide')
+ }),
+ ('Metadata', {
+ 'classes': ('collapse closed',),
+ 'fields': ('meta_description',),
+ })
+ )
diff --git a/apps/pages/migrations/0001_initial.py b/apps/pages/migrations/0001_initial.py
new file mode 100644
index 0000000..49e763f
--- /dev/null
+++ b/apps/pages/migrations/0001_initial.py
@@ -0,0 +1,26 @@
+# Generated by Django 2.1.2 on 2018-11-11 21:19
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Page',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(max_length=200)),
+ ('slug', models.SlugField()),
+ ('body_html', models.TextField(blank=True)),
+ ('body_markdown', models.TextField()),
+ ('meta_description', models.CharField(blank=True, max_length=256, null=True)),
+ ('path', models.CharField(blank=True, max_length=200, null=True)),
+ ],
+ ),
+ ]
diff --git a/apps/pages/migrations/__init__.py b/apps/pages/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/apps/pages/migrations/__init__.py
diff --git a/apps/pages/models.py b/apps/pages/models.py
new file mode 100644
index 0000000..0c663cb
--- /dev/null
+++ b/apps/pages/models.py
@@ -0,0 +1,41 @@
+from django.db import models
+from django.template.defaultfilters import slugify
+from django.contrib.sitemaps import Sitemap
+
+from utils.util import markdown_to_html, render_images
+
+
+class Page(models.Model):
+ title = models.CharField(max_length=200)
+ slug = models.SlugField()
+ body_html = models.TextField(blank=True)
+ body_markdown = models.TextField()
+ meta_description = models.CharField(max_length=256, null=True, blank=True)
+ path = models.CharField(max_length=200, null=True, blank=True)
+
+ def __str__(self):
+ return self.title
+
+ def get_absolute_url(self):
+ if self.path:
+ return "/%s/%s" % (self.path, self.slug)
+ else:
+ return "/%s" % (self.slug)
+
+ def save(self):
+ # run markdown
+ md = render_images(self.body_markdown)
+ self.body_html = markdown_to_html(md)
+ if not self.id:
+ # self.date_created = timezone.now()
+ self.slug = slugify(self.title)[:50]
+ super(Page, self).save()
+
+
+class PageSitemap(Sitemap):
+ changefreq = "never"
+ priority = 1.0
+ protocol = "https"
+
+ def items(self):
+ return Page.objects.all()
diff --git a/apps/pages/tests/__init__.py b/apps/pages/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/apps/pages/tests/__init__.py
diff --git a/apps/pages/tests/test_models.py b/apps/pages/tests/test_models.py
new file mode 100644
index 0000000..f8de5c7
--- /dev/null
+++ b/apps/pages/tests/test_models.py
@@ -0,0 +1,20 @@
+from django.test import TestCase
+
+from pages.models import Page
+
+
+class PageModelTest(TestCase):
+
+ def test_string_representation(self):
+ page = Page(
+ title="Test Page",
+ meta_description="The meta desc",
+ body_markdown="the body of the page",
+ )
+ page.save()
+ self.assertEqual(str(page), "Test Page")
+ self.assertEqual(str(page.slug), "test-page")
+ self.assertEqual(str(page.body_markdown), "the body of the page")
+ self.assertEqual(str(page.body_html), "<p>the body of the page</p>")
+ self.assertEqual(str(page.meta_description), "The meta desc")
+ self.assertEqual(page.path, None)
diff --git a/apps/pages/tests/test_views.py b/apps/pages/tests/test_views.py
new file mode 100644
index 0000000..42a91e4
--- /dev/null
+++ b/apps/pages/tests/test_views.py
@@ -0,0 +1,29 @@
+from django.test import RequestFactory, TestCase
+from mixer.backend.django import mixer
+
+from accounts.models import User
+from pages.models import Page
+from pages.views import PageDetailView
+
+
+class PageViewTest(TestCase):
+ def setUp(self):
+ # Every test needs access to the request factory.
+ self.factory = RequestFactory()
+ self.page = Page(
+ title="Test Page",
+ meta_description="The meta desc",
+ body_markdown="the body of the page",
+ )
+ self.page.save()
+
+ def test_non_existent_page(self):
+ """A non-existent staticflatpage raises a 404."""
+ response = self.client.get('/no_such_page/')
+ self.assertEqual(response.status_code, 404)
+
+ def test_detail_view(self):
+ response = self.client.get(self.page.get_absolute_url())
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.status_code, 200)
+ print(response.content)
diff --git a/apps/pages/views.py b/apps/pages/views.py
new file mode 100644
index 0000000..617ce04
--- /dev/null
+++ b/apps/pages/views.py
@@ -0,0 +1,11 @@
+from django.views.generic.detail import DetailView
+from pages.models import Page
+
+
+class PageDetailView(DetailView):
+ model = Page
+ slug_field = "slug"
+
+ def get_template_names(self):
+ obj = self.get_object()
+ return ["pages/%s.html" % obj.slug, 'pages/page.html']