From 150f48f17c15bcc1c241499dca9d5d76867ebc7d Mon Sep 17 00:00:00 2001 From: ducoterra Date: Fri, 24 Apr 2020 20:30:27 -0400 Subject: [PATCH] add button! --- Dockerfile | 1 + config/settings.py | 1 + config/urls.py | 1 + ui/__init__.py | 0 ui/admin.py | 3 +++ ui/apps.py | 5 +++++ ui/migrations/__init__.py | 0 ui/models.py | 3 +++ ui/static/ui/button.js | 35 +++++++++++++++++++++++++++++++++++ ui/templates/ui/button.html | 33 +++++++++++++++++++++++++++++++++ ui/tests.py | 33 +++++++++++++++++++++++++++++++++ ui/urls.py | 6 ++++++ ui/views.py | 14 ++++++++++++++ 13 files changed, 135 insertions(+) create mode 100644 ui/__init__.py create mode 100644 ui/admin.py create mode 100644 ui/apps.py create mode 100644 ui/migrations/__init__.py create mode 100644 ui/models.py create mode 100644 ui/static/ui/button.js create mode 100644 ui/templates/ui/button.html create mode 100644 ui/tests.py create mode 100644 ui/urls.py create mode 100644 ui/views.py diff --git a/Dockerfile b/Dockerfile index 03a1a7d..4ef0e69 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,7 @@ FROM python:3.8.2 WORKDIR /app COPY config config COPY api api +COPY ui ui COPY manage.py manage.py COPY requirements.txt requirements.txt RUN pip install -r requirements.txt diff --git a/config/settings.py b/config/settings.py index 707ae7c..b43d16b 100644 --- a/config/settings.py +++ b/config/settings.py @@ -32,6 +32,7 @@ ALLOWED_HOSTS = ["localhost", "test.ducoterra.net"] INSTALLED_APPS = [ 'api', + 'ui', 'rest_framework', 'django.contrib.admin', 'django.contrib.auth', diff --git a/config/urls.py b/config/urls.py index 17a63d8..fb9669b 100644 --- a/config/urls.py +++ b/config/urls.py @@ -19,5 +19,6 @@ from django.http import JsonResponse urlpatterns = [ path('', include('api.urls')), + path('', include('ui.urls')), path('admin/', admin.site.urls), ] diff --git a/ui/__init__.py b/ui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ui/admin.py b/ui/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/ui/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/ui/apps.py b/ui/apps.py new file mode 100644 index 0000000..c218b05 --- /dev/null +++ b/ui/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class UiConfig(AppConfig): + name = 'ui' diff --git a/ui/migrations/__init__.py b/ui/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ui/models.py b/ui/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/ui/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/ui/static/ui/button.js b/ui/static/ui/button.js new file mode 100644 index 0000000..8ddbded --- /dev/null +++ b/ui/static/ui/button.js @@ -0,0 +1,35 @@ +function getCookie(name) { + var cookieValue = null; + if (document.cookie && document.cookie !== '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = cookies[i].trim(); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) === (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; +} + +var csrftoken = getCookie('csrftoken'); +var button = document.getElementById("BUTTON"); +var count = document.getElementById("COUNT"); + +button.addEventListener("click", event => { + fetch('/button', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrftoken + } + }) + .then((response) => { + return response.json(); + }) + .then((data) => { + count.innerText = data.pressed; + }); +}) \ No newline at end of file diff --git a/ui/templates/ui/button.html b/ui/templates/ui/button.html new file mode 100644 index 0000000..495d27a --- /dev/null +++ b/ui/templates/ui/button.html @@ -0,0 +1,33 @@ +{% load static %} + + + + + + + + Hello Bulma! + + + + + + {% csrf_token %} +
+
+
+

+ The Button +

+ +
+

+
+

{{ pressed }}

+
+
+
+ + + + \ No newline at end of file diff --git a/ui/tests.py b/ui/tests.py new file mode 100644 index 0000000..c5c5eec --- /dev/null +++ b/ui/tests.py @@ -0,0 +1,33 @@ +from django.contrib.auth.models import AnonymousUser, User +from django.test import RequestFactory, TestCase + +from .views import button + +class SimpleTest(TestCase): + def setUp(self): + # Every test needs access to the request factory. + self.factory = RequestFactory() + self.user = User.objects.create_user( + username='testuser', email='test@test.test', password='testpass') + + def test_button(self): + # Create an instance of a GET request. + request = self.factory.get('/snippets') + request.user = self.user + request.session = self.client.session + response = button(request) + self.assertEqual(response.status_code, 200) + + request = self.factory.post( + '/button', + data={}, + content_type='application/json' + ) + request.session = self.client.session + response = button(request) + self.assertEqual(response.status_code, 200) + self.assertEqual(request.session.get('pressed'), 1) + + response = button(request) + self.assertEqual(response.status_code, 200) + self.assertEqual(request.session.get('pressed'), 2) \ No newline at end of file diff --git a/ui/urls.py b/ui/urls.py new file mode 100644 index 0000000..d4c02db --- /dev/null +++ b/ui/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('button', views.button, name = 'button'), +] \ No newline at end of file diff --git a/ui/views.py b/ui/views.py new file mode 100644 index 0000000..aef4e1d --- /dev/null +++ b/ui/views.py @@ -0,0 +1,14 @@ +from django.shortcuts import render +from django.http import JsonResponse + +def button(request): + PRESSED = 'pressed' + try: + request.session[PRESSED] + except KeyError: + request.session[PRESSED] = 0 + + if request.method == "POST": + request.session[PRESSED] += 1 + return JsonResponse({PRESSED: request.session[PRESSED]}) + return render(request, "ui/button.html", {PRESSED: request.session[PRESSED]}) \ No newline at end of file