diff --git a/mysite/db.sqlite3 b/mysite/db.sqlite3 index 974c5e166f6b93251f10bc9a0ddf5e87c5a80de3..8ec908c4e378dfe884c1eb99c603a9cbf7f79871 100644 Binary files a/mysite/db.sqlite3 and b/mysite/db.sqlite3 differ diff --git a/mysite/media/products/armband.jpg b/mysite/media/products/armband.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d685db123bea21375d335401ba961dc131b7a91d Binary files /dev/null and b/mysite/media/products/armband.jpg differ diff --git a/mysite/media/products/potato.jpg b/mysite/media/products/potato.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53ecf645de65738daab938c0ee70414dbb0eb302 Binary files /dev/null and b/mysite/media/products/potato.jpg differ diff --git a/mysite/mysite/__pycache__/settings.cpython-312.pyc b/mysite/mysite/__pycache__/settings.cpython-312.pyc index 636a975437a4c92337e3427375783ccd3a816f72..8994de667dd7457f89959557cc6e0213c496f231 100644 Binary files a/mysite/mysite/__pycache__/settings.cpython-312.pyc and b/mysite/mysite/__pycache__/settings.cpython-312.pyc differ diff --git a/mysite/mysite/__pycache__/urls.cpython-312.pyc b/mysite/mysite/__pycache__/urls.cpython-312.pyc index 438bd7d557730105f8813189aed3f0a5e77d45d2..32930c4eb834a3e24c29f93581dad29dd2cacb3e 100644 Binary files a/mysite/mysite/__pycache__/urls.cpython-312.pyc and b/mysite/mysite/__pycache__/urls.cpython-312.pyc differ diff --git a/mysite/mysite/settings.py b/mysite/mysite/settings.py index f5063d18db57b58cf84e7d15bc6c9b05fa12c52c..dbc97c1bbf49cb1f416894145c53c58f2f3f5224 100644 --- a/mysite/mysite/settings.py +++ b/mysite/mysite/settings.py @@ -43,12 +43,15 @@ INSTALLED_APPS = [ "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", - "themeApp" + "themeApp", + 'rest_framework', + 'corsheaders' ] MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", + 'corsheaders.middleware.CorsMiddleware', "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", @@ -128,3 +131,12 @@ STATIC_URL = "static/" # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + + +#CORS_ALLOWED_ORIGINS = [ +# "http://localhost:8000",0 + # Add other allowed origins here +#]*/ + +CORS_ALLOW_ALL_ORIGINS = True +# but not recommended \ No newline at end of file diff --git a/mysite/mysite/urls.py b/mysite/mysite/urls.py index c4cdb8cb41708b1e4be3f85461c7b946f56350e1..484d157442db3b755418769f797d6919538508df 100644 --- a/mysite/mysite/urls.py +++ b/mysite/mysite/urls.py @@ -18,8 +18,15 @@ Including another URLconf from django.contrib import admin from django.urls import path, include +from django.conf import settings +from django.conf.urls.static import static + urlpatterns = [ path('admin/', admin.site.urls), path('polls/', include('polls.urls')), # Include the URLs from the polls app path('themeApp/', include('themeApp.urls')), # Include the URLs from the themeApp app -] \ No newline at end of file + # path('/', include('themeApp.urls')), +] + +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/mysite/themeApp/__pycache__/admin.cpython-312.pyc b/mysite/themeApp/__pycache__/admin.cpython-312.pyc index 32119b6c6cc50c70efb6907865869651a7ea57e1..fbe8f2a237fc31df8b92baccb87644133134def4 100644 Binary files a/mysite/themeApp/__pycache__/admin.cpython-312.pyc and b/mysite/themeApp/__pycache__/admin.cpython-312.pyc differ diff --git a/mysite/themeApp/__pycache__/serializers.cpython-312.pyc b/mysite/themeApp/__pycache__/serializers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..382e09ac021b03532c5108db1fbe434b588aa307 Binary files /dev/null and b/mysite/themeApp/__pycache__/serializers.cpython-312.pyc differ diff --git a/mysite/themeApp/__pycache__/urls.cpython-312.pyc b/mysite/themeApp/__pycache__/urls.cpython-312.pyc index 91274d110a9427ccc5704c70042a7de523ef00b5..8079493aad844ed284f4dc18ec37339e5b3dd5af 100644 Binary files a/mysite/themeApp/__pycache__/urls.cpython-312.pyc and b/mysite/themeApp/__pycache__/urls.cpython-312.pyc differ diff --git a/mysite/themeApp/__pycache__/views.cpython-312.pyc b/mysite/themeApp/__pycache__/views.cpython-312.pyc index 1b0663520ea562de66185c401b16962ce57bcd94..37ae501e3bd67f39f097208fa619116022f7cd79 100644 Binary files a/mysite/themeApp/__pycache__/views.cpython-312.pyc and b/mysite/themeApp/__pycache__/views.cpython-312.pyc differ diff --git a/mysite/themeApp/admin.py b/mysite/themeApp/admin.py index c8127a27064975690f17f228e8505a6959c8e294..4423e5b9b77e4702b6826aad3786ebd08aa1fbc0 100644 --- a/mysite/themeApp/admin.py +++ b/mysite/themeApp/admin.py @@ -1,4 +1,4 @@ from django.contrib import admin from .models import Product # Register your models here. -admin.site.register(Product) \ No newline at end of file +admin.site.register(Product) diff --git a/mysite/themeApp/migrations/0002_category.py b/mysite/themeApp/migrations/0002_category.py new file mode 100644 index 0000000000000000000000000000000000000000..ff2d2adbc5dbff9544b292a4861fbdd939ccff28 --- /dev/null +++ b/mysite/themeApp/migrations/0002_category.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.6 on 2024-05-21 15:21 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('themeApp', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ], + ), + ] diff --git a/mysite/themeApp/migrations/__pycache__/0002_category.cpython-312.pyc b/mysite/themeApp/migrations/__pycache__/0002_category.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2c893bb569843c6cd44e621be8aca0d02250615 Binary files /dev/null and b/mysite/themeApp/migrations/__pycache__/0002_category.cpython-312.pyc differ diff --git a/mysite/themeApp/serializers.py b/mysite/themeApp/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..cbb7c93f290837be63b075e725c0d253fae97457 --- /dev/null +++ b/mysite/themeApp/serializers.py @@ -0,0 +1,8 @@ +# myapp/serializers.py +from rest_framework import serializers +from .models import Product + +class ProductSerializer(serializers.ModelSerializer): + class Meta: + model = Product + fields = '__all__' diff --git a/mysite/themeApp/urls.py b/mysite/themeApp/urls.py index 8fe2ca2f087045fc91c461276d51d7099a284c31..58fa4e91468095fd5d0923ff22604d47c0bdcf8b 100644 --- a/mysite/themeApp/urls.py +++ b/mysite/themeApp/urls.py @@ -1,15 +1,11 @@ -from django.urls import path -from django.conf.urls.static import static -from django.conf import settings -from . import views +# myapp/urls.py +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from .views import ProductViewSet -from django.urls import path -from . import views +router = DefaultRouter() +router.register(r'products', ProductViewSet) urlpatterns = [ - path('', views.home, name='home'), # The view for the root URL of the themeApp - # Add other URL patterns as needed + path('', include(router.urls)), ] - -if settings.DEBUG: - urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/mysite/themeApp/views.py b/mysite/themeApp/views.py index e29268a6149182cc5e6b5cde209034813f8408bc..ca456411cffbc4b24297586677875c660f493387 100644 --- a/mysite/themeApp/views.py +++ b/mysite/themeApp/views.py @@ -1,8 +1,10 @@ -from django.http import HttpResponse +# myapp/views.py +from rest_framework import viewsets +from .models import Product +from .serializers import ProductSerializer -# Create your views here. +class ProductViewSet(viewsets.ModelViewSet): + queryset = Product.objects.all() + serializer_class = ProductSerializer -from django.http import HttpResponse -def home(request): - return HttpResponse("Welcome to the themeApp home page.") \ No newline at end of file diff --git a/theme-costume-app/package-lock.json b/theme-costume-app/package-lock.json index 863750e870c60c21b55df235c3caaae94d831ee9..37d78eab603732be70223beb2f1de7467dabda1e 100644 --- a/theme-costume-app/package-lock.json +++ b/theme-costume-app/package-lock.json @@ -15,6 +15,7 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "axios": "^1.7.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.22.3", @@ -5925,6 +5926,29 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.1.tgz", + "integrity": "sha512-+LV37nQcd1EpFalkXksWNBiA17NZ5m5/WspmHGmZmdx1qBOg/VNq/c4eRJiA9VQQHBOs+N0ZhhdU10h2TyNK7Q==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", @@ -15350,6 +15374,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", diff --git a/theme-costume-app/package.json b/theme-costume-app/package.json index a32b663c2d738119b7fe2c04dadb5fdd82b698c7..7037ae1ade3448ef7fba67ae0b0f128e9f52ad12 100644 --- a/theme-costume-app/package.json +++ b/theme-costume-app/package.json @@ -10,6 +10,7 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "axios": "^1.7.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.22.3", diff --git a/theme-costume-app/src/App.js b/theme-costume-app/src/App.js index 20e0c8a48a837a1ac181bb4033febc2cc3a1afa9..599c40f27c3ceae4812f1c1f1fdcae03d20d5f63 100644 --- a/theme-costume-app/src/App.js +++ b/theme-costume-app/src/App.js @@ -4,6 +4,7 @@ import Home from './Home'; import About from './About'; import Profile from './Profile'; import Charts from './Charts'; +import Dashboard from './Dashboard'; import ResponsiveAppBar from './components/ResponsiveAppBar'; function App() { @@ -32,6 +33,7 @@ function App() { <Route path="/" element={<Home />} /> <Route path="/news" element={<About />} /> <Route path="/Topplistan" element={<Charts />} /> + <Route path="/dashboard" element={<Dashboard />} /> </Routes> </div> diff --git a/theme-costume-app/src/Dashboard.js b/theme-costume-app/src/Dashboard.js new file mode 100644 index 0000000000000000000000000000000000000000..a3446eac830b13d51cdc4b1fac3082ee710e9e7b --- /dev/null +++ b/theme-costume-app/src/Dashboard.js @@ -0,0 +1,56 @@ +import React, { useEffect, useState } from 'react'; +import axios from 'axios'; + +function ProductsPage() { + const [products, setProducts] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + axios.get('http://127.0.0.1:8000/themeApp/products/') // Replace with your Django API endpoint + .then(response => { + setProducts(response.data); + setLoading(false); + }) + .catch(error => { + setError(error); + setLoading(false); + }); + }, []); + + if (loading) return <p>Loading...</p>; + if (error) return <p>Error loading products: {error.message}</p>; + + return ( + <div style={{ padding: '20px' }}> + <h1 style={{ fontSize: '24px', marginBottom: '20px' }}>Products</h1> + <ul style={{ listStyleType: 'none', padding: 0 }}> + {products.map(product => ( + <li key={product.id} style={{ + fontSize: '18px', + padding: '10px', + marginBottom: '10px', + border: '1px solid #ccc', + borderRadius: '4px', + cursor: 'pointer', + transition: 'box-shadow 0.3s ease-in-out', + display: 'flex', + alignItems: 'center' + }} + onMouseEnter={(e) => { + e.currentTarget.style.boxShadow = '0 0 20px rgba(0, 0, 0, 0.35)'; + }} + onMouseLeave={(e) => { + e.currentTarget.style.boxShadow = 'none'; + }} + > + <img src={product.image} alt={product.name} style={{ width: '50px', height: '50px', marginRight: '10px', borderRadius: '4px' }} /> + {product.name} + </li> + ))} + </ul> + </div> + ); +} + +export default ProductsPage;