diff --git a/OnlineBookClub/__pycache__/settings.cpython-311.pyc b/OnlineBookClub/__pycache__/settings.cpython-311.pyc index fd177bc..b222526 100644 Binary files a/OnlineBookClub/__pycache__/settings.cpython-311.pyc and b/OnlineBookClub/__pycache__/settings.cpython-311.pyc differ diff --git a/OnlineBookClub/__pycache__/urls.cpython-311.pyc b/OnlineBookClub/__pycache__/urls.cpython-311.pyc index 2830b70..3eee775 100644 Binary files a/OnlineBookClub/__pycache__/urls.cpython-311.pyc and b/OnlineBookClub/__pycache__/urls.cpython-311.pyc differ diff --git a/books/__pycache__/tests.cpython-311.pyc b/books/__pycache__/tests.cpython-311.pyc new file mode 100644 index 0000000..a288aa5 Binary files /dev/null and b/books/__pycache__/tests.cpython-311.pyc differ diff --git a/db.sqlite3 b/db.sqlite3 index 61af7c9..4f5b963 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/group/__pycache__/tests.cpython-311.pyc b/group/__pycache__/tests.cpython-311.pyc new file mode 100644 index 0000000..cf32df9 Binary files /dev/null and b/group/__pycache__/tests.cpython-311.pyc differ diff --git a/main/__pycache__/forms.cpython-311.pyc b/main/__pycache__/forms.cpython-311.pyc index 65b84b6..2311542 100644 Binary files a/main/__pycache__/forms.cpython-311.pyc and b/main/__pycache__/forms.cpython-311.pyc differ diff --git a/main/__pycache__/models.cpython-311.pyc b/main/__pycache__/models.cpython-311.pyc index 9674ede..12ca76b 100644 Binary files a/main/__pycache__/models.cpython-311.pyc and b/main/__pycache__/models.cpython-311.pyc differ diff --git a/main/__pycache__/urls.cpython-311.pyc b/main/__pycache__/urls.cpython-311.pyc index 7d0e41d..ca325f6 100644 Binary files a/main/__pycache__/urls.cpython-311.pyc and b/main/__pycache__/urls.cpython-311.pyc differ diff --git a/main/__pycache__/views.cpython-311.pyc b/main/__pycache__/views.cpython-311.pyc index 0e498ab..969ac65 100644 Binary files a/main/__pycache__/views.cpython-311.pyc and b/main/__pycache__/views.cpython-311.pyc differ diff --git a/main/forms.py b/main/forms.py new file mode 100644 index 0000000..2ada947 --- /dev/null +++ b/main/forms.py @@ -0,0 +1,33 @@ +from django.forms import ModelForm +from .models import * +from datetime import date +from django.forms import ModelForm, TextInput, Textarea, Select + + +class CreateFeedback(ModelForm): + class Meta: + model = Feedback + fields = ["feedback"] + widgets = { + 'feedback': TextInput(attrs={ + 'placeholder': "add your comment", + 'class': "form-control" + }), + } + + +class CreateReport(ModelForm): + class Meta: + model = Report + topics_choices = Topic.objects.order_by('-id') + fields = ["report", "topic"] + widgets = { + 'report': TextInput(attrs={ + 'placeholder': "add your comment", + 'class': "form-control" + }), + 'topic': Select(choices=topics_choices, attrs={ + 'placeholder': "horror", + 'class': "form-control" + }), + } \ No newline at end of file diff --git a/main/migrations/0001_initial.py b/main/migrations/0001_initial.py new file mode 100644 index 0000000..c931e93 --- /dev/null +++ b/main/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 5.0.2 on 2024-05-15 09:33 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Feedback', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('feedback', models.TextField(max_length=1000)), + ('date_created', models.DateTimeField(auto_now_add=True, null=True)), + ('user_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/main/migrations/0002_topic_report.py b/main/migrations/0002_topic_report.py new file mode 100644 index 0000000..a862295 --- /dev/null +++ b/main/migrations/0002_topic_report.py @@ -0,0 +1,33 @@ +# Generated by Django 5.0.2 on 2024-05-19 19:16 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Topic', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ], + ), + migrations.CreateModel( + name='Report', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('report', models.TextField(max_length=1000)), + ('date_created', models.DateTimeField(auto_now_add=True, null=True)), + ('user_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('topic', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.topic')), + ], + ), + ] diff --git a/main/migrations/__pycache__/0001_initial.cpython-311.pyc b/main/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000..8e6cec0 Binary files /dev/null and b/main/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/main/migrations/__pycache__/0002_topic_report.cpython-311.pyc b/main/migrations/__pycache__/0002_topic_report.cpython-311.pyc new file mode 100644 index 0000000..2ded773 Binary files /dev/null and b/main/migrations/__pycache__/0002_topic_report.cpython-311.pyc differ diff --git a/main/models.py b/main/models.py index 137941f..1bb8adc 100644 --- a/main/models.py +++ b/main/models.py @@ -1 +1,30 @@ from django.db import models +from django.contrib.auth.models import User + + +class Topic(models.Model): + name = models.CharField(max_length=200) + + def __str__(self): + return self.name + + +class Feedback(models.Model): + feedback = models.TextField(max_length=1000, blank=False) + user_id = models.ForeignKey(User, blank=False, on_delete=models.CASCADE) + date_created = models.DateTimeField(auto_now_add=True, null=True) + + def __str__(self): + return str(self.feedback) + + + +class Report(models.Model): + report = models.TextField(max_length=1000, blank=False) + user_id = models.ForeignKey(User, blank=False, on_delete=models.CASCADE) + topic = models.ForeignKey(Topic, blank=False, on_delete=models.CASCADE) + date_created = models.DateTimeField(auto_now_add=True, null=True) + + def __str__(self): + return str(self.report) + diff --git a/main/templates/main/feedback.html b/main/templates/main/feedback.html new file mode 100644 index 0000000..25e9988 --- /dev/null +++ b/main/templates/main/feedback.html @@ -0,0 +1,33 @@ +{% extends 'main/layout.html' %} + + +{% block content %} + +{% endblock %} \ No newline at end of file diff --git a/main/templates/main/home.html b/main/templates/main/home.html index 19b58f9..6ca04f5 100644 --- a/main/templates/main/home.html +++ b/main/templates/main/home.html @@ -1,15 +1,11 @@ - + {% extends 'main/layout.html' %} {% block content %} - - - - Title - + {% load static %} - +
+
+

{{ el.feedback }}

+
+

{{ el.user_id }}

+

{{ el.date_created }}

+
+
+ {% endfor %} +
+ + +{% endblock %} \ No newline at end of file diff --git a/manager/templates/manager/home.html b/manager/templates/manager/home.html index 441ed34..4c5f67c 100644 --- a/manager/templates/manager/home.html +++ b/manager/templates/manager/home.html @@ -28,5 +28,15 @@

Admin dashboard

Users +
+ + Feedbacks + +
+
+ + Reports + +
{% endblock %} \ No newline at end of file diff --git a/manager/templates/manager/report_list.html b/manager/templates/manager/report_list.html new file mode 100644 index 0000000..cf0743a --- /dev/null +++ b/manager/templates/manager/report_list.html @@ -0,0 +1,58 @@ +{% extends 'main/layout.html' %} + + +{% block content %} +
+
+

Reports

+
+ +
+{% if error %} + {{error}} +{% endif %} + +
+ + {% for el in instance_list %} + + +
+
+
+

{{ el.user_id }} about {{ el.topic }}

+
+
+

{{ el.date_created }}

+
+
+
+
+
{{ el.report }}
+ +
+
+
+ {% endfor %} + + +
+ + +{% endblock %} \ No newline at end of file diff --git a/manager/tests.py b/manager/tests.py index 7ce503c..0b3bc72 100644 --- a/manager/tests.py +++ b/manager/tests.py @@ -1,3 +1,47 @@ -from django.test import TestCase +from django.test import TestCase, RequestFactory, Client +from django.contrib.auth.models import User +from django.contrib.auth.forms import AuthenticationForm +from django.contrib.messages.storage.fallback import FallbackStorage +from django.contrib.messages import get_messages +from django.core import mail +from django.urls import reverse +from django.contrib.auth import login +from main.models import Topic, Report +from django.utils import timezone +#from .views import welcome_email, register_request, login_request, logout_request + + +class ReportTestCase(TestCase): + + def setUp(self): + # Create a user and topic for testing + self.user = User.objects.create_user(username='testuser', password='testpassword') + self.topic = Topic.objects.create(name='testtopic') + self.report = Report.objects.create( + report='test report', + user_id=self.user, + topic=self.topic, + date_created='2024-05-15 09:54:51.031313' + ) + + def test_report_create(self): + data = { + "report": 'test report', + "user_id": self.user, + "topic": self.topic, + "date_created": '2024-05-15 09:54:51.031313' + } + response = self.client.post(reverse('main:report'), data) + print('report create') + print("response.status_code = ", response.status_code) + self.assertEqual(response.status_code, 200) + + def test_report_delete(self): + self.client.login(username='testuser', password='testpassword') + response = self.client.post(reverse('manager:report_delete', kwargs={'id': self.report.id})) + self.assertEqual(response.status_code, 302) + print("report delete") + with self.assertRaises(Report.DoesNotExist): + Report.objects.get(id=self.report.id) + -# Create your tests here. diff --git a/manager/urls.py b/manager/urls.py index 76556f9..ac90c6a 100644 --- a/manager/urls.py +++ b/manager/urls.py @@ -9,7 +9,10 @@ path('', views.index, name='home'), path('users_list', views.users_list, name='users_list'), path('group_list', views.group_list, name='group_list'), + path('feedback_list', views.feedback_list, name='feedback_list'), + path('report_list', views.report_list, name='report_list'), path('group_show/', views.group_show, name='group_show'), + path('report_list/report_delete/', views.report_delete, name='report_delete'), ] diff --git a/manager/views.py b/manager/views.py index 2489cbe..34dafae 100644 --- a/manager/views.py +++ b/manager/views.py @@ -2,6 +2,7 @@ from user.models import Profile_user from django.contrib.auth.models import User from group.models import * +from main.models import Feedback, Report # Create your views here. def index(request): @@ -15,6 +16,32 @@ def group_list(request): groups_list = Group.objects.order_by('-id') return render(request, 'manager/group_list.html', {'instance_list':groups_list}) +def feedback_list(request): + feedbacks_list = Feedback.objects.order_by('-id') + return render(request, 'manager/feedback_list.html', {'instance_list':feedbacks_list}) +def report_list(request): + reports_list = Report.objects.order_by('-id') + return render(request, 'manager/report_list.html', {'instance_list':reports_list}) + + +def report_delete(request, id): + print(f"=== report, action: report_delete === ") + print(f"id: ", id) + + try: + obj = None + obj = Report.objects.get(id=id) + print(f"obj: {obj}") + obj.delete() + except (Exception) as e: + keeper_service.push("error", str(e)) + print(f"Error: {e}") + + + return redirect('manager:report_list') + + + def group_show(request, id): print(f"=== group, action: show === ") print("request = ", request.GET) diff --git a/media/images/DSC_0722_2.JPG b/media/images/DSC_0722_2.JPG new file mode 100644 index 0000000..2985fbd Binary files /dev/null and b/media/images/DSC_0722_2.JPG differ diff --git a/media/images/photo_5249045713772469674_x.jpg b/media/images/photo_5249045713772469674_x.jpg new file mode 100644 index 0000000..962d97b Binary files /dev/null and b/media/images/photo_5249045713772469674_x.jpg differ diff --git a/media/images/photo_5249045713772469676_x.jpg b/media/images/photo_5249045713772469676_x.jpg new file mode 100644 index 0000000..0c94d98 Binary files /dev/null and b/media/images/photo_5249045713772469676_x.jpg differ diff --git a/session/__pycache__/tests.cpython-311.pyc b/session/__pycache__/tests.cpython-311.pyc new file mode 100644 index 0000000..ecbace3 Binary files /dev/null and b/session/__pycache__/tests.cpython-311.pyc differ diff --git a/user/__pycache__/tests.cpython-311.pyc b/user/__pycache__/tests.cpython-311.pyc new file mode 100644 index 0000000..6d52bc5 Binary files /dev/null and b/user/__pycache__/tests.cpython-311.pyc differ