From 5d01458c876cc266ffc5ecc4f82de569b5fbf07f Mon Sep 17 00:00:00 2001
From: radmosley <34037881+radmosley@users.noreply.github.com>
Date: Tue, 25 Oct 2022 20:03:14 -0700
Subject: [PATCH 1/3] add api methods
---
code/Ronnie/docker_django_vue/.dockerignore | 1 +
.../docker_django_vue/backend/api/admin.py | 2 +
.../backend/api/migrations/__init__.py | 0
.../docker_django_vue/backend/api/models.py | 6 ++
.../backend/api/serializers.py | 7 ++
.../docker_django_vue/backend/api/urls.py | 10 +++
.../docker_django_vue/backend/api/views.py | 10 ++-
.../backend/project/settings.py | 17 ++++-
.../docker_django_vue/backend/project/urls.py | 5 +-
.../backend/requirements.txt | 8 +++
.../backend/templates/index.html | 70 +++++++++++++++++++
11 files changed, 131 insertions(+), 5 deletions(-)
create mode 100644 code/Ronnie/docker_django_vue/.dockerignore
delete mode 100644 code/Ronnie/docker_django_vue/backend/api/migrations/__init__.py
create mode 100644 code/Ronnie/docker_django_vue/backend/api/serializers.py
create mode 100644 code/Ronnie/docker_django_vue/backend/api/urls.py
create mode 100644 code/Ronnie/docker_django_vue/backend/templates/index.html
diff --git a/code/Ronnie/docker_django_vue/.dockerignore b/code/Ronnie/docker_django_vue/.dockerignore
new file mode 100644
index 00000000..05a4a449
--- /dev/null
+++ b/code/Ronnie/docker_django_vue/.dockerignore
@@ -0,0 +1 @@
+*/node_modules
\ No newline at end of file
diff --git a/code/Ronnie/docker_django_vue/backend/api/admin.py b/code/Ronnie/docker_django_vue/backend/api/admin.py
index 8c38f3f3..27b5ea6e 100644
--- a/code/Ronnie/docker_django_vue/backend/api/admin.py
+++ b/code/Ronnie/docker_django_vue/backend/api/admin.py
@@ -1,3 +1,5 @@
from django.contrib import admin
+from .models import ToDo
# Register your models here.
+admin.site.register(ToDo)
\ No newline at end of file
diff --git a/code/Ronnie/docker_django_vue/backend/api/migrations/__init__.py b/code/Ronnie/docker_django_vue/backend/api/migrations/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/code/Ronnie/docker_django_vue/backend/api/models.py b/code/Ronnie/docker_django_vue/backend/api/models.py
index 71a83623..12aeff72 100644
--- a/code/Ronnie/docker_django_vue/backend/api/models.py
+++ b/code/Ronnie/docker_django_vue/backend/api/models.py
@@ -1,3 +1,9 @@
from django.db import models
# Create your models here.
+class ToDo(models.Model):
+ title = models.CharField(max_length=200)
+ status = models.BooleanField(default=False)
+
+ def __str__(self):
+ return self.title
\ No newline at end of file
diff --git a/code/Ronnie/docker_django_vue/backend/api/serializers.py b/code/Ronnie/docker_django_vue/backend/api/serializers.py
new file mode 100644
index 00000000..fc2fb3bc
--- /dev/null
+++ b/code/Ronnie/docker_django_vue/backend/api/serializers.py
@@ -0,0 +1,7 @@
+from rest_framework import serializers
+from .models import ToDo
+
+class ToDoSerializer(serializers.ModelSerializer):
+ class Meta:
+ fields = ('title', 'status')
+ model = ToDo
\ No newline at end of file
diff --git a/code/Ronnie/docker_django_vue/backend/api/urls.py b/code/Ronnie/docker_django_vue/backend/api/urls.py
new file mode 100644
index 00000000..39c19410
--- /dev/null
+++ b/code/Ronnie/docker_django_vue/backend/api/urls.py
@@ -0,0 +1,10 @@
+from rest_framework.routers import DefaultRouter
+from django.urls import path
+from .views import ToDoViewSet
+
+router = DefaultRouter()
+router.register('todo', ToDoViewSet, basename='ToDo')
+
+urlpatterns = router.urls + [
+
+]
\ No newline at end of file
diff --git a/code/Ronnie/docker_django_vue/backend/api/views.py b/code/Ronnie/docker_django_vue/backend/api/views.py
index 91ea44a2..8e46a876 100644
--- a/code/Ronnie/docker_django_vue/backend/api/views.py
+++ b/code/Ronnie/docker_django_vue/backend/api/views.py
@@ -1,3 +1,9 @@
-from django.shortcuts import render
-
+from rest_framework import viewsets
+from .models import ToDo
+from .serializers import ToDoSerializer
# Create your views here.
+class ToDoViewSet(viewsets.ModelViewSet):
+ queryset = ToDo.objects.all()
+ serializer_class = ToDoSerializer
+ # Api methods
+ http_method_names = ["get", "post", "head", "delete", "update"]
\ No newline at end of file
diff --git a/code/Ronnie/docker_django_vue/backend/project/settings.py b/code/Ronnie/docker_django_vue/backend/project/settings.py
index 9907dede..63198b06 100644
--- a/code/Ronnie/docker_django_vue/backend/project/settings.py
+++ b/code/Ronnie/docker_django_vue/backend/project/settings.py
@@ -9,7 +9,7 @@
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/
"""
-
+import os
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
@@ -37,9 +37,14 @@
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
+ 'rest_framework',
+ 'corsheaders',
+ 'api',
]
MIDDLEWARE = [
+ 'corsheaders.middleware.CorsMiddleware',
+ 'django.middleware.common.CommonMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
@@ -54,7 +59,7 @@
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [],
+ 'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
@@ -121,3 +126,11 @@
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+
+REST_FRAMEWORK = {
+ 'DEFAULT_PERMISSION_CLASSES': [
+ 'rest_framework.permissions.AllowAny',
+ ]
+}
+
+CORS_ORIGIN_ALLOW_ALL = True
\ No newline at end of file
diff --git a/code/Ronnie/docker_django_vue/backend/project/urls.py b/code/Ronnie/docker_django_vue/backend/project/urls.py
index 6ebb218c..a31b93c8 100644
--- a/code/Ronnie/docker_django_vue/backend/project/urls.py
+++ b/code/Ronnie/docker_django_vue/backend/project/urls.py
@@ -14,8 +14,11 @@
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
+from django.views.generic import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
+ path('api/', include('api.urls')),
+ path('', TemplateView.as_view(template_name='index.html'), name='index'),
]
diff --git a/code/Ronnie/docker_django_vue/backend/requirements.txt b/code/Ronnie/docker_django_vue/backend/requirements.txt
index c2e4835f..ae70e869 100644
--- a/code/Ronnie/docker_django_vue/backend/requirements.txt
+++ b/code/Ronnie/docker_django_vue/backend/requirements.txt
@@ -1,4 +1,12 @@
+asgiref==3.5.2
+certifi==2022.9.14
+charset-normalizer==2.1.1
Django==4.1
+django-cors-headers==3.13.0
djangorestframework==3.14.0
+idna==3.4
Pillow==9.2.0
+pytz==2022.2.1
requests==2.28.1
+sqlparse==0.4.2
+urllib3==1.26.12
diff --git a/code/Ronnie/docker_django_vue/backend/templates/index.html b/code/Ronnie/docker_django_vue/backend/templates/index.html
new file mode 100644
index 00000000..dfda8700
--- /dev/null
+++ b/code/Ronnie/docker_django_vue/backend/templates/index.html
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+ ToDo Items
+
+
+
+
+
+
+
From b29712973c7346b8d4615a7b33d9386a1a8fd54e Mon Sep 17 00:00:00 2001
From: radmosley <34037881+radmosley@users.noreply.github.com>
Date: Tue, 25 Oct 2022 20:05:09 -0700
Subject: [PATCH 2/3] add api methods
---
code/Ronnie/docker_django_vue/backend/api/views.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/Ronnie/docker_django_vue/backend/api/views.py b/code/Ronnie/docker_django_vue/backend/api/views.py
index 8e46a876..1a3d5518 100644
--- a/code/Ronnie/docker_django_vue/backend/api/views.py
+++ b/code/Ronnie/docker_django_vue/backend/api/views.py
@@ -6,4 +6,4 @@ class ToDoViewSet(viewsets.ModelViewSet):
queryset = ToDo.objects.all()
serializer_class = ToDoSerializer
# Api methods
- http_method_names = ["get", "post", "head", "delete", "update"]
\ No newline at end of file
+ http_method_names = ["get", "post", "head", "delete", "put"]
\ No newline at end of file
From cec337bb71799f457f59a8bf255557b7fa5384da Mon Sep 17 00:00:00 2001
From: radmosley <34037881+radmosley@users.noreply.github.com>
Date: Wed, 26 Oct 2022 21:24:26 -0700
Subject: [PATCH 3/3] NuggetServer login example
---
code/Ronnie/daniel_example/.gitignore | 138 ++++++++++++++++++
.../CapstoneProject/__init__.py | 0
.../daniel_example/CapstoneProject/asgi.py | 16 ++
.../CapstoneProject/settings.py | 132 +++++++++++++++++
.../daniel_example/CapstoneProject/urls.py | 12 ++
.../daniel_example/CapstoneProject/wsgi.py | 16 ++
.../daniel_example/NuggetServer/__init__.py | 0
.../daniel_example/NuggetServer/admin.py | 4 +
.../daniel_example/NuggetServer/apps.py | 6 +
.../daniel_example/NuggetServer/forms.py | 20 +++
.../daniel_example/NuggetServer/models.py | 7 +
.../templates/NuggetServer/header.html | 20 +++
.../templates/NuggetServer/index.html | 10 ++
.../templates/NuggetServer/mytemplate.html | 19 +++
.../templates/NuggetServer/register.html | 16 ++
.../daniel_example/NuggetServer/tests.py | 3 +
.../daniel_example/NuggetServer/urls.py | 10 ++
.../daniel_example/NuggetServer/views.py | 51 +++++++
code/Ronnie/daniel_example/manage.py | 22 +++
.../Ronnie/daniel_example/static/catfaces.jpg | Bin 0 -> 364318 bytes
.../templates/registration/login.html | 17 +++
21 files changed, 519 insertions(+)
create mode 100644 code/Ronnie/daniel_example/.gitignore
create mode 100644 code/Ronnie/daniel_example/CapstoneProject/__init__.py
create mode 100644 code/Ronnie/daniel_example/CapstoneProject/asgi.py
create mode 100644 code/Ronnie/daniel_example/CapstoneProject/settings.py
create mode 100644 code/Ronnie/daniel_example/CapstoneProject/urls.py
create mode 100644 code/Ronnie/daniel_example/CapstoneProject/wsgi.py
create mode 100644 code/Ronnie/daniel_example/NuggetServer/__init__.py
create mode 100644 code/Ronnie/daniel_example/NuggetServer/admin.py
create mode 100644 code/Ronnie/daniel_example/NuggetServer/apps.py
create mode 100644 code/Ronnie/daniel_example/NuggetServer/forms.py
create mode 100644 code/Ronnie/daniel_example/NuggetServer/models.py
create mode 100644 code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/header.html
create mode 100644 code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/index.html
create mode 100644 code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/mytemplate.html
create mode 100644 code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/register.html
create mode 100644 code/Ronnie/daniel_example/NuggetServer/tests.py
create mode 100644 code/Ronnie/daniel_example/NuggetServer/urls.py
create mode 100644 code/Ronnie/daniel_example/NuggetServer/views.py
create mode 100755 code/Ronnie/daniel_example/manage.py
create mode 100644 code/Ronnie/daniel_example/static/catfaces.jpg
create mode 100644 code/Ronnie/daniel_example/templates/registration/login.html
diff --git a/code/Ronnie/daniel_example/.gitignore b/code/Ronnie/daniel_example/.gitignore
new file mode 100644
index 00000000..969097fd
--- /dev/null
+++ b/code/Ronnie/daniel_example/.gitignore
@@ -0,0 +1,138 @@
+# Django #
+*.log
+*.pot
+*.pyc
+**/__pycache__
+db.sqlite3
+media
+
+
+# Backup files #
+*.bak
+
+# If you are using PyCharm #
+# 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
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Python #
+*.py[cod]
+*$py.class
+
+# Distribution / packaging
+.Python build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+.pytest_cache/
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery
+celerybeat-schedule.*
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+
+# Sublime Text #
+*.tmlanguage.cache
+*.tmPreferences.cache
+*.stTheme.cache
+*.sublime-workspace
+*.sublime-project
+
+# sftp configuration file
+sftp-config.json
+
+# Package control specific files Package
+Control.last-run
+Control.ca-list
+Control.ca-bundle
+Control.system-ca-bundle
+GitHub.sublime-settings
+
+# Visual Studio Code #
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+.history
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/CapstoneProject/__init__.py b/code/Ronnie/daniel_example/CapstoneProject/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/code/Ronnie/daniel_example/CapstoneProject/asgi.py b/code/Ronnie/daniel_example/CapstoneProject/asgi.py
new file mode 100644
index 00000000..3edd8092
--- /dev/null
+++ b/code/Ronnie/daniel_example/CapstoneProject/asgi.py
@@ -0,0 +1,16 @@
+"""
+ASGI config for CapstoneProject 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/4.1/howto/deployment/asgi/
+"""
+
+import os
+
+from django.core.asgi import get_asgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'CapstoneProject.settings')
+
+application = get_asgi_application()
diff --git a/code/Ronnie/daniel_example/CapstoneProject/settings.py b/code/Ronnie/daniel_example/CapstoneProject/settings.py
new file mode 100644
index 00000000..bc4e8211
--- /dev/null
+++ b/code/Ronnie/daniel_example/CapstoneProject/settings.py
@@ -0,0 +1,132 @@
+"""
+Django settings for CapstoneProject project.
+
+Generated by 'django-admin startproject' using Django 4.1.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.1/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/4.1/ref/settings/
+"""
+
+from pathlib import Path
+
+# Build paths inside the project like this: BASE_DIR / 'subdir'.
+BASE_DIR = Path(__file__).resolve().parent.parent
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'django-insecure-dsn2)dj-i@vvtr^hmo7kf$-ghi-2$bse&$t+-cef$e(i@nf*h4'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'NuggetServer',
+]
+
+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 = 'CapstoneProject.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [BASE_DIR / "templates"],
+ '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 = 'CapstoneProject.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': BASE_DIR / 'db.sqlite3',
+ }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/4.1/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/4.1/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'EST'
+
+USE_I18N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/4.1/howto/static-files/
+
+STATIC_URL = 'static/'
+
+# Default primary key field type
+# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
+
+DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+
+LOGIN_REDIRECT_URL = "/homepage/"
+
+# LOGIN_REDIRECT_URL = 'NuggetServer:login'
+LOGOUT_REDIRECT_URL = 'NuggetServer:logout'
+LOGIN_URL = 'login'
+
+STATICFILES_DIRS = [str(BASE_DIR.joinpath("static"))]
diff --git a/code/Ronnie/daniel_example/CapstoneProject/urls.py b/code/Ronnie/daniel_example/CapstoneProject/urls.py
new file mode 100644
index 00000000..204cb7d2
--- /dev/null
+++ b/code/Ronnie/daniel_example/CapstoneProject/urls.py
@@ -0,0 +1,12 @@
+from django.contrib import admin
+from django.urls import path, include
+from django.contrib.auth import views as auth_views
+
+urlpatterns = [
+ path('admin/', admin.site.urls),
+ path('', include('NuggetServer.urls')),
+ path('accounts/', include("django.contrib.auth.urls")),
+ path("login/", auth_views.LoginView.as_view(template_name = "login.html"), name='login'),
+ path("logout/", auth_views.LogoutView.as_view(), name='logout'),
+]
+
diff --git a/code/Ronnie/daniel_example/CapstoneProject/wsgi.py b/code/Ronnie/daniel_example/CapstoneProject/wsgi.py
new file mode 100644
index 00000000..9ea3c830
--- /dev/null
+++ b/code/Ronnie/daniel_example/CapstoneProject/wsgi.py
@@ -0,0 +1,16 @@
+"""
+WSGI config for CapstoneProject 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/4.1/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'CapstoneProject.settings')
+
+application = get_wsgi_application()
diff --git a/code/Ronnie/daniel_example/NuggetServer/__init__.py b/code/Ronnie/daniel_example/NuggetServer/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/code/Ronnie/daniel_example/NuggetServer/admin.py b/code/Ronnie/daniel_example/NuggetServer/admin.py
new file mode 100644
index 00000000..4fa2e529
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/admin.py
@@ -0,0 +1,4 @@
+from django.contrib import admin
+from .models import MyModel
+
+admin.site.register(MyModel)
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/NuggetServer/apps.py b/code/Ronnie/daniel_example/NuggetServer/apps.py
new file mode 100644
index 00000000..eb8cc3f4
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class NuggetserverConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'NuggetServer'
diff --git a/code/Ronnie/daniel_example/NuggetServer/forms.py b/code/Ronnie/daniel_example/NuggetServer/forms.py
new file mode 100644
index 00000000..f65fbf57
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/forms.py
@@ -0,0 +1,20 @@
+from django import forms
+from django.contrib.auth.forms import UserCreationForm
+from django.contrib.auth.models import User
+
+
+# Create your forms here.
+
+class NewUserForm(UserCreationForm):
+ email = forms.EmailField(required=True)
+
+ class Meta:
+ model = User
+ fields = ("username", "email", "password1", "password2")
+
+ def save(self, commit=True):
+ user = super(NewUserForm, self).save(commit=False)
+ user.email = self.cleaned_data['email']
+ if commit:
+ user.save()
+ return user
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/NuggetServer/models.py b/code/Ronnie/daniel_example/NuggetServer/models.py
new file mode 100644
index 00000000..b22ab648
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/models.py
@@ -0,0 +1,7 @@
+from django.db import models
+
+class MyModel(models.Model):
+ myfield = models.CharField(max_length=200)
+
+ def __str__(self):
+ return self.myfield
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/header.html b/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/header.html
new file mode 100644
index 00000000..2506d6f9
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/header.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+ Title
+
+
+
+ {% block content %}
+
+ {% endblock %}
+
+
+
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/index.html b/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/index.html
new file mode 100644
index 00000000..3a7755ff
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+ index
+
+
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/mytemplate.html b/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/mytemplate.html
new file mode 100644
index 00000000..1df16dd8
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/mytemplate.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+ {% for myinstance in myinstances %}
+ - {{ myinstance.myfield }}
+ {% endfor %}
+
+
+
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/register.html b/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/register.html
new file mode 100644
index 00000000..d3707648
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/templates/NuggetServer/register.html
@@ -0,0 +1,16 @@
+{% extends "NuggetServer/header.html" %}
+
+{% block content %}
+
+
+
+
Register
+
+
If you already have an account, login instead.
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/NuggetServer/tests.py b/code/Ronnie/daniel_example/NuggetServer/tests.py
new file mode 100644
index 00000000..7ce503c2
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/code/Ronnie/daniel_example/NuggetServer/urls.py b/code/Ronnie/daniel_example/NuggetServer/urls.py
new file mode 100644
index 00000000..9863c18d
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/urls.py
@@ -0,0 +1,10 @@
+from django.urls import path
+from . import views
+
+app_name = 'NuggetServer'
+urlpatterns = [
+ path('register/', views.register_request, name="register"),
+ path('home/', views.myhomepage, name='homepage'),
+ path('flash/', views.mycreate, name='FlashWifiNugget'),
+ path('database/', views.mycreate, name='MACDatabase'),
+]
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/NuggetServer/views.py b/code/Ronnie/daniel_example/NuggetServer/views.py
new file mode 100644
index 00000000..f09711a8
--- /dev/null
+++ b/code/Ronnie/daniel_example/NuggetServer/views.py
@@ -0,0 +1,51 @@
+from django.shortcuts import render, redirect
+from .forms import NewUserForm
+from django.contrib.auth import authenticate, login, logout
+from django.contrib import messages
+from django.http import HttpResponseRedirect, HttpResponse
+from .models import MyModel
+from django.contrib.auth.decorators import login_required
+from django.contrib.auth.models import User
+
+
+def register_request(request):
+ if request.method == "POST":
+ form = NewUserForm(request.POST)
+ if form.is_valid():
+ user = form.save()
+ login(request, user)
+ messages.success(request, "Registration successful." )
+ return redirect("NuggetServer:homepage")
+ messages.error(request, "Unsuccessful registration. Invalid information.")
+ else:
+ form = NewUserForm()
+ return render(request, template_name="NuggetServer/register.html", context={"register_form":form})
+
+
+
+
+
+
+@login_required
+def myhomepage(request):
+ return render(request, "NuggetServer/index.html")
+
+# def myflash(request):
+# print("flash")
+
+# def mydatabase(request):
+# print("database")
+
+
+def myview(request):
+ myinstances = MyModel.objects.all()
+ context = {
+ 'myinstances': myinstances
+ }
+ return render(request, 'NuggetServer/mytemplate.html', context)
+
+def mycreate(request):
+ myfield = request.POST['myfield']
+ mymodel = MyModel(myfield=myfield)
+ mymodel.save()
+ return HttpResponseRedirect(reverse('NuggetServer:myview'))
\ No newline at end of file
diff --git a/code/Ronnie/daniel_example/manage.py b/code/Ronnie/daniel_example/manage.py
new file mode 100755
index 00000000..e402ae00
--- /dev/null
+++ b/code/Ronnie/daniel_example/manage.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+
+
+def main():
+ """Run administrative tasks."""
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'CapstoneProject.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/code/Ronnie/daniel_example/static/catfaces.jpg b/code/Ronnie/daniel_example/static/catfaces.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b14338032ebdf5dd4378e4813a1c6a7ad8fb46e9
GIT binary patch
literal 364318
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